<?xml version="1.0" encoding="UTF-8"?>
<robot generator="Robot 7.4.2 (Python 3.11.10 on linux)" generated="2026-08-23T01:46:01.551385" rpa="false" schemaversion="5">
<suite id="s1" name="netconf-gate-userfeatures.txt">
<suite id="s1-s1" name="Ready" source="/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/ready">
<suite id="s1-s1-s1" name="Netconfready" source="/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/ready/netconfready.robot">
<kw name="Setup_Everything" 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-08-23T01:46:02.191265" 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-08-23T01:46:02.186897" elapsed="0.004433"/>
</kw>
<doc>Set suite to not fail fast.</doc>
<status status="PASS" start="2026-08-23T01:46:02.186404" elapsed="0.005009"/>
</kw>
<kw name="Setup_Karaf_Keywords" owner="KarafKeywords">
<kw name="ClusterManagement_Setup" owner="ClusterManagement">
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-08-23T01:46:02.196851" 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-08-23T01:46:02.192903" elapsed="0.003982"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-08-23T01:46:02.197121" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-23T01:46:02.196999" elapsed="0.000195"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:02.196966" elapsed="0.000255"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T01:46:02.197807" 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-08-23T01:46:02.197404" elapsed="0.000467"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-08-23T01:46:02.198375" 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-08-23T01:46:02.198045" elapsed="0.000359"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Convert To Integer" owner="BuiltIn">
<arg>${cluster_size}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-08-23T01:46:02.198988" elapsed="0.000303"/>
</kw>
<msg time="2026-08-23T01:46:02.199401" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T01:46:02.199450" 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-08-23T01:46:02.198581" elapsed="0.000892"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T01:46:02.200050" 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-08-23T01:46:02.199644" elapsed="0.000433"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T01:46:02.201709" level="INFO">@{member_index_list} = [ ]</msg>
<var>@{member_index_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-08-23T01:46:02.201422" elapsed="0.000316"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T01:46:02.202285" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-08-23T01:46:02.201903" elapsed="0.000410"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T01:46:02.202808" 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-08-23T01:46:02.202471" elapsed="0.000380"/>
</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-08-23T01:46:02.206147" elapsed="0.000235"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T01:46:02.206887" level="INFO">${member_ip} = 10.30.170.114</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-08-23T01:46:02.206540" elapsed="0.000375"/>
</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-08-23T01:46:02.207068" elapsed="0.000281"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T01:46:02.208192" 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-08-23T01:46:02.207889" elapsed="0.000331"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-08-23T01:46:02.208269" elapsed="0.000041"/>
</return>
<msg time="2026-08-23T01:46:02.208442" 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-08-23T01:46:02.207555" elapsed="0.000912"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:46:02.209175" level="INFO">Creating Session using : alias=ClusterManagement__session_1, url=http://10.30.170.114:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x72b0efa85c10&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-08-23T01:46:02.208691" elapsed="0.000644"/>
</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-08-23T01:46:02.209498" elapsed="0.000192"/>
</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-08-23T01:46:02.205457" elapsed="0.004293"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T01:46:02.205261" elapsed="0.004535"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="PASS" start="2026-08-23T01:46:02.202914" elapsed="0.006932"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T01:46:02.210484" 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-08-23T01:46:02.210066" elapsed="0.000463"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T01:46:02.211114" level="INFO">${ClusterManagement__index_to_ip_mapping} = {1: '10.30.170.114'}</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-08-23T01:46:02.210690" elapsed="0.000469"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T01:46:02.211713" 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-08-23T01:46:02.211319" elapsed="0.000438"/>
</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-08-23T01:46:02.200933" elapsed="0.010883"/>
</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-08-23T01:46:02.192514" elapsed="0.019377"/>
</kw>
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T01:46:02.212094" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-08-23T01:46:02.211968" elapsed="0.000175"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:02.211946" elapsed="0.000221"/>
</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-08-23T01:46:02.215489" 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-08-23T01:46:02.215099" elapsed="0.000417"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T01:46:02.215990" 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-08-23T01:46:02.215675" elapsed="0.000342"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T01:46:02.216063" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T01:46:02.216223" 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-08-23T01:46:02.214749" elapsed="0.001499"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T01:46:02.217286" level="INFO">${member_ip} = 10.30.170.114</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-08-23T01:46:02.216984" elapsed="0.000329"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-08-23T01:46:02.218188" 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-08-23T01:46:02.218298" 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-08-23T01:46:02.217989" elapsed="0.000335"/>
</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-08-23T01:46:02.222284" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:02.221222" elapsed="0.001171"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:02.221176" elapsed="0.001292"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-08-23T01:46:02.223165" 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-08-23T01:46:02.223441" 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-08-23T01:46:02.222742" elapsed="0.000800"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:02.224501" level="INFO">Attempting to execute command "iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save" on remote system "10.30.170.114" 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-08-23T01:46:02.223808" elapsed="0.000849"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-08-23T01:46:02.225937" 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-08-23T01:46:02.225043" elapsed="0.000993"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-08-23T01:46:02.227540" level="INFO">Length is 0.</msg>
<msg time="2026-08-23T01:46:02.227620" 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-08-23T01:46:02.227166" elapsed="0.000478"/>
</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-08-23T01:46:02.227903" elapsed="0.000349"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-08-23T01:46:02.229285" level="INFO">Logging into '10.30.170.114:22' as 'jenkins'.</msg>
<msg time="2026-08-23T01:46:02.627986" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-186-generic x86_64)

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

 System information as of Sun Aug 23 01:45:02 UTC 2026

  System load:  0.17               Processes:             126
  Usage of /:   13.2% of 77.35GB   Users logged in:       0
  Memory usage: 2%                 IPv4 address for ens3: 10.30.170.114
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

14 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-19126-54-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-08-23T01:46:02.228911" elapsed="0.399177"/>
</kw>
<msg time="2026-08-23T01:46:02.628163" 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-08-23T01:46:02.228464" elapsed="0.399782"/>
</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-08-23T01:46:02.226396" elapsed="0.402058"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-23T01:46:02.629226" level="INFO">Executing command 'iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save'.</msg>
<msg time="2026-08-23T01:46:02.642298" level="INFO">Command exited with return code 4.</msg>
<msg time="2026-08-23T01:46:02.642708" level="INFO">${stdout} = </msg>
<msg time="2026-08-23T01:46:02.642953" 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-08-23T01:46:02.628777" elapsed="0.014359"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-08-23T01:46:02.643765" elapsed="0.001316"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:02.647618" 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-08-23T01:46:02.646415" elapsed="0.001687"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-08-23T01:46:02.649220" elapsed="0.000069"/>
</return>
<status status="NOT RUN" start="2026-08-23T01:46:02.648431" elapsed="0.000967"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:02.648323" elapsed="0.001229"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-08-23T01:46:02.650510" elapsed="0.000143"/>
</return>
<status status="PASS" start="2026-08-23T01:46:02.649923" elapsed="0.000843"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:02.649766" elapsed="0.001212"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-08-23T01:46:02.651184" elapsed="0.000039"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T01:46:02.656775" elapsed="0.000420"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-08-23T01:46:02.657451" elapsed="0.000229"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-08-23T01:46:02.657942" elapsed="0.000165"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T01:46:02.652474" elapsed="0.005712"/>
</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-08-23T01:46:02.220152" elapsed="0.438287"/>
</kw>
<msg time="2026-08-23T01:46:02.658550" 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-08-23T01:46:02.219490" elapsed="0.439117"/>
</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-08-23T01:46:02.219008" elapsed="0.439677"/>
</kw>
<msg time="2026-08-23T01:46:02.658725" 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-08-23T01:46:02.218480" elapsed="0.440292"/>
</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-08-23T01:46:02.661528" elapsed="0.000372"/>
</kw>
<kw name="Open 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-08-23T01:46:02.662063" elapsed="0.000151"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-08-23T01:46:02.662403" elapsed="0.000100"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T01:46:02.659091" elapsed="0.003463"/>
</kw>
<msg time="2026-08-23T01:46:02.662643" 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-08-23T01:46:02.217527" elapsed="0.445141"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:02.663111" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:02.662853" elapsed="0.000300"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-23T01:46:02.663197" 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-08-23T01:46:02.216611" elapsed="0.446716"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T01:46:02.216434" elapsed="0.446929"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T01:46:02.216302" elapsed="0.447097"/>
</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-08-23T01:46:02.212387" elapsed="0.451068"/>
</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-08-23T01:46:02.663605" elapsed="0.000213"/>
</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-08-23T01:46:02.677438" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T01:46:02.677327" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:02.677307" elapsed="0.000202"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-08-23T01:46:02.677797" 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-08-23T01:46:02.677926" 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-08-23T01:46:02.677659" elapsed="0.000293"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:02.678358" level="INFO">{}</msg>
<arg>${connection_index_dict}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:02.678100" elapsed="0.000302"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:02.678788" level="INFO">1</msg>
<arg>${member_index}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:02.678548" elapsed="0.000282"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T01:46:02.679607" 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-08-23T01:46:02.679363" elapsed="0.000445">Dictionary does not contain key '1'.</status>
</kw>
<msg time="2026-08-23T01:46:02.679942" level="INFO">${status} = FAIL</msg>
<msg time="2026-08-23T01:46:02.679987" 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-08-23T01:46:02.679000" elapsed="0.001010"/>
</kw>
<if>
<branch type="IF" condition="'${status}'=='PASS'">
<kw name="Run Keywords" owner="BuiltIn">
<arg>SSHLibrary.Switch_Connection</arg>
<arg>${old_connection_index}</arg>
<arg>AND</arg>
<arg>BuiltIn.Run_Keyword_And_Ignore_Error</arg>
<arg>SSHLibrary.Write</arg>
<arg>logout</arg>
<arg>AND</arg>
<arg>BuiltIn.Run_Keyword_And_Ignore_Error</arg>
<arg>SSHLibrary.Close_Connection</arg>
<doc>Executes all the given keywords in a sequence.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:02.680316" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:02.680087" elapsed="0.000304"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:02.680067" elapsed="0.000350"/>
</if>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T01:46:02.681181" level="INFO">${ip_address} = 10.30.170.114</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-08-23T01:46:02.680914" elapsed="0.000293"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-08-23T01:46:02.681254" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T01:46:02.681416" level="INFO">${odl_ip} = 10.30.170.114</msg>
<var>${odl_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-08-23T01:46:02.680627" elapsed="0.000813"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>${odl_ip}</arg>
<arg>port=${KARAF_SHELL_PORT}</arg>
<arg>prompt=${KARAF_PROMPT_LOGIN}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-08-23T01:46:02.681590" elapsed="0.000438"/>
</kw>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-08-23T01:46:02.682314" level="INFO">index=4
host=10.30.170.114
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-08-23T01:46:02.682421" level="INFO">${karaf_connection_object} = index=4
host=10.30.170.114
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-08-23T01:46:02.682198" elapsed="0.000249"/>
</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-08-23T01:46:02.682592" elapsed="0.002468"/>
</kw>
<kw name="Login" owner="SSHLibrary">
<msg time="2026-08-23T01:46:02.685538" level="INFO">Logging into '10.30.170.114:8101' as 'karaf'.</msg>
<msg time="2026-08-23T01:46:03.369982" 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-08-23T01:46:02.685268" elapsed="0.684821"/>
</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-08-23T01:46:03.373343" elapsed="0.000411"/>
</kw>
<kw name="Open 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-08-23T01:46:03.373943" elapsed="0.000167"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-08-23T01:46:03.374257" elapsed="0.000102"/>
</kw>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T01:46:03.371038" elapsed="0.003371"/>
</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-08-23T01:46:03.370401" elapsed="0.004053"/>
</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-08-23T01:46:02.677047" elapsed="0.697459"/>
</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-08-23T01:46:02.664560" elapsed="0.709992"/>
</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-08-23T01:46:02.664184" elapsed="0.710420"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T01:46:02.664047" elapsed="0.710598"/>
</iter>
<var>${index}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="PASS" start="2026-08-23T01:46:02.663891" elapsed="0.710794"/>
</for>
<arg>http_timeout=${http_timeout}</arg>
<doc>Initialize ClusterManagement. Open ssh karaf connections to each ODL.</doc>
<status status="PASS" start="2026-08-23T01:46:02.191801" elapsed="1.182946"/>
</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-08-23T01:46:03.377452" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T01:46:03.377331" elapsed="0.000170"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:03.377306" elapsed="0.000220"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T01:46:03.382353" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T01:46:03.382238" elapsed="0.000160"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:03.382220" elapsed="0.000200"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T01:46:03.383391" 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-08-23T01:46:03.382991" elapsed="0.000427"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T01:46:03.383892" 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-08-23T01:46:03.383575" elapsed="0.000345"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T01:46:03.383965" elapsed="0.000033"/>
</return>
<msg time="2026-08-23T01:46:03.384123" 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-08-23T01:46:03.382642" elapsed="0.001504"/>
</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-08-23T01:46:03.389713" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T01:46:03.389604" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:03.389585" 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-08-23T01:46:03.391113" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T01:46:03.390932" elapsed="0.000295"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:03.390913" elapsed="0.000341"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T01:46:03.391810" 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-08-23T01:46:03.391397" elapsed="0.000521"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T01:46:03.392409" 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-08-23T01:46:03.392162" elapsed="0.000287"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T01:46:03.484590" 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 "/ "n "e "t "[78Cc "[A[78Co</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T01:46:03.394087" elapsed="0.090657"/>
</kw>
<msg time="2026-08-23T01:46:03.484940" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T01:46:03.485018" 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-08-23T01:46:03.392676" elapsed="0.092395"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T01:46:03.608703" level="INFO">"n "f "- "c "s "i "t "- "1 "n "o "d "e "- "g "a "t "e "- "u "s "e "r "f "e "a "t "u "r "e "s "- "a "l "l "- "v "a "n "a "d "i "u "m "/ "t "e "s "t "/ "c "s "i "t "/ "s "u "i "t "e "s "/ "n "e "t "c "o "n "f "/ "r "e "a "d "y "/ "n "e "[78Ct "[A[78Cc
 "o "n "f "r "e "a "d "y ". "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-08-23T01:46:03.486724" elapsed="0.122173"/>
</kw>
<msg time="2026-08-23T01:46:03.609065" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T01:46:03.609139" level="INFO">${message_wait} =  "n "f "- "c "s "i "t "- "1 "n "o "d "e "- "g "a "t "e "- "u "s "e "r "f "e "a "t "u "r "e "s "- "a "l "l "- "v "a "n "a ...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T01:46:03.485338" elapsed="0.123853"/>
</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-08-23T01:46:03.609686" elapsed="0.000047"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:03.609358" elapsed="0.000472"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:03.609335" elapsed="0.000548"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:03.610580" level="INFO"> "n "f "- "c "s "i "t "- "1 "n "o "d "e "- "g "a "t "e "- "u "s "e "r "f "e "a "t "u "r "e "s "- "a "l "l "- "v "a "n "a "d "i "u "m "/ "t "e "s "t "/ "c "s "i "t "/ "s "u "i "t "e "s "/ "n "e "t "c "o "n "f "/ "r "e "a "d "y "/ "n "e "[78Ct "[A[78Cc
 "o "n "f "r "e "a "d "y ". "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-08-23T01:46:03.610032" elapsed="0.000667"/>
</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-08-23T01:46:03.611160" elapsed="0.000046"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:03.610822" elapsed="0.000482"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:03.610803" elapsed="0.000528"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T01:46:03.611365" 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">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T01:46:03.613267" elapsed="0.000329"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-08-23T01:46:03.613800" elapsed="0.000240"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-08-23T01:46:03.614231" elapsed="0.000103"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T01:46:03.612570" elapsed="0.001870"/>
</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-08-23T01:46:03.611634" elapsed="0.002898"/>
</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-08-23T01:46:03.390556" elapsed="0.224078"/>
</kw>
<msg time="2026-08-23T01:46:03.614729" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T01:46:03.614774" level="INFO">${message} =  "n "f "- "c "s "i "t "- "1 "n "o "d "e "- "g "a "t "e "- "u "s "e "r "f "e "a "t "u "r "e "s "- "a "l "l "- "v "a "n "a ...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T01:46:03.389948" elapsed="0.224864"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T01:46:03.615087" elapsed="0.000029"/>
</return>
<status status="PASS" start="2026-08-23T01:46:03.614971" elapsed="0.000179"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:03.614950" elapsed="0.000224"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:03.615608" 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-08-23T01:46:03.616049" elapsed="0.000027"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T01:46:03.616160" elapsed="0.000018"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-08-23T01:46:03.389313" elapsed="0.226959"/>
</kw>
<msg time="2026-08-23T01:46:03.616368" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T01:46:03.616413" level="INFO">${output} =  "n "f "- "c "s "i "t "- "1 "n "o "d "e "- "g "a "t "e "- "u "s "e "r "f "e "a "t "u "r "e "s "- "a "l "l "- "v "a "n "a ...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T01:46:03.384535" elapsed="0.231916"/>
</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-08-23T01:46:03.616784" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:03.616528" elapsed="0.000338"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:03.616510" elapsed="0.000383"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T01:46:03.384388" elapsed="0.232529"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T01:46:03.384201" elapsed="0.232753"/>
</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-08-23T01:46:03.381943" elapsed="0.235066"/>
</kw>
<doc>Log suite name to karaf log, useful in suite setup.</doc>
<status status="PASS" start="2026-08-23T01:46:03.375345" elapsed="0.241719"/>
</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-08-23T01:46:03.374919" elapsed="0.242193"/>
</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-08-23T01:46:02.186033" elapsed="1.431131"/>
</kw>
<kw name="Set_Netconf_Connector">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T01:46:03.617938" level="INFO">${streamconnector} = /node/controller-config/yang-ext:mount/config:modules/module/sal-restconf-service:json-restconf-service-impl/json-restconf-service-impl</msg>
<var>${streamconnector}</var>
<arg>/node/controller-config/yang-ext:mount/config:modules/module/sal-restconf-service:json-restconf-service-impl/json-restconf-service-impl</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T01:46:03.617639" elapsed="0.000328"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T01:46:03.620493" level="INFO">${connector} = </msg>
<var>${connector}</var>
<arg>${USE_NETCONF_CONNECTOR}</arg>
<arg>${streamconnector}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T01:46:03.618129" elapsed="0.002391"/>
</kw>
<return>
<value>${connector}</value>
<status status="PASS" start="2026-08-23T01:46:03.620574" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T01:46:03.620727" level="INFO">${connector} = </msg>
<var>${connector}</var>
<doc>Sets netconf connector verify url according to the vanadium and False combination</doc>
<status status="PASS" start="2026-08-23T01:46:03.617406" elapsed="0.003347"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T01:46:03.625520" level="INFO">${netconf_connector} = </msg>
<arg>${netconf_connector}</arg>
<arg>${connector}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-23T01:46:03.620938" elapsed="0.004628"/>
</kw>
<kw name="Comment" owner="BuiltIn">
<arg>A workaround for EOF error follows. TODO: Create a test case for the EOF bug, possibly tagged "exclude".</arg>
<doc>Displays the given messages in the log file as keyword arguments.</doc>
<status status="PASS" start="2026-08-23T01:46:03.625724" elapsed="0.000229"/>
</kw>
<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-08-23T01:46:03.640390" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T01:46:03.640280" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:03.640261" elapsed="0.000199"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-08-23T01:46:03.640745" 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-08-23T01:46:03.640865" 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-08-23T01:46:03.640609" elapsed="0.000284"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:03.641305" level="INFO">{1: 4}</msg>
<arg>${connection_index_dict}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:03.641044" elapsed="0.000306"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:03.641745" level="INFO">1</msg>
<arg>${member_index}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:03.641499" elapsed="0.000289"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get From Dictionary" owner="Collections">
<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-08-23T01:46:03.642318" elapsed="0.000183"/>
</kw>
<msg time="2026-08-23T01:46:03.642603" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T01:46:03.642649" level="INFO">${old_connection_index} = 4</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-08-23T01:46:03.641959" elapsed="0.000713"/>
</kw>
<if>
<branch type="IF" condition="'${status}'=='PASS'">
<kw name="Run Keywords" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${old_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-23T01:46:03.643503" elapsed="0.000156"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T01:46:03.660477" level="INFO">logout</msg>
<arg>logout</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T01:46:03.644171" elapsed="0.016410"/>
</kw>
<arg>SSHLibrary.Write</arg>
<arg>logout</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T01:46:03.643824" elapsed="0.016811"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-08-23T01:46:03.661151" elapsed="0.000216"/>
</kw>
<arg>SSHLibrary.Close_Connection</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T01:46:03.660807" elapsed="0.000609"/>
</kw>
<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="PASS" start="2026-08-23T01:46:03.642981" elapsed="0.018481"/>
</kw>
<status status="PASS" start="2026-08-23T01:46:03.642747" elapsed="0.018768"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:03.642729" elapsed="0.018814"/>
</if>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T01:46:03.662332" level="INFO">${ip_address} = 10.30.170.114</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-08-23T01:46:03.662052" elapsed="0.000307"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-08-23T01:46:03.662409" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T01:46:03.662609" level="INFO">${odl_ip} = 10.30.170.114</msg>
<var>${odl_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-08-23T01:46:03.661748" elapsed="0.000887"/>
</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-08-23T01:46:03.662790" elapsed="0.000427"/>
</kw>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-08-23T01:46:03.663490" level="INFO">index=7
host=10.30.170.114
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-08-23T01:46:03.663591" level="INFO">${karaf_connection_object} = index=7
host=10.30.170.114
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-08-23T01:46:03.663382" elapsed="0.000259"/>
</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-08-23T01:46:03.663790" elapsed="0.002256"/>
</kw>
<kw name="Login" owner="SSHLibrary">
<msg time="2026-08-23T01:46:03.666471" level="INFO">Logging into '10.30.170.114:8101' as 'karaf'.</msg>
<msg time="2026-08-23T01:46:03.837075" 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-08-23T01:46:03.666210" elapsed="0.170960"/>
</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-08-23T01:46:03.840305" 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-08-23T01:46:03.840777" elapsed="0.000171"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-08-23T01:46:03.841094" 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-08-23T01:46:03.838049" elapsed="0.003199"/>
</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-08-23T01:46:03.837464" elapsed="0.003829"/>
</kw>
<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-08-23T01:46:03.638537" elapsed="0.202819"/>
</kw>
<arg>2x</arg>
<arg>1s</arg>
<arg>KarafKeywords.Open_Controller_Karaf_Console_On_Background</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-23T01:46:03.626112" elapsed="0.215290"/>
</kw>
<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-08-23T01:46:03.847969" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T01:46:03.847853" elapsed="0.000164"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:03.847820" elapsed="0.000221"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T01:46:03.849007" 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-08-23T01:46:03.848594" elapsed="0.000445"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T01:46:03.849563" 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-08-23T01:46:03.849260" elapsed="0.000330"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T01:46:03.849636" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T01:46:03.849794" 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-08-23T01:46:03.848268" 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-08-23T01:46:03.855860" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-08-23T01:46:03.855716" elapsed="0.000200"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:03.855695" elapsed="0.000246"/>
</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-08-23T01:46:03.857179" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-08-23T01:46:03.857024" elapsed="0.000214"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:03.857004" elapsed="0.000259"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T01:46:03.857691" level="INFO">${karaf_connection_index} = 7</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-08-23T01:46:03.857433" elapsed="0.000289"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T01:46:03.858123" 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-08-23T01:46:03.857922" elapsed="0.000233"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T01:46:03.939927" 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 "N "e "t "c "o "n "f "[C "r "e "a "d "i "n "e "s "s "[C "t "e "s "t "[78C[C "[A[78Cs</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T01:46:03.858753" elapsed="0.081264"/>
</kw>
<msg time="2026-08-23T01:46:03.940141" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T01:46:03.940188" 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 "N "e "t "c "o "n "f "[C "r "e "a "...</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-08-23T01:46:03.858351" elapsed="0.081875"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T01:46:03.942744" level="INFO">"u "i "t "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-08-23T01:46:03.940761" elapsed="0.002046"/>
</kw>
<msg time="2026-08-23T01:46:03.942921" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T01:46:03.942966" level="INFO">${message_wait} =  "u "i "t "e "[K"
[?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-08-23T01:46:03.940403" elapsed="0.002593"/>
</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-08-23T01:46:03.943304" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:03.943074" elapsed="0.000284"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:03.943053" elapsed="0.000330"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:03.943772" level="INFO"> "u "i "t "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-08-23T01:46:03.943519" elapsed="0.000306"/>
</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-08-23T01:46:03.944146" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:03.943908" elapsed="0.000293"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:03.943889" elapsed="0.000337"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T01:46:03.944259" 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">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T01:46:03.945506" elapsed="0.000400"/>
</kw>
<kw name="Open 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-08-23T01:46:03.946065" elapsed="0.000155"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-08-23T01:46:03.946363" elapsed="0.000103"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T01:46:03.945039" elapsed="0.001480"/>
</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-08-23T01:46:03.944514" elapsed="0.002051"/>
</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-08-23T01:46:03.856715" elapsed="0.089947"/>
</kw>
<msg time="2026-08-23T01:46:03.946794" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T01:46:03.946856" level="INFO">${message} =  "u "i "t "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</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-08-23T01:46:03.856120" elapsed="0.090768"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T01:46:03.947074" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T01:46:03.946966" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:03.946948" elapsed="0.000210"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:03.947556" 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-08-23T01:46:03.947928" elapsed="0.000026"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T01:46:03.948002" 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-08-23T01:46:03.855382" elapsed="0.092728"/>
</kw>
<msg time="2026-08-23T01:46:03.948204" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T01:46:03.948248" level="INFO">${output} =  "u "i "t "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</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-08-23T01:46:03.850224" elapsed="0.098054"/>
</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-08-23T01:46:03.948598" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:03.948353" elapsed="0.000299"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:03.948335" elapsed="0.000341"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T01:46:03.850081" elapsed="0.098618"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T01:46:03.849895" elapsed="0.098836"/>
</for>
<arg>Starting Netconf readiness test suite</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-08-23T01:46:03.845877" elapsed="0.102908"/>
</kw>
<if>
<branch type="IF" condition="${DEBUG_LOGGING_FOR_EVERYTHING}">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<arg>log:set DEBUG</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:03.949264" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:03.948869" elapsed="0.000454"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:03.948850" elapsed="0.000497"/>
</if>
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:46:03.949744" level="INFO">Creating Session using : alias=ses, url=http://10.30.170.114:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x72b0ee3135d0&gt;, timeout=None, proxies=None, verify=False,                     debug=0 </msg>
<arg>ses</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-08-23T01:46:03.949486" elapsed="0.000459"/>
</kw>
<kw name="Setup_NetconfKeywords" owner="NetconfKeywords">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T01:46:03.950762" level="INFO">${tmp} = {}</msg>
<var>${tmp}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-23T01:46:03.950483" elapsed="0.000306"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T01:46:03.954974" level="INFO">${NetconfKeywords__mounted_device_types} = {}</msg>
<arg>${NetconfKeywords__mounted_device_types}</arg>
<arg>${tmp}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-23T01:46:03.950960" elapsed="0.004060"/>
</kw>
<if>
<branch type="IF" condition="${create_session_for_templated_requests}">
<kw name="Create_Default_Session" owner="TemplatedRequests">
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:46:03.959280" level="INFO">Creating Session using : alias=default, url=http://10.30.170.114:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x72b0ee32c250&gt;, timeout=2, proxies=None, verify=False,                     debug=0 </msg>
<arg>default</arg>
<arg>url=${url}</arg>
<arg>auth=${auth}</arg>
<arg>timeout=${timeout}</arg>
<arg>max_retries=${max_retries}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="PASS" start="2026-08-23T01:46:03.958905" elapsed="0.000487"/>
</kw>
<arg>timeout=2</arg>
<doc>Create "default" session to ${url} with authentication and connection parameters.
This Keyword is in this Resource only so that user do not need to call RequestsLibrary directly.</doc>
<status status="PASS" start="2026-08-23T01:46:03.958483" elapsed="0.000976"/>
</kw>
<status status="PASS" start="2026-08-23T01:46:03.955090" elapsed="0.004401"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:03.955072" elapsed="0.004445"/>
</if>
<kw name="Initialize_Artifact_Deployment_And_Usage" owner="NexusKeywords">
<kw name="Open_Connection_To_ODL_System" owner="SSHKeywords">
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-08-23T01:46:03.964671" level="INFO">${odl_connection} = 10</msg>
<var>${odl_connection}</var>
<arg>${ip_address}</arg>
<arg>prompt=${ODL_SYSTEM_PROMPT}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-08-23T01:46:03.964301" elapsed="0.000396"/>
</kw>
<kw name="Flexible_Controller_Login" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-08-23T01:46:03.966351" level="INFO">Length is 0.</msg>
<msg time="2026-08-23T01:46:03.966429" 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-08-23T01:46:03.966070" elapsed="0.000426"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T01:46:03.966657" elapsed="0.000505"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-08-23T01:46:03.968074" level="INFO">Logging into '10.30.170.114:22' as 'jenkins'.</msg>
<msg time="2026-08-23T01:46:04.556722" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-186-generic x86_64)

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

 System information as of Sun Aug 23 01:46:04 UTC 2026

  System load:  0.92               Processes:             128
  Usage of /:   13.8% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.114
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Sun Aug 23 01:46:02 2026 from 10.30.171.240
[?2004h[jenkins@releng-19126-54-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-08-23T01:46:03.967714" elapsed="0.589098"/>
</kw>
<msg time="2026-08-23T01:46:04.556894" 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-08-23T01:46:03.967332" elapsed="0.589624"/>
</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-08-23T01:46:03.965613" elapsed="0.591434"/>
</kw>
<msg time="2026-08-23T01:46:04.557098" 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-08-23T01:46:03.965229" elapsed="0.591915"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-08-23T01:46:03.964889" elapsed="0.592329"/>
</kw>
<return>
<value>${odl_connection}</value>
<status status="PASS" start="2026-08-23T01:46:04.557261" elapsed="0.000032"/>
</return>
<msg time="2026-08-23T01:46:04.557430" level="INFO">${odl} = 10</msg>
<var>${odl}</var>
<doc>Open a connection to the ODL system at ${ip_address} and return its identifier.</doc>
<status status="PASS" start="2026-08-23T01:46:03.964013" elapsed="0.593442"/>
</kw>
<kw name="Put File" owner="SSHLibrary">
<msg time="2026-08-23T01:46:04.566859" level="INFO">[chan 1] Opened sftp connection (server version 3)</msg>
<msg time="2026-08-23T01:46:04.577046" level="INFO">'/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../../tools/deployment/search.sh' -&gt; '/home/jenkins//search.sh'</msg>
<arg>/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../../tools/deployment/search.sh</arg>
<doc>Uploads file(s) from the local machine to the remote machine.</doc>
<status status="PASS" start="2026-08-23T01:46:04.557620" elapsed="0.019514"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-08-23T01:46:04.577357" elapsed="0.000355"/>
</kw>
<if>
<branch type="IF" condition="not (${tools_system_connect})">
<return>
<status status="NOT RUN" start="2026-08-23T01:46:04.578013" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-08-23T01:46:04.577814" elapsed="0.000258"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:04.577785" elapsed="0.000318"/>
</if>
<kw name="Open_Connection_To_Tools_System" owner="SSHKeywords">
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-08-23T01:46:04.584893" level="INFO">${tools_connection} = 11</msg>
<var>${tools_connection}</var>
<arg>${ip_address}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-08-23T01:46:04.584504" elapsed="0.000416"/>
</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-08-23T01:46:04.586593" level="INFO">Length is 0.</msg>
<msg time="2026-08-23T01:46:04.586673" 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-08-23T01:46:04.586316" elapsed="0.000381"/>
</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-08-23T01:46:04.586868" elapsed="0.000331"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-08-23T01:46:04.588077" level="INFO">Logging into '10.30.170.120:22' as 'jenkins'.</msg>
<msg time="2026-08-23T01:46:05.001609" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-186-generic x86_64)

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

 System information as of Sun Aug 23 01:45:15 UTC 2026

  System load:  0.29               Processes:             108
  Usage of /:   20.6% of 38.58GB   Users logged in:       0
  Memory usage: 4%                 IPv4 address for ens3: 10.30.170.120
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

14 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-19126-54-1-docker-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-08-23T01:46:04.587735" elapsed="0.413960"/>
</kw>
<msg time="2026-08-23T01:46:05.001758" 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-08-23T01:46:04.587364" elapsed="0.414457"/>
</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-08-23T01:46:04.585858" elapsed="0.416121"/>
</kw>
<msg time="2026-08-23T01:46:05.002032" 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-08-23T01:46:04.585441" elapsed="0.416640"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-08-23T01:46:04.585105" elapsed="0.417051"/>
</kw>
<return>
<value>${tools_connection}</value>
<status status="PASS" start="2026-08-23T01:46:05.002199" elapsed="0.000031"/>
</return>
<doc>Open a connection to the tools system at ${ip_address} and return its identifier.</doc>
<status status="PASS" start="2026-08-23T01:46:04.584091" elapsed="0.418245"/>
</kw>
<doc>Places search utility to ODL system, which will be needed for version detection.
By default also initialize a SSH connection to Tools system,
as following Keywords assume a working connection towards target system.</doc>
<status status="PASS" start="2026-08-23T01:46:03.959766" elapsed="1.042624"/>
</kw>
<doc>Setup the environment for the other keywords of this Resource to work properly.</doc>
<status status="PASS" start="2026-08-23T01:46:03.950231" elapsed="1.052211"/>
</kw>
<doc>Initialize SetupUtils. Setup requests library and log into karaf.log that the netconf readiness wait starts.</doc>
<status status="PASS" start="2026-08-23T01:46:02.185615" elapsed="2.816879"/>
</kw>
<test id="s1-s1-s1-t1" name="Check_Whether_Netconf_Topology_Is_Ready" line="84">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-08-23T01:46:05.005858" elapsed="0.000226"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T01:46:05.005581" elapsed="0.000558"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T01:46:05.007176" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T01:46:05.007053" elapsed="0.000170"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:05.007033" elapsed="0.000212"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T01:46:05.012202" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T01:46:05.012089" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:05.012071" elapsed="0.000198"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T01:46:05.013280" 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-08-23T01:46:05.012889" elapsed="0.000417"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T01:46:05.013755" 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-08-23T01:46:05.013463" elapsed="0.000318"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T01:46:05.013825" elapsed="0.000050"/>
</return>
<msg time="2026-08-23T01:46:05.014003" 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-08-23T01:46:05.012490" elapsed="0.001537"/>
</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-08-23T01:46:05.019682" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T01:46:05.019574" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:05.019554" 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-08-23T01:46:05.020981" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T01:46:05.020872" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:05.020852" elapsed="0.000198"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T01:46:05.021560" level="INFO">${karaf_connection_index} = 7</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-08-23T01:46:05.021196" elapsed="0.000390"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T01:46:05.022010" level="INFO">${current_connection_index} = 11</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-08-23T01:46:05.021744" elapsed="0.000292"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T01:46:05.071625" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T01:46:05.022576" elapsed="0.049538"/>
</kw>
<msg time="2026-08-23T01:46:05.072507" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T01:46:05.072613" 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 "n "e "t "c "o "n "f "...</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-08-23T01:46:05.022190" elapsed="0.050501"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T01:46:05.106782" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "R "e "a "d "y ". "N "e "t "c "o "n "f "r "e "a "d "y ". "C "h "e "c "k "_ "W "h "e "t "h "e "r "_ "N "e "t "c "o "n "f "_ "T "o "p "o "l "o "g "y "_ "I "s "_ "R "e "a "d "y "[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-08-23T01:46:05.074070" elapsed="0.032953"/>
</kw>
<msg time="2026-08-23T01:46:05.107195" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T01:46:05.107242" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "R "e "a "d "y ". "N "e "t "c "o "n "f "r "e "a "d "y ". "C "h "e "c "k "_ "W "h "e "t ...</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-08-23T01:46:05.073110" elapsed="0.034167"/>
</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-08-23T01:46:05.107583" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:05.107354" elapsed="0.000306"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:05.107334" elapsed="0.000352"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:05.108222" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "R "e "a "d "y ". "N "e "t "c "o "n "f "r "e "a "d "y ". "C "h "e "c "k "_ "W "h "e "t "h "e "r "_ "N "e "t "c "o "n "f "_ "T "o "p "o "l "o "g "y "_ "I "s "_ "R "e "a "d "y "[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-08-23T01:46:05.107827" elapsed="0.000467"/>
</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-08-23T01:46:05.108573" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:05.108360" elapsed="0.000286"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:05.108342" elapsed="0.000330"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T01:46:05.108705" 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-08-23T01:46:05.111825" elapsed="0.000190"/>
</kw>
<msg time="2026-08-23T01:46:05.112088" 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-08-23T01:46:05.111124" elapsed="0.001064"/>
</kw>
<kw name="Open 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-08-23T01:46:05.113226" elapsed="0.000040"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:05.114390" elapsed="0.000040"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T01:46:05.109580" elapsed="0.004931"/>
</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-08-23T01:46:05.109002" elapsed="0.005625"/>
</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-08-23T01:46:05.020551" elapsed="0.094174"/>
</kw>
<msg time="2026-08-23T01:46:05.114819" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T01:46:05.114885" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "R "e "a "d "y ". "N "e "t "c "o "n "f "r "e "a "d "y ". "C "h "e "c "k "_ "W "h "e "t ...</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-08-23T01:46:05.019913" elapsed="0.095010"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T01:46:05.115122" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T01:46:05.115001" elapsed="0.000180"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:05.114982" elapsed="0.000223"/>
</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-08-23T01:46:05.115597" 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-08-23T01:46:05.115972" elapsed="0.000026"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T01:46:05.116045" 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-08-23T01:46:05.019234" elapsed="0.096918"/>
</kw>
<msg time="2026-08-23T01:46:05.116244" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T01:46:05.116287" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "R "e "a "d "y ". "N "e "t "c "o "n "f "r "e "a "d "y ". "C "h "e "c "k "_ "W "h "e "t ...</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-08-23T01:46:05.014413" elapsed="0.101915"/>
</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-08-23T01:46:05.116647" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:05.116402" elapsed="0.000299"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:05.116385" elapsed="0.000339"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T01:46:05.014271" elapsed="0.102476"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T01:46:05.014087" elapsed="0.102693"/>
</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-08-23T01:46:05.011719" elapsed="0.105155"/>
</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-08-23T01:46:05.006712" elapsed="0.110261"/>
</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-08-23T01:46:05.006286" elapsed="0.110732"/>
</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-08-23T01:46:05.003278" elapsed="0.113792"/>
</kw>
<kw name="Pass Execution If" owner="BuiltIn">
<arg>${USE_NETCONF_CONNECTOR}==${True}</arg>
<arg>Netconf connector is used. Next testcases do their job in this case.</arg>
<doc>Conditionally skips rest of the current test, setup, or teardown with PASS status.</doc>
<status status="PASS" start="2026-08-23T01:46:05.117233" elapsed="0.000354"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Netconf_Topology_Ready">
<for flavor="IN">
<iter>
<kw name="Verify_Netconf_Topology_Ready_For_Node">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T01:46:05.119980" 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-08-23T01:46:05.119665" elapsed="0.000343"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-08-23T01:46:05.120054" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T01:46:05.120203" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${node_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-08-23T01:46:05.119323" elapsed="0.000904"/>
</kw>
<kw name="Configure_Netconf_Device">
<kw name="Configure_Device_In_Netconf" owner="NetconfKeywords">
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T01:46:05.141820" elapsed="0.000877"/>
</kw>
<msg time="2026-08-23T01:46:05.142847" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T01:46:05.141402" elapsed="0.001502"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return scandium if vanadium is at least ${lower_bound},
return calcium otherwise.</doc>
<status status="PASS" start="2026-08-23T01:46:05.140992" elapsed="0.001988"/>
</kw>
<msg time="2026-08-23T01:46:05.143023" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T01:46:05.132345" elapsed="0.010723"/>
</kw>
<msg time="2026-08-23T01:46:05.143169" level="INFO">${version} = scandium</msg>
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-08-23T01:46:05.132019" elapsed="0.011174"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T01:46:05.144107" level="INFO">${mapping} = {'DEVICE_IP': '10.30.170.114', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', '...</msg>
<var>${mapping}</var>
<arg>DEVICE_IP=${device_address}</arg>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>DEVICE_PORT=${device_port}</arg>
<arg>DEVICE_USER=${device_user}</arg>
<arg>DEVICE_PASSWORD=${device_password}</arg>
<arg>DEVICE_KEY=${device_key}</arg>
<arg>SCHEMA_DIRECTORY=${schema_directory}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-23T01:46:05.143354" elapsed="0.000781"/>
</kw>
<if>
<branch type="IF" condition="'${http_method}'=='post'">
<kw name="Post_As_Xml_Templated" owner="TemplatedRequests">
<arg>folder=${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</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="NOT RUN" start="2026-08-23T01:46:05.144537" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:05.144224" elapsed="0.000381"/>
</branch>
<branch type="ELSE">
<kw name="Put_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Put_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-08-23T01:46:05.177903" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T01:46:05.177506" elapsed="0.000426"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T01:46:05.178785" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-23T01:46:05.178482" elapsed="0.000432">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-23T01:46:05.179012" 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-08-23T01:46:05.178145" elapsed="0.000892"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T01:46:05.179657" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/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-08-23T01:46:05.179260" elapsed="0.000424"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T01:46:05.180104" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/location.uri"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-23T01:46:05.180261" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T01:46:05.179960" elapsed="0.000327"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:05.180741" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:05.180493" 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-08-23T01:46:05.181883" level="INFO">mapping: {'DEVICE_IP': '10.30.170.114', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:05.181578" elapsed="0.000353"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T01:46:05.182354" 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-08-23T01:46:05.182087" elapsed="0.000294"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:05.183093" level="INFO">${value} = 10.30.170.114</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:05.182757" elapsed="0.000362"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:05.183953" level="INFO">${encoded} = 10.30.170.114</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-08-23T01:46:05.183632" elapsed="0.000347"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:05.184032" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T01:46:05.184187" level="INFO">${encoded_value} = 10.30.170.114</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-08-23T01:46:05.183307" elapsed="0.000904"/>
</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-08-23T01:46:05.184363" elapsed="0.000251"/>
</kw>
<var name="${key}">DEVICE_IP</var>
<var name="${value}">10.30.170.114</var>
<status status="PASS" start="2026-08-23T01:46:05.182623" elapsed="0.002032"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:05.185388" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:05.184942" elapsed="0.000473"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:05.186142" level="INFO">${encoded} = test-device</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-08-23T01:46:05.185928" elapsed="0.000239"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:05.186217" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T01:46:05.186367" level="INFO">${encoded_value} = test-device</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-08-23T01:46:05.185596" elapsed="0.000795"/>
</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-08-23T01:46:05.186538" elapsed="0.000222"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-23T01:46:05.184781" elapsed="0.002019"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:05.187358" level="INFO">${value} = 2830</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:05.187061" elapsed="0.000322"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:05.188111" level="INFO">${encoded} = 2830</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-08-23T01:46:05.187899" elapsed="0.000238"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:05.188186" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T01:46:05.188334" level="INFO">${encoded_value} = 2830</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-08-23T01:46:05.187562" elapsed="0.000797"/>
</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-08-23T01:46:05.188505" elapsed="0.000242"/>
</kw>
<var name="${key}">DEVICE_PORT</var>
<var name="${value}">2830</var>
<status status="PASS" start="2026-08-23T01:46:05.186931" elapsed="0.001857"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:05.189358" level="INFO">${value} = admin</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:05.189061" elapsed="0.000323"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:05.190123" level="INFO">${encoded} = admin</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-08-23T01:46:05.189901" elapsed="0.000248"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:05.190198" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T01:46:05.190346" level="INFO">${encoded_value} = admin</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-08-23T01:46:05.189562" elapsed="0.000808"/>
</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-08-23T01:46:05.190558" elapsed="0.000224"/>
</kw>
<var name="${key}">DEVICE_USER</var>
<var name="${value}">admin</var>
<status status="PASS" start="2026-08-23T01:46:05.188923" elapsed="0.001900"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:05.191380" level="INFO">${value} = admin</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:05.191083" elapsed="0.000322"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:05.192190" level="INFO">${encoded} = admin</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-08-23T01:46:05.191923" elapsed="0.000297"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:05.192271" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T01:46:05.192423" level="INFO">${encoded_value} = admin</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-08-23T01:46:05.191584" elapsed="0.000863"/>
</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-08-23T01:46:05.192592" elapsed="0.000272"/>
</kw>
<var name="${key}">DEVICE_PASSWORD</var>
<var name="${value}">admin</var>
<status status="PASS" start="2026-08-23T01:46:05.190953" elapsed="0.001953"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:05.193444" level="INFO">${value} = device-key</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:05.193147" elapsed="0.000322"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:05.194210" level="INFO">${encoded} = device-key</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-08-23T01:46:05.193992" elapsed="0.000244"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:05.194286" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T01:46:05.194434" level="INFO">${encoded_value} = device-key</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-08-23T01:46:05.193647" 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-08-23T01:46:05.194603" elapsed="0.000220"/>
</kw>
<var name="${key}">DEVICE_KEY</var>
<var name="${value}">device-key</var>
<status status="PASS" start="2026-08-23T01:46:05.193018" elapsed="0.001861"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:05.195425" level="INFO">${value} = /tmp/schema</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:05.195121" elapsed="0.000330"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:05.197911" level="INFO">${encoded} = /tmp/schema</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-08-23T01:46:05.197670" elapsed="0.000268"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:05.197987" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T01:46:05.198139" level="INFO">${encoded_value} = /tmp/schema</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-08-23T01:46:05.195628" elapsed="0.002536"/>
</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-08-23T01:46:05.198312" elapsed="0.000223"/>
</kw>
<var name="${key}">SCHEMA_DIRECTORY</var>
<var name="${value}">/tmp/schema</var>
<status status="PASS" start="2026-08-23T01:46:05.194991" elapsed="0.003583"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:05.199135" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:05.198815" elapsed="0.000346"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:05.199885" level="INFO">${encoded} = /rests</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-08-23T01:46:05.199656" elapsed="0.000255"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:05.199960" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T01:46:05.200110" level="INFO">${encoded_value} = /rests</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-08-23T01:46:05.199343" 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-08-23T01:46:05.200282" elapsed="0.000221"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-23T01:46:05.198685" elapsed="0.001857"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-23T01:46:05.182435" elapsed="0.018166"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-23T01:46:05.200648" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T01:46:05.200809" level="INFO">${mapping_to_use} = {'DEVICE_IP': '10.30.170.114', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', '...</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-23T01:46:05.181251" elapsed="0.019613"/>
</kw>
<status status="PASS" start="2026-08-23T01:46:05.180945" elapsed="0.019952"/>
</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-08-23T01:46:05.201068" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:05.200923" elapsed="0.000200"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:05.180924" elapsed="0.020219"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T01:46:05.205251" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</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-08-23T01:46:05.201376" elapsed="0.003905"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T01:46:05.205389" elapsed="0.000055"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="PASS" start="2026-08-23T01:46:05.176480" elapsed="0.029198"/>
</kw>
<msg time="2026-08-23T01:46:05.205769" 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-08-23T01:46:05.163060" elapsed="0.042832"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:05.229442" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:05.251576" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:05.273570" 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-08-23T01:46:05.273824" elapsed="0.000039"/>
</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-08-23T01:46:05.274045" 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-08-23T01:46:05.274641" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:05.274375" elapsed="0.000351"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:05.274359" elapsed="0.000453"/>
</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-08-23T01:46:05.275041" elapsed="0.000047"/>
</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-08-23T01:46:05.275371" elapsed="0.000044"/>
</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-08-23T01:46:05.275695" elapsed="0.000054"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T01:46:05.274320" elapsed="0.001581"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T01:46:05.274178" elapsed="0.001784"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:05.276114" elapsed="0.000026"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T01:46:05.276273" elapsed="0.000018"/>
</return>
<msg time="2026-08-23T01:46:05.276405" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</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-08-23T01:46:05.158586" elapsed="0.117846"/>
</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-08-23T01:46:05.304400" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/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-08-23T01:46:05.304016" elapsed="0.000413"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T01:46:05.305253" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/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-08-23T01:46:05.304993" elapsed="0.000346">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/data.xml' does not exist.</status>
</kw>
<msg time="2026-08-23T01:46:05.305433" 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-08-23T01:46:05.304639" elapsed="0.000819"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T01:46:05.306089" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/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-08-23T01:46:05.305673" elapsed="0.000443"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T01:46:05.306469" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/data.xml"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/data.xml&lt;/a&gt;'.</msg>
<msg time="2026-08-23T01:46:05.306623" level="INFO">${template} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;$DEVICE_NAME&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;$DEVICE_IP&lt;/host&gt;
    &lt;port&gt;$DEVI...</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T01:46:05.306325" elapsed="0.000327"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:05.307149" level="INFO">&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;$DEVICE_NAME&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;$DEVICE_IP&lt;/host&gt;
    &lt;port&gt;$DEVICE_PORT&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;$DEVICE_USER&lt;/username&gt;
      &lt;password&gt;$DEVICE_PASSWORD&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt;
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:05.306895" 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-08-23T01:46:05.307648" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:05.307323" elapsed="0.000385"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T01:46:05.308212" level="INFO">${mapping_to_use} = {'DEVICE_IP': '10.30.170.114', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', '...</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-08-23T01:46:05.307906" elapsed="0.000334"/>
</kw>
<status status="PASS" start="2026-08-23T01:46:05.307734" elapsed="0.000541"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:05.307301" elapsed="0.000996"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T01:46:05.309231" level="INFO">${final_text} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.114&lt;/host&gt;
    &lt;port&gt;283...</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-08-23T01:46:05.308496" elapsed="0.000766"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T01:46:05.309363" elapsed="0.000055"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="PASS" start="2026-08-23T01:46:05.302984" elapsed="0.006660"/>
</kw>
<msg time="2026-08-23T01:46:05.309735" 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-08-23T01:46:05.289527" elapsed="0.020327"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:05.332262" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:05.354365" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:05.376423" 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-08-23T01:46:05.376662" 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-08-23T01:46:05.376870" elapsed="0.000024"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:05.377438" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:05.377174" elapsed="0.000347"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:05.377158" elapsed="0.000450"/>
</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-08-23T01:46:05.377808" elapsed="0.000068"/>
</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-08-23T01:46:05.378161" elapsed="0.000044"/>
</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-08-23T01:46:05.378485" elapsed="0.000044"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T01:46:05.377128" elapsed="0.001547"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T01:46:05.376997" elapsed="0.001739"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:05.378919" elapsed="0.000023"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T01:46:05.379073" elapsed="0.000018"/>
</return>
<msg time="2026-08-23T01:46:05.379201" level="INFO">${data} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.114&lt;/host&gt;
    &lt;port&gt;283...</msg>
<var>${data}</var>
<arg>folder=${folder}</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-08-23T01:46:05.286620" elapsed="0.092610"/>
</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-08-23T01:46:05.381911" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/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-08-23T01:46:05.381283" elapsed="0.000758">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-23T01:46:05.382172" 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-08-23T01:46:05.379982" elapsed="0.002215"/>
</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-08-23T01:46:05.382658" elapsed="0.000081"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:05.382305" elapsed="0.000515"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T01:46:05.384112" 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-08-23T01:46:05.383400" elapsed="0.000752"/>
</kw>
<status status="PASS" start="2026-08-23T01:46:05.382931" elapsed="0.001301"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:05.382285" elapsed="0.001971"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T01:46:05.387124" 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-08-23T01:46:05.384411" elapsed="0.002745"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-23T01:46:05.387286" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T01:46:05.387444" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-23T01:46:05.379613" elapsed="0.007856"/>
</kw>
<kw name="Put_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:05.389335" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:05.388856" elapsed="0.000542"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:05.390060" level="INFO">&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.114&lt;/host&gt;
    &lt;port&gt;2830&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;admin&lt;/username&gt;
      &lt;password&gt;admin&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt;</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:05.389563" elapsed="0.000569"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:05.390814" 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-08-23T01:46:05.390306" elapsed="0.000599"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:05.391538" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:05.391069" elapsed="0.000528"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-08-23T01:46:05.393184" 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-08-23T01:46:05.392547" elapsed="0.000736"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-08-23T01:46:05.394102" 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-08-23T01:46:05.393546" elapsed="0.000655"/>
</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-08-23T01:46:05.394472" elapsed="0.000519"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:05.395965" 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-08-23T01:46:05.395262" elapsed="0.000898"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-08-23T01:46:05.396248" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T01:46:05.396518" 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-08-23T01:46:05.391812" elapsed="0.004732"/>
</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-08-23T01:46:05.720273" level="INFO">PUT Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Content-Length': '439', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.114&lt;/host&gt;
    &lt;port&gt;2830&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;admin&lt;/username&gt;
      &lt;password&gt;admin&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt; 
 </msg>
<msg time="2026-08-23T01:46:05.720471" level="INFO">PUT Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 status=404, reason=Not Found 
 headers={'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:05.720736" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</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-08-23T01:46:05.405000" elapsed="0.318786">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</kw>
<status status="FAIL" start="2026-08-23T01:46:05.396652" elapsed="0.327597">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</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-08-23T01:46:05.724764" elapsed="0.000216"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:05.724343" elapsed="0.000967"/>
</branch>
<status status="FAIL" start="2026-08-23T01:46:05.396632" elapsed="0.328742">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</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-08-23T01:46:05.726513" elapsed="0.000062"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T01:46:05.726953" elapsed="0.000032"/>
</return>
<status status="NOT RUN" start="2026-08-23T01:46:05.726816" elapsed="0.000343"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:05.726772" elapsed="0.000511"/>
</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-08-23T01:46:05.727615" elapsed="0.000050"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T01:46:05.727974" elapsed="0.000043"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>content_type=${content_type}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</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-08-23T01:46:05.387941" elapsed="0.340337">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T01:46:05.728456" elapsed="0.000037"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>extension=xml</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>content_type=${HEADERS_XML}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>endline=${\n}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve URI and data from folder, call Put_To_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-23T01:46:05.147720" elapsed="0.580967">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=response</arg>
<arg>mapping=${mapping}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:05.729430" elapsed="0.000055"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:05.729003" elapsed="0.000580"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:05.728963" elapsed="0.000674"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T01:46:05.729725" elapsed="0.000035"/>
</return>
<arg>folder=${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Add arguments sensible for XML data, return Put_Templated response text.
Optionally, verification against response.xml (no iteration) is called.</doc>
<status status="FAIL" start="2026-08-23T01:46:05.144884" elapsed="0.585118">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</kw>
<status status="FAIL" start="2026-08-23T01:46:05.144629" elapsed="0.585546">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</branch>
<status status="FAIL" start="2026-08-23T01:46:05.144204" elapsed="0.586039">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</if>
<kw name="Set To Dictionary" owner="Collections">
<arg>${NetconfKeywords__mounted_device_types}</arg>
<arg>${device_name}</arg>
<arg>${device_type}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:05.730592" elapsed="0.000048"/>
</kw>
<arg>${device_name}</arg>
<arg>device_type=full-uri-device</arg>
<arg>device_port=${DEVICE_PORT}</arg>
<arg>device_address=${device_ip}</arg>
<arg>device_user=admin</arg>
<arg>device_password=admin</arg>
<arg>session=${session}</arg>
<doc>Tell Netconf about the specified device so it can add it into its configuration.</doc>
<status status="FAIL" start="2026-08-23T01:46:05.120905" elapsed="0.610082">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</kw>
<arg>${DEVICE_NAME}</arg>
<arg>${session}</arg>
<arg>${ODL_SYSTEM_${node_index}_IP}</arg>
<doc>Configures the device via REST api.</doc>
<status status="FAIL" start="2026-08-23T01:46:05.120350" elapsed="0.610916">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<var>&amp;{mapping}</var>
<arg>DEVICE_NAME=${DEVICE_NAME}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:05.731455" elapsed="0.000022"/>
</kw>
<kw name="Wait_Netconf_Device_Mounted">
<arg>${DEVICE_NAME}</arg>
<arg>${session}</arg>
<arg>${mapping}</arg>
<doc>Checks weather the device was mounted.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:05.731615" elapsed="0.000022"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:05.740071" elapsed="0.000028"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<var>${mod_session}</var>
<arg>member_index=${idx}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:05.740418" elapsed="0.000024"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5x</arg>
<arg>3s</arg>
<arg>TemplatedRequests.Get_As_Xml_Templated</arg>
<arg>${NETCONF_FOLDER}${/}${version}${/}netconf-state</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${mod_session}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:05.740605" elapsed="0.000021"/>
</kw>
<var name="${idx}"/>
<status status="NOT RUN" start="2026-08-23T01:46:05.740225" elapsed="0.000445"/>
</iter>
<var>${idx}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="NOT RUN" start="2026-08-23T01:46:05.740162" elapsed="0.000535"/>
</for>
<kw name="Remove_Netconf_Device" type="TEARDOWN">
<kw name="Remove_Device_From_Netconf" owner="NetconfKeywords">
<kw name="Pop From Dictionary" owner="Collections">
<msg time="2026-08-23T01:46:05.742130" level="INFO">${device_type} = None</msg>
<msg time="2026-08-23T01:46:05.742174" level="FAIL">Dictionary does not contain key 'test-device'.</msg>
<var>${device_type}</var>
<arg>${NetconfKeywords__mounted_device_types}</arg>
<arg>${device_name}</arg>
<doc>Pops the given ``key`` from the ``dictionary`` and returns its value.</doc>
<status status="FAIL" start="2026-08-23T01:46:05.741829" elapsed="0.000407">Dictionary does not contain key 'test-device'.</status>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T01:46:05.742898" level="INFO">${mapping} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping}</var>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-23T01:46:05.742411" elapsed="0.000551"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T01:46:05.761605" elapsed="0.000884"/>
</kw>
<msg time="2026-08-23T01:46:05.762724" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T01:46:05.761243" elapsed="0.001549"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return scandium if vanadium is at least ${lower_bound},
return calcium otherwise.</doc>
<status status="PASS" start="2026-08-23T01:46:05.760809" elapsed="0.002083"/>
</kw>
<msg time="2026-08-23T01:46:05.762937" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T01:46:05.752042" elapsed="0.010952"/>
</kw>
<msg time="2026-08-23T01:46:05.763098" level="INFO">${version} = scandium</msg>
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-08-23T01:46:05.751670" elapsed="0.011454"/>
</kw>
<kw name="Delete_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-08-23T01:46:05.806480" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T01:46:05.805790" elapsed="0.000801"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T01:46:05.808197" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-23T01:46:05.807671" elapsed="0.000644">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-23T01:46:05.808444" 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-08-23T01:46:05.806914" elapsed="0.001636"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T01:46:05.810002" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None/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-08-23T01:46:05.808936" elapsed="0.001189"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T01:46:05.810719" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-23T01:46:05.811112" level="INFO">${template} = None</msg>
<msg time="2026-08-23T01:46:05.811203" level="FAIL">FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="FAIL" start="2026-08-23T01:46:05.810504" elapsed="0.000812">FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'</status>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:05.812156" level="INFO">None</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:05.811645" elapsed="0.000573"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:05.814227" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:05.813958" elapsed="0.000314"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T01:46:05.814933" 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-08-23T01:46:05.814473" elapsed="0.000487"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:05.815718" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:05.815410" elapsed="0.000334"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:05.818224" level="INFO">${encoded} = test-device</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-08-23T01:46:05.817543" elapsed="0.000753"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:05.818439" elapsed="0.000093"/>
</return>
<msg time="2026-08-23T01:46:05.818821" level="INFO">${encoded_value} = test-device</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-08-23T01:46:05.816439" elapsed="0.002468"/>
</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-08-23T01:46:05.819256" elapsed="0.000534"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-23T01:46:05.815275" elapsed="0.004903"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:05.821554" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:05.820775" elapsed="0.000839"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:05.822941" level="INFO">${encoded} = /rests</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-08-23T01:46:05.822620" elapsed="0.000366"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:05.823077" elapsed="0.000059"/>
</return>
<msg time="2026-08-23T01:46:05.823332" level="INFO">${encoded_value} = /rests</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-08-23T01:46:05.822122" elapsed="0.001246"/>
</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-08-23T01:46:05.823580" elapsed="0.000337"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-23T01:46:05.820469" elapsed="0.003506"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-23T01:46:05.815060" elapsed="0.009022"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-23T01:46:05.824184" elapsed="0.000102"/>
</return>
<msg time="2026-08-23T01:46:05.824722" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-23T01:46:05.813130" elapsed="0.011759"/>
</kw>
<status status="PASS" start="2026-08-23T01:46:05.812392" elapsed="0.012616"/>
</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-08-23T01:46:05.825443" elapsed="0.000122"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:05.825128" elapsed="0.000551"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:05.812370" elapsed="0.013703"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T01:46:05.827562" level="INFO">${final_text} = None</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-08-23T01:46:05.826304" elapsed="0.001417"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T01:46:05.828073" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None/${file_name}.</doc>
<status status="FAIL" start="2026-08-23T01:46:05.804797" elapsed="0.023596">FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'</status>
</kw>
<msg time="2026-08-23T01:46:05.828477" 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="FAIL" start="2026-08-23T01:46:05.792016" elapsed="0.036549"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:05.843065" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:05.855492" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:05.867919" 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-08-23T01:46:05.868121" 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-08-23T01:46:05.868305" 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-08-23T01:46:05.868820" elapsed="0.000046"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:05.868668" elapsed="0.000236"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:05.868649" elapsed="0.000280"/>
</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-08-23T01:46:05.869070" 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-08-23T01:46:05.869235" 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-08-23T01:46:05.869422" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T01:46:05.868612" elapsed="0.000864"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T01:46:05.868451" elapsed="0.001053"/>
</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-08-23T01:46:05.869649" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T01:46:05.869731" elapsed="0.000017"/>
</return>
<msg time="2026-08-23T01:46:05.869930" level="INFO">${uri} = None</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=${location}</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="FAIL" start="2026-08-23T01:46:05.787682" elapsed="0.082276">FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'</status>
</kw>
<kw name="Delete_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:05.871186" level="INFO">None</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:05.870905" elapsed="0.000327"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:46:05.879126" level="INFO">DELETE Request : url=http://10.30.170.114:8181/ 
 path_url=/ 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Length': '0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:05.879214" level="INFO">DELETE Response : url=http://10.30.170.114:8181/ 
 status=404, reason=Not Found 
 headers={'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:05.879433" level="INFO">${response} = None</msg>
<msg time="2026-08-23T01:46:05.879496" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:46:05.873607" elapsed="0.006634">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/</status>
</kw>
<status status="FAIL" start="2026-08-23T01:46:05.871298" elapsed="0.009070">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/</status>
</branch>
<branch type="ELSE">
<kw name="DELETE On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:05.880630" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:05.880416" elapsed="0.000301"/>
</branch>
<status status="FAIL" start="2026-08-23T01:46:05.871280" elapsed="0.009470">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/</status>
</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-08-23T01:46:05.886144" level="FAIL">Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="FAIL" start="2026-08-23T01:46:05.882480" elapsed="0.003717">Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<status status="FAIL" start="2026-08-23T01:46:05.882176" elapsed="0.004111">Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</branch>
<status status="FAIL" start="2026-08-23T01:46:05.882149" elapsed="0.004182">Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:05.890315" level="FAIL">Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="FAIL" start="2026-08-23T01:46:05.886749" elapsed="0.003600">Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</status>
</kw>
<status status="FAIL" start="2026-08-23T01:46:05.886428" elapsed="0.003985">Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</status>
</branch>
<status status="FAIL" start="2026-08-23T01:46:05.886405" elapsed="0.004040">Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</status>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T01:46:05.891150" 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-08-23T01:46:05.890644" elapsed="0.000539"/>
</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-08-23T01:46:05.891502" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:05.891261" elapsed="0.000333"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T01:46:05.892230" 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-08-23T01:46:05.891778" elapsed="0.000484"/>
</kw>
<status status="PASS" start="2026-08-23T01:46:05.891619" elapsed="0.000680"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:05.891242" elapsed="0.001079"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T01:46:05.892869" 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-08-23T01:46:05.892479" 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-08-23T01:46:05.893219" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:05.892968" elapsed="0.000309"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T01:46:05.893885" 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-08-23T01:46:05.893456" elapsed="0.000456"/>
</kw>
<status status="PASS" start="2026-08-23T01:46:05.893301" elapsed="0.000648"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:05.892950" elapsed="0.001020"/>
</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-08-23T01:46:05.894120" elapsed="0.000475"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-08-23T01:46:05.895530" 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-08-23T01:46:05.894761" elapsed="0.000797"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<msg time="2026-08-23T01:46:05.901403" level="FAIL">Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</msg>
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="FAIL" start="2026-08-23T01:46:05.895716" elapsed="0.005721">Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</status>
</kw>
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_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="FAIL" start="2026-08-23T01:46:05.881522" elapsed="0.020063">Several failures occurred:

1) Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'

2) Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'

3) Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</status>
</kw>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-08-23T01:46:05.901648" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T01:46:05.904087" level="INFO">${response_text} = None</msg>
<msg time="2026-08-23T01:46:05.904118" level="FAIL">Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>session=${session}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>DELETE resource at URI, check status_code and return response text..</doc>
<status status="FAIL" start="2026-08-23T01:46:05.870245" elapsed="0.033902">Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-08-23T01:46:05.904216" elapsed="0.000026"/>
</return>
<arg>${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>${mapping}</arg>
<arg>session=${session}</arg>
<arg>location=${location}</arg>
<doc>Resolve URI from folder, issue DELETE request.</doc>
<status status="FAIL" start="2026-08-23T01:46:05.763345" elapsed="0.141054">Several failures occurred:

1) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

2) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Tell Netconf to deconfigure the specified device</doc>
<status status="FAIL" start="2026-08-23T01:46:05.741373" elapsed="0.163167">Several failures occurred:

1) Dictionary does not contain key 'test-device'.

2) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

3) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<arg>${DEVICE_NAME}</arg>
<arg>${session}</arg>
<doc>Removes configured device</doc>
<status status="FAIL" start="2026-08-23T01:46:05.740908" elapsed="0.163758">Several failures occurred:

1) Dictionary does not contain key 'test-device'.

2) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

3) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<arg>${idx}</arg>
<doc>Netconf readines for a node is done by creating a netconf device connected to that node
and performing GET operation got from the device's mount point.</doc>
<status status="FAIL" start="2026-08-23T01:46:05.118952" elapsed="0.785805">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device

Also keyword teardown failed:
Several failures occurred:

1) Dictionary does not contain key 'test-device'.

2) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

3) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<var name="${idx}">1</var>
<status status="FAIL" start="2026-08-23T01:46:05.118532" elapsed="0.786340">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device

Also keyword teardown failed:
Several failures occurred:

1) Dictionary does not contain key 'test-device'.

2) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

3) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</iter>
<var>${idx}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="FAIL" start="2026-08-23T01:46:05.118395" elapsed="0.786563">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device

Also keyword teardown failed:
Several failures occurred:

1) Dictionary does not contain key 'test-device'.

2) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

3) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</for>
<doc>Verifies the netconf readiness for every odl node.</doc>
<status status="FAIL" start="2026-08-23T01:46:05.118223" elapsed="0.786851">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device

Also keyword teardown failed:
Several failures occurred:

1) Dictionary does not contain key 'test-device'.

2) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

3) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<kw name="Check_Netconf_Topology_Ready">
<for flavor="IN">
<iter>
<kw name="Verify_Netconf_Topology_Ready_For_Node">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T01:46:06.909689" 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-08-23T01:46:06.908925" elapsed="0.000833"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-08-23T01:46:06.909911" elapsed="0.000080"/>
</return>
<msg time="2026-08-23T01:46:06.910269" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${node_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-08-23T01:46:06.908107" elapsed="0.002219"/>
</kw>
<kw name="Configure_Netconf_Device">
<kw name="Configure_Device_In_Netconf" owner="NetconfKeywords">
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T01:46:06.937991" elapsed="0.000902"/>
</kw>
<msg time="2026-08-23T01:46:06.939063" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T01:46:06.937532" elapsed="0.001595"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return scandium if vanadium is at least ${lower_bound},
return calcium otherwise.</doc>
<status status="PASS" start="2026-08-23T01:46:06.937148" elapsed="0.002057"/>
</kw>
<msg time="2026-08-23T01:46:06.939248" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T01:46:06.928489" elapsed="0.010803"/>
</kw>
<msg time="2026-08-23T01:46:06.939394" level="INFO">${version} = scandium</msg>
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-08-23T01:46:06.928156" elapsed="0.011262"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T01:46:06.940329" level="INFO">${mapping} = {'DEVICE_IP': '10.30.170.114', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', '...</msg>
<var>${mapping}</var>
<arg>DEVICE_IP=${device_address}</arg>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>DEVICE_PORT=${device_port}</arg>
<arg>DEVICE_USER=${device_user}</arg>
<arg>DEVICE_PASSWORD=${device_password}</arg>
<arg>DEVICE_KEY=${device_key}</arg>
<arg>SCHEMA_DIRECTORY=${schema_directory}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-23T01:46:06.939579" elapsed="0.000778"/>
</kw>
<if>
<branch type="IF" condition="'${http_method}'=='post'">
<kw name="Post_As_Xml_Templated" owner="TemplatedRequests">
<arg>folder=${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</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="NOT RUN" start="2026-08-23T01:46:06.940788" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:06.940458" elapsed="0.000413"/>
</branch>
<branch type="ELSE">
<kw name="Put_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Put_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-08-23T01:46:06.974251" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T01:46:06.973873" elapsed="0.000406"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T01:46:06.975190" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-23T01:46:06.974905" elapsed="0.000372">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-23T01:46:06.975431" 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-08-23T01:46:06.974494" elapsed="0.000963"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T01:46:06.976081" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/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-08-23T01:46:06.975673" elapsed="0.000436"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T01:46:06.976465" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/location.uri"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-23T01:46:06.976622" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T01:46:06.976322" elapsed="0.000326"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:06.977134" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:06.976883" elapsed="0.000296"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:06.978201" level="INFO">mapping: {'DEVICE_IP': '10.30.170.114', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:06.977935" elapsed="0.000312"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T01:46:06.978681" 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-08-23T01:46:06.978403" elapsed="0.000303"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:06.979391" level="INFO">${value} = 10.30.170.114</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:06.979092" elapsed="0.000325"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:06.980158" level="INFO">${encoded} = 10.30.170.114</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-08-23T01:46:06.979933" elapsed="0.000252"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:06.980236" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T01:46:06.980391" level="INFO">${encoded_value} = 10.30.170.114</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-08-23T01:46:06.979602" 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-08-23T01:46:06.980567" elapsed="0.000244"/>
</kw>
<var name="${key}">DEVICE_IP</var>
<var name="${value}">10.30.170.114</var>
<status status="PASS" start="2026-08-23T01:46:06.978957" elapsed="0.001921"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:06.981436" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:06.981132" elapsed="0.000330"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:06.982235" level="INFO">${encoded} = test-device</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-08-23T01:46:06.982016" elapsed="0.000244"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:06.982311" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T01:46:06.982461" level="INFO">${encoded_value} = test-device</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-08-23T01:46:06.981642" 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-08-23T01:46:06.982644" elapsed="0.000244"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-23T01:46:06.980994" elapsed="0.001934"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:06.983471" level="INFO">${value} = 2830</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:06.983176" elapsed="0.000321"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:06.984220" level="INFO">${encoded} = 2830</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-08-23T01:46:06.984011" elapsed="0.000235"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:06.984294" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T01:46:06.984443" level="INFO">${encoded_value} = 2830</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-08-23T01:46:06.983675" elapsed="0.000800"/>
</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-08-23T01:46:06.984623" elapsed="0.000405"/>
</kw>
<var name="${key}">DEVICE_PORT</var>
<var name="${value}">2830</var>
<status status="PASS" start="2026-08-23T01:46:06.983047" elapsed="0.002022"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:06.985643" level="INFO">${value} = admin</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:06.985310" elapsed="0.000360"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:06.986393" level="INFO">${encoded} = admin</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-08-23T01:46:06.986185" elapsed="0.000233"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:06.986467" elapsed="0.000049"/>
</return>
<msg time="2026-08-23T01:46:06.986645" level="INFO">${encoded_value} = admin</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-08-23T01:46:06.985869" elapsed="0.000804"/>
</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-08-23T01:46:06.986822" elapsed="0.000243"/>
</kw>
<var name="${key}">DEVICE_USER</var>
<var name="${value}">admin</var>
<status status="PASS" start="2026-08-23T01:46:06.985180" elapsed="0.001925"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:06.987643" level="INFO">${value} = admin</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:06.987347" elapsed="0.000322"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:06.988396" level="INFO">${encoded} = admin</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-08-23T01:46:06.988180" elapsed="0.000242"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:06.988471" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T01:46:06.988620" level="INFO">${encoded_value} = admin</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-08-23T01:46:06.987861" elapsed="0.000784"/>
</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-08-23T01:46:06.988790" elapsed="0.000236"/>
</kw>
<var name="${key}">DEVICE_PASSWORD</var>
<var name="${value}">admin</var>
<status status="PASS" start="2026-08-23T01:46:06.987217" elapsed="0.001849"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:06.989608" level="INFO">${value} = device-key</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:06.989310" elapsed="0.000324"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:06.990349" level="INFO">${encoded} = device-key</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-08-23T01:46:06.990140" elapsed="0.000235"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:06.990424" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T01:46:06.990584" level="INFO">${encoded_value} = device-key</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-08-23T01:46:06.989812" elapsed="0.000797"/>
</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-08-23T01:46:06.990755" elapsed="0.000242"/>
</kw>
<var name="${key}">DEVICE_KEY</var>
<var name="${value}">device-key</var>
<status status="PASS" start="2026-08-23T01:46:06.989176" elapsed="0.001861"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:06.991578" level="INFO">${value} = /tmp/schema</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:06.991276" elapsed="0.000327"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:06.992335" level="INFO">${encoded} = /tmp/schema</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-08-23T01:46:06.992127" elapsed="0.000233"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:06.992409" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T01:46:06.992557" level="INFO">${encoded_value} = /tmp/schema</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-08-23T01:46:06.991779" elapsed="0.000803"/>
</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-08-23T01:46:06.992726" elapsed="0.000249"/>
</kw>
<var name="${key}">SCHEMA_DIRECTORY</var>
<var name="${value}">/tmp/schema</var>
<status status="PASS" start="2026-08-23T01:46:06.991148" elapsed="0.001868"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:06.993548" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:06.993254" elapsed="0.000319"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:06.994309" level="INFO">${encoded} = /rests</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-08-23T01:46:06.994101" elapsed="0.000233"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:06.994383" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T01:46:06.994544" level="INFO">${encoded_value} = /rests</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-08-23T01:46:06.993758" elapsed="0.000810"/>
</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-08-23T01:46:06.994720" elapsed="0.000246"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-23T01:46:06.993126" elapsed="0.001881"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-23T01:46:06.978756" elapsed="0.016285"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-23T01:46:06.995130" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T01:46:06.995293" level="INFO">${mapping_to_use} = {'DEVICE_IP': '10.30.170.114', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', '...</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-23T01:46:06.977598" elapsed="0.017721"/>
</kw>
<status status="PASS" start="2026-08-23T01:46:06.977300" elapsed="0.018051"/>
</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-08-23T01:46:06.995526" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:06.995376" elapsed="0.000206"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:06.977279" elapsed="0.018323"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T01:46:06.996536" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</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-08-23T01:46:06.995797" elapsed="0.000767"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T01:46:06.996663" elapsed="0.000054"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="PASS" start="2026-08-23T01:46:06.972868" elapsed="0.024095"/>
</kw>
<msg time="2026-08-23T01:46:06.997054" 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-08-23T01:46:06.959201" elapsed="0.037955"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:07.020613" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:07.043313" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:07.065478" 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-08-23T01:46:07.065720" 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-08-23T01:46:07.065962" 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-08-23T01:46:07.066557" elapsed="0.000044"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:07.066273" elapsed="0.000388"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:07.066257" elapsed="0.000496"/>
</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-08-23T01:46:07.067021" elapsed="0.000102"/>
</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-08-23T01:46:07.067490" elapsed="0.000059"/>
</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-08-23T01:46:07.067932" elapsed="0.000049"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T01:46:07.066227" elapsed="0.001888"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T01:46:07.066094" elapsed="0.002085"/>
</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-08-23T01:46:07.068331" elapsed="0.000023"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T01:46:07.068533" elapsed="0.000019"/>
</return>
<msg time="2026-08-23T01:46:07.068660" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</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-08-23T01:46:06.954675" elapsed="0.114012"/>
</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-08-23T01:46:07.096886" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/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-08-23T01:46:07.096466" elapsed="0.000454"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T01:46:07.097762" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/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-08-23T01:46:07.097479" elapsed="0.000382">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/data.xml' does not exist.</status>
</kw>
<msg time="2026-08-23T01:46:07.097959" 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-08-23T01:46:07.097138" elapsed="0.000846"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T01:46:07.098624" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/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-08-23T01:46:07.098200" elapsed="0.000452"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T01:46:07.099022" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/data.xml"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/data.xml&lt;/a&gt;'.</msg>
<msg time="2026-08-23T01:46:07.099167" level="INFO">${template} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;$DEVICE_NAME&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;$DEVICE_IP&lt;/host&gt;
    &lt;port&gt;$DEVI...</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T01:46:07.098879" elapsed="0.000316"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:07.099647" level="INFO">&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;$DEVICE_NAME&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;$DEVICE_IP&lt;/host&gt;
    &lt;port&gt;$DEVICE_PORT&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;$DEVICE_USER&lt;/username&gt;
      &lt;password&gt;$DEVICE_PASSWORD&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt;
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:07.099400" elapsed="0.000299"/>
</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-08-23T01:46:07.100143" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:07.099816" elapsed="0.000387"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T01:46:07.100674" level="INFO">${mapping_to_use} = {'DEVICE_IP': '10.30.170.114', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', '...</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-08-23T01:46:07.100371" elapsed="0.000331"/>
</kw>
<status status="PASS" start="2026-08-23T01:46:07.100228" elapsed="0.000509"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:07.099795" elapsed="0.000964"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T01:46:07.101710" level="INFO">${final_text} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.114&lt;/host&gt;
    &lt;port&gt;283...</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-08-23T01:46:07.100980" elapsed="0.000762"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T01:46:07.101863" elapsed="0.000059"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="PASS" start="2026-08-23T01:46:07.095463" elapsed="0.006686"/>
</kw>
<msg time="2026-08-23T01:46:07.102271" 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-08-23T01:46:07.081915" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:07.124636" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:07.147031" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:07.169414" 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-08-23T01:46:07.169656" 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-08-23T01:46:07.169870" elapsed="0.000024"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:07.170444" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:07.170178" elapsed="0.000351"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:07.170163" elapsed="0.000453"/>
</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-08-23T01:46:07.170816" elapsed="0.000074"/>
</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-08-23T01:46:07.171184" elapsed="0.000046"/>
</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-08-23T01:46:07.171514" elapsed="0.000045"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T01:46:07.170132" elapsed="0.001551"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T01:46:07.170000" elapsed="0.001744"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:07.172071" elapsed="0.000023"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T01:46:07.172234" elapsed="0.000018"/>
</return>
<msg time="2026-08-23T01:46:07.172362" level="INFO">${data} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.114&lt;/host&gt;
    &lt;port&gt;283...</msg>
<var>${data}</var>
<arg>folder=${folder}</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-08-23T01:46:07.079045" elapsed="0.093347"/>
</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-08-23T01:46:07.175012" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/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-08-23T01:46:07.174440" elapsed="0.000694">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-23T01:46:07.175266" 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-08-23T01:46:07.173163" elapsed="0.002129"/>
</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-08-23T01:46:07.175785" elapsed="0.000128"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:07.175435" elapsed="0.000562"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T01:46:07.177187" 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-08-23T01:46:07.176496" elapsed="0.000732"/>
</kw>
<status status="PASS" start="2026-08-23T01:46:07.176024" elapsed="0.001285"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:07.175415" elapsed="0.001918"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T01:46:07.180242" 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-08-23T01:46:07.177485" elapsed="0.002784"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-23T01:46:07.180368" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T01:46:07.180525" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-23T01:46:07.172772" elapsed="0.007778"/>
</kw>
<kw name="Put_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:07.182388" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:07.181901" elapsed="0.000550"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:07.183121" level="INFO">&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.114&lt;/host&gt;
    &lt;port&gt;2830&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;admin&lt;/username&gt;
      &lt;password&gt;admin&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt;</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:07.182616" elapsed="0.000572"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:07.183829" 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-08-23T01:46:07.183350" elapsed="0.000582"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:07.184570" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:07.184095" elapsed="0.000534"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-08-23T01:46:07.186247" 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-08-23T01:46:07.185644" elapsed="0.000703"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-08-23T01:46:07.187197" 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-08-23T01:46:07.186629" elapsed="0.000668"/>
</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-08-23T01:46:07.187559" elapsed="0.000553"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:07.189107" 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-08-23T01:46:07.188384" elapsed="0.000921"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-08-23T01:46:07.189392" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T01:46:07.189666" 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-08-23T01:46:07.184965" elapsed="0.004727"/>
</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-08-23T01:46:07.203475" level="INFO">PUT Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Content-Length': '439', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.114&lt;/host&gt;
    &lt;port&gt;2830&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;admin&lt;/username&gt;
      &lt;password&gt;admin&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt; 
 </msg>
<msg time="2026-08-23T01:46:07.203559" level="INFO">PUT Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 status=404, reason=Not Found 
 headers={'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:07.203668" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</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-08-23T01:46:07.198088" elapsed="0.006554">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</kw>
<status status="FAIL" start="2026-08-23T01:46:07.189803" elapsed="0.015001">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</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-08-23T01:46:07.205084" elapsed="0.000075"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:07.204896" elapsed="0.000395"/>
</branch>
<status status="FAIL" start="2026-08-23T01:46:07.189783" elapsed="0.015535">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</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-08-23T01:46:07.205797" elapsed="0.000027"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T01:46:07.205968" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-08-23T01:46:07.205925" elapsed="0.000130"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:07.205906" elapsed="0.000174"/>
</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-08-23T01:46:07.206230" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T01:46:07.206335" elapsed="0.000018"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>content_type=${content_type}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</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-08-23T01:46:07.180990" elapsed="0.025458">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T01:46:07.206523" elapsed="0.000016"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>extension=xml</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>content_type=${HEADERS_XML}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>endline=${\n}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve URI and data from folder, call Put_To_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-23T01:46:06.943757" elapsed="0.262864">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=response</arg>
<arg>mapping=${mapping}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:07.206924" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:07.206729" elapsed="0.000263"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:07.206712" elapsed="0.000303"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T01:46:07.207048" elapsed="0.000015"/>
</return>
<arg>folder=${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Add arguments sensible for XML data, return Put_Templated response text.
Optionally, verification against response.xml (no iteration) is called.</doc>
<status status="FAIL" start="2026-08-23T01:46:06.941133" elapsed="0.266014">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</kw>
<status status="FAIL" start="2026-08-23T01:46:06.940899" elapsed="0.266316">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</branch>
<status status="FAIL" start="2026-08-23T01:46:06.940436" elapsed="0.266807">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</if>
<kw name="Set To Dictionary" owner="Collections">
<arg>${NetconfKeywords__mounted_device_types}</arg>
<arg>${device_name}</arg>
<arg>${device_type}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:07.207394" elapsed="0.000021"/>
</kw>
<arg>${device_name}</arg>
<arg>device_type=full-uri-device</arg>
<arg>device_port=${DEVICE_PORT}</arg>
<arg>device_address=${device_ip}</arg>
<arg>device_user=admin</arg>
<arg>device_password=admin</arg>
<arg>session=${session}</arg>
<doc>Tell Netconf about the specified device so it can add it into its configuration.</doc>
<status status="FAIL" start="2026-08-23T01:46:06.911938" elapsed="0.295572">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</kw>
<arg>${DEVICE_NAME}</arg>
<arg>${session}</arg>
<arg>${ODL_SYSTEM_${node_index}_IP}</arg>
<doc>Configures the device via REST api.</doc>
<status status="FAIL" start="2026-08-23T01:46:06.910607" elapsed="0.297013">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<var>&amp;{mapping}</var>
<arg>DEVICE_NAME=${DEVICE_NAME}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:07.207790" elapsed="0.000022"/>
</kw>
<kw name="Wait_Netconf_Device_Mounted">
<arg>${DEVICE_NAME}</arg>
<arg>${session}</arg>
<arg>${mapping}</arg>
<doc>Checks weather the device was mounted.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:07.207967" elapsed="0.000022"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:07.219607" elapsed="0.000040"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<var>${mod_session}</var>
<arg>member_index=${idx}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:07.220092" elapsed="0.000035"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5x</arg>
<arg>3s</arg>
<arg>TemplatedRequests.Get_As_Xml_Templated</arg>
<arg>${NETCONF_FOLDER}${/}${version}${/}netconf-state</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${mod_session}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:07.220353" elapsed="0.000029"/>
</kw>
<var name="${idx}"/>
<status status="NOT RUN" start="2026-08-23T01:46:07.219812" elapsed="0.000710"/>
</iter>
<var>${idx}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="NOT RUN" start="2026-08-23T01:46:07.219728" elapsed="0.000833"/>
</for>
<kw name="Remove_Netconf_Device" type="TEARDOWN">
<kw name="Remove_Device_From_Netconf" owner="NetconfKeywords">
<kw name="Pop From Dictionary" owner="Collections">
<msg time="2026-08-23T01:46:07.222207" level="INFO">${device_type} = None</msg>
<msg time="2026-08-23T01:46:07.222249" level="FAIL">Dictionary does not contain key 'test-device'.</msg>
<var>${device_type}</var>
<arg>${NetconfKeywords__mounted_device_types}</arg>
<arg>${device_name}</arg>
<doc>Pops the given ``key`` from the ``dictionary`` and returns its value.</doc>
<status status="FAIL" start="2026-08-23T01:46:07.221928" elapsed="0.000378">Dictionary does not contain key 'test-device'.</status>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T01:46:07.222925" level="INFO">${mapping} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping}</var>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-23T01:46:07.222482" elapsed="0.000470"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T01:46:07.241412" elapsed="0.000878"/>
</kw>
<msg time="2026-08-23T01:46:07.242519" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T01:46:07.241051" elapsed="0.001535"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return scandium if vanadium is at least ${lower_bound},
return calcium otherwise.</doc>
<status status="PASS" start="2026-08-23T01:46:07.240619" elapsed="0.002042"/>
</kw>
<msg time="2026-08-23T01:46:07.242703" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T01:46:07.231957" elapsed="0.010802"/>
</kw>
<msg time="2026-08-23T01:46:07.242878" level="INFO">${version} = scandium</msg>
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-08-23T01:46:07.231591" elapsed="0.011313"/>
</kw>
<kw name="Delete_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-08-23T01:46:07.286734" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T01:46:07.286058" elapsed="0.000800"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T01:46:07.288474" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-23T01:46:07.287963" elapsed="0.000619">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-23T01:46:07.288710" 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-08-23T01:46:07.287179" elapsed="0.001636"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T01:46:07.290230" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None/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-08-23T01:46:07.289182" elapsed="0.001156"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T01:46:07.290960" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-23T01:46:07.291194" level="INFO">${template} = None</msg>
<msg time="2026-08-23T01:46:07.291283" level="FAIL">FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="FAIL" start="2026-08-23T01:46:07.290716" elapsed="0.000672">FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'</status>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:07.292304" level="INFO">None</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:07.291722" elapsed="0.000643"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:07.294282" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:07.294019" elapsed="0.000308"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T01:46:07.294967" 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-08-23T01:46:07.294527" elapsed="0.000467"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:07.295796" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:07.295444" elapsed="0.000540"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:07.296748" level="INFO">${encoded} = test-device</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-08-23T01:46:07.296524" elapsed="0.000250"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:07.296824" elapsed="0.000045"/>
</return>
<msg time="2026-08-23T01:46:07.296993" level="INFO">${encoded_value} = test-device</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-08-23T01:46:07.296175" 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-08-23T01:46:07.297166" elapsed="0.000224"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-23T01:46:07.295310" elapsed="0.002121"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:07.297985" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:07.297673" elapsed="0.000338"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:07.298744" level="INFO">${encoded} = /rests</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-08-23T01:46:07.298536" elapsed="0.000233"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:07.298819" elapsed="0.000055"/>
</return>
<msg time="2026-08-23T01:46:07.299000" level="INFO">${encoded_value} = /rests</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-08-23T01:46:07.298195" elapsed="0.000829"/>
</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-08-23T01:46:07.299172" elapsed="0.000221"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-23T01:46:07.297544" elapsed="0.001889"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-23T01:46:07.295094" elapsed="0.004395"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-23T01:46:07.299554" elapsed="0.000071"/>
</return>
<msg time="2026-08-23T01:46:07.300077" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-23T01:46:07.293219" elapsed="0.006948"/>
</kw>
<status status="PASS" start="2026-08-23T01:46:07.292537" elapsed="0.007707"/>
</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-08-23T01:46:07.300537" elapsed="0.000084"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:07.300322" elapsed="0.000378"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:07.292516" elapsed="0.008257"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T01:46:07.301763" level="INFO">${final_text} = None</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-08-23T01:46:07.300953" elapsed="0.000934"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T01:46:07.302116" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None/${file_name}.</doc>
<status status="FAIL" start="2026-08-23T01:46:07.285072" elapsed="0.017248">FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'</status>
</kw>
<msg time="2026-08-23T01:46:07.302376" 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="FAIL" start="2026-08-23T01:46:07.272287" elapsed="0.030150"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:07.314965" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:07.327512" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:07.339979" 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-08-23T01:46:07.340168" 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-08-23T01:46:07.340337" 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-08-23T01:46:07.340749" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:07.340608" elapsed="0.000204"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:07.340593" 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-08-23T01:46:07.341008" 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-08-23T01:46:07.341172" 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-08-23T01:46:07.341332" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T01:46:07.340555" elapsed="0.000830"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T01:46:07.340413" elapsed="0.000997"/>
</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-08-23T01:46:07.341550" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T01:46:07.341625" elapsed="0.000015"/>
</return>
<msg time="2026-08-23T01:46:07.341779" level="INFO">${uri} = None</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=${location}</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="FAIL" start="2026-08-23T01:46:07.267949" elapsed="0.073857">FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'</status>
</kw>
<kw name="Delete_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:07.342984" level="INFO">None</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:07.342700" elapsed="0.000329"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:46:07.349292" level="INFO">DELETE Request : url=http://10.30.170.114:8181/ 
 path_url=/ 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Length': '0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:07.349341" level="INFO">DELETE Response : url=http://10.30.170.114:8181/ 
 status=404, reason=Not Found 
 headers={'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:07.349468" level="INFO">${response} = None</msg>
<msg time="2026-08-23T01:46:07.349510" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:46:07.345323" elapsed="0.004538">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/</status>
</kw>
<status status="FAIL" start="2026-08-23T01:46:07.343095" elapsed="0.006845">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/</status>
</branch>
<branch type="ELSE">
<kw name="DELETE On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:07.350126" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:07.349972" elapsed="0.000220"/>
</branch>
<status status="FAIL" start="2026-08-23T01:46:07.343077" elapsed="0.007138">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/</status>
</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-08-23T01:46:07.354000" level="FAIL">Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="FAIL" start="2026-08-23T01:46:07.351418" elapsed="0.002618">Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<status status="FAIL" start="2026-08-23T01:46:07.351181" elapsed="0.002919">Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</branch>
<status status="FAIL" start="2026-08-23T01:46:07.351162" elapsed="0.002969">Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:07.357354" level="FAIL">Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="FAIL" start="2026-08-23T01:46:07.354428" elapsed="0.003017">Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</status>
</kw>
<status status="FAIL" start="2026-08-23T01:46:07.354203" elapsed="0.003335">Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</status>
</branch>
<status status="FAIL" start="2026-08-23T01:46:07.354185" elapsed="0.003397">Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</status>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T01:46:07.358437" 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-08-23T01:46:07.357828" elapsed="0.000647"/>
</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-08-23T01:46:07.358920" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:07.358573" elapsed="0.000430"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T01:46:07.359872" 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-08-23T01:46:07.359285" elapsed="0.000627"/>
</kw>
<status status="PASS" start="2026-08-23T01:46:07.359037" elapsed="0.000926"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:07.358548" elapsed="0.001445"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T01:46:07.360727" 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-08-23T01:46:07.360209" 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-08-23T01:46:07.361224" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:07.360900" elapsed="0.000404"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T01:46:07.362137" 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-08-23T01:46:07.361549" elapsed="0.000625"/>
</kw>
<status status="PASS" start="2026-08-23T01:46:07.361336" elapsed="0.000888"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:07.360872" elapsed="0.001381"/>
</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-08-23T01:46:07.362455" elapsed="0.000664"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-08-23T01:46:07.363882" 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-08-23T01:46:07.363362" elapsed="0.000559"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<msg time="2026-08-23T01:46:07.370880" level="FAIL">Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</msg>
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="FAIL" start="2026-08-23T01:46:07.364130" elapsed="0.006785">Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</status>
</kw>
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_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="FAIL" start="2026-08-23T01:46:07.350720" elapsed="0.020338">Several failures occurred:

1) Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'

2) Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'

3) Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</status>
</kw>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-08-23T01:46:07.371130" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T01:46:07.373500" level="INFO">${response_text} = None</msg>
<msg time="2026-08-23T01:46:07.373530" level="FAIL">Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>session=${session}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>DELETE resource at URI, check status_code and return response text..</doc>
<status status="FAIL" start="2026-08-23T01:46:07.342101" elapsed="0.031458">Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-08-23T01:46:07.373626" elapsed="0.000025"/>
</return>
<arg>${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>${mapping}</arg>
<arg>session=${session}</arg>
<arg>location=${location}</arg>
<doc>Resolve URI from folder, issue DELETE request.</doc>
<status status="FAIL" start="2026-08-23T01:46:07.243128" elapsed="0.130676">Several failures occurred:

1) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

2) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Tell Netconf to deconfigure the specified device</doc>
<status status="FAIL" start="2026-08-23T01:46:07.221468" elapsed="0.152661">Several failures occurred:

1) Dictionary does not contain key 'test-device'.

2) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

3) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<arg>${DEVICE_NAME}</arg>
<arg>${session}</arg>
<doc>Removes configured device</doc>
<status status="FAIL" start="2026-08-23T01:46:07.220854" elapsed="0.153401">Several failures occurred:

1) Dictionary does not contain key 'test-device'.

2) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

3) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<arg>${idx}</arg>
<doc>Netconf readines for a node is done by creating a netconf device connected to that node
and performing GET operation got from the device's mount point.</doc>
<status status="FAIL" start="2026-08-23T01:46:06.907118" elapsed="0.467259">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device

Also keyword teardown failed:
Several failures occurred:

1) Dictionary does not contain key 'test-device'.

2) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

3) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<var name="${idx}">1</var>
<status status="FAIL" start="2026-08-23T01:46:06.906696" elapsed="0.467746">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device

Also keyword teardown failed:
Several failures occurred:

1) Dictionary does not contain key 'test-device'.

2) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

3) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</iter>
<var>${idx}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="FAIL" start="2026-08-23T01:46:06.906327" elapsed="0.468177">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device

Also keyword teardown failed:
Several failures occurred:

1) Dictionary does not contain key 'test-device'.

2) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

3) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</for>
<doc>Verifies the netconf readiness for every odl node.</doc>
<status status="FAIL" start="2026-08-23T01:46:06.905718" elapsed="0.468885">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device

Also keyword teardown failed:
Several failures occurred:

1) Dictionary does not contain key 'test-device'.

2) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

3) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<kw name="Check_Netconf_Topology_Ready">
<for flavor="IN">
<iter>
<kw name="Verify_Netconf_Topology_Ready_For_Node">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T01:46:08.379392" 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-08-23T01:46:08.378573" elapsed="0.000890"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-08-23T01:46:08.379582" elapsed="0.000075"/>
</return>
<msg time="2026-08-23T01:46:08.379965" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${node_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-08-23T01:46:08.377646" elapsed="0.002377"/>
</kw>
<kw name="Configure_Netconf_Device">
<kw name="Configure_Device_In_Netconf" owner="NetconfKeywords">
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T01:46:08.404344" elapsed="0.000914"/>
</kw>
<msg time="2026-08-23T01:46:08.405404" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T01:46:08.403885" elapsed="0.001579"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return scandium if vanadium is at least ${lower_bound},
return calcium otherwise.</doc>
<status status="PASS" start="2026-08-23T01:46:08.403482" elapsed="0.002059"/>
</kw>
<msg time="2026-08-23T01:46:08.405583" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T01:46:08.394820" elapsed="0.010808"/>
</kw>
<msg time="2026-08-23T01:46:08.405728" level="INFO">${version} = scandium</msg>
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-08-23T01:46:08.394485" elapsed="0.011268"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T01:46:08.406670" level="INFO">${mapping} = {'DEVICE_IP': '10.30.170.114', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', '...</msg>
<var>${mapping}</var>
<arg>DEVICE_IP=${device_address}</arg>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>DEVICE_PORT=${device_port}</arg>
<arg>DEVICE_USER=${device_user}</arg>
<arg>DEVICE_PASSWORD=${device_password}</arg>
<arg>DEVICE_KEY=${device_key}</arg>
<arg>SCHEMA_DIRECTORY=${schema_directory}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-23T01:46:08.405940" elapsed="0.000758"/>
</kw>
<if>
<branch type="IF" condition="'${http_method}'=='post'">
<kw name="Post_As_Xml_Templated" owner="TemplatedRequests">
<arg>folder=${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</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="NOT RUN" start="2026-08-23T01:46:08.407190" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:08.406822" elapsed="0.000499"/>
</branch>
<branch type="ELSE">
<kw name="Put_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Put_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-08-23T01:46:08.440668" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T01:46:08.440289" elapsed="0.000407"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T01:46:08.441540" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-23T01:46:08.441273" elapsed="0.000349">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-23T01:46:08.441717" 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-08-23T01:46:08.440933" elapsed="0.000808"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T01:46:08.442375" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/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-08-23T01:46:08.441980" elapsed="0.000430"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T01:46:08.442796" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/location.uri"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-23T01:46:08.442991" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T01:46:08.442650" elapsed="0.000366"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:08.443475" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:08.443226" 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-08-23T01:46:08.444531" level="INFO">mapping: {'DEVICE_IP': '10.30.170.114', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:08.444276" elapsed="0.000301"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T01:46:08.445029" 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-08-23T01:46:08.444731" elapsed="0.000324"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:08.445707" level="INFO">${value} = 10.30.170.114</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:08.445410" elapsed="0.000323"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:08.446617" level="INFO">${encoded} = 10.30.170.114</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-08-23T01:46:08.446266" elapsed="0.000381"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:08.446703" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T01:46:08.446883" level="INFO">${encoded_value} = 10.30.170.114</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-08-23T01:46:08.445939" elapsed="0.000970"/>
</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-08-23T01:46:08.447062" elapsed="0.000244"/>
</kw>
<var name="${key}">DEVICE_IP</var>
<var name="${value}">10.30.170.114</var>
<status status="PASS" start="2026-08-23T01:46:08.445278" elapsed="0.002068"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:08.447901" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:08.447587" elapsed="0.000340"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:08.448640" level="INFO">${encoded} = test-device</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-08-23T01:46:08.448430" elapsed="0.000235"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:08.448714" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T01:46:08.448881" level="INFO">${encoded_value} = test-device</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-08-23T01:46:08.448106" elapsed="0.000801"/>
</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-08-23T01:46:08.449061" elapsed="0.000227"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-23T01:46:08.447458" elapsed="0.001870"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:08.449883" level="INFO">${value} = 2830</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:08.449567" elapsed="0.000343"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:08.450758" level="INFO">${encoded} = 2830</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-08-23T01:46:08.450519" elapsed="0.000265"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:08.450854" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T01:46:08.451157" level="INFO">${encoded_value} = 2830</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-08-23T01:46:08.450139" elapsed="0.001043"/>
</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-08-23T01:46:08.451330" elapsed="0.000223"/>
</kw>
<var name="${key}">DEVICE_PORT</var>
<var name="${value}">2830</var>
<status status="PASS" start="2026-08-23T01:46:08.449439" elapsed="0.002154"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:08.452148" level="INFO">${value} = admin</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:08.451847" elapsed="0.000329"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:08.452888" level="INFO">${encoded} = admin</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-08-23T01:46:08.452664" elapsed="0.000250"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:08.452963" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T01:46:08.453112" level="INFO">${encoded_value} = admin</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-08-23T01:46:08.452356" elapsed="0.000780"/>
</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-08-23T01:46:08.453282" elapsed="0.000221"/>
</kw>
<var name="${key}">DEVICE_USER</var>
<var name="${value}">admin</var>
<status status="PASS" start="2026-08-23T01:46:08.451703" elapsed="0.001840"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:08.454243" level="INFO">${value} = admin</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:08.453789" elapsed="0.000480"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:08.455021" level="INFO">${encoded} = admin</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-08-23T01:46:08.454788" elapsed="0.000258"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:08.455096" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T01:46:08.455245" level="INFO">${encoded_value} = admin</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-08-23T01:46:08.454471" 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-08-23T01:46:08.455415" elapsed="0.000219"/>
</kw>
<var name="${key}">DEVICE_PASSWORD</var>
<var name="${value}">admin</var>
<status status="PASS" start="2026-08-23T01:46:08.453660" elapsed="0.002013"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:08.456252" level="INFO">${value} = device-key</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:08.455934" elapsed="0.000344"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:08.457022" level="INFO">${encoded} = device-key</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-08-23T01:46:08.456795" elapsed="0.000252"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:08.457101" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T01:46:08.457251" level="INFO">${encoded_value} = device-key</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-08-23T01:46:08.456462" elapsed="0.000813"/>
</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-08-23T01:46:08.457421" elapsed="0.000226"/>
</kw>
<var name="${key}">DEVICE_KEY</var>
<var name="${value}">device-key</var>
<status status="PASS" start="2026-08-23T01:46:08.455783" elapsed="0.001905"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:08.458246" level="INFO">${value} = /tmp/schema</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:08.457942" elapsed="0.000330"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:08.459037" level="INFO">${encoded} = /tmp/schema</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-08-23T01:46:08.458802" elapsed="0.000261"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:08.459112" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T01:46:08.459261" level="INFO">${encoded_value} = /tmp/schema</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-08-23T01:46:08.458463" elapsed="0.000822"/>
</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-08-23T01:46:08.459430" elapsed="0.000218"/>
</kw>
<var name="${key}">SCHEMA_DIRECTORY</var>
<var name="${value}">/tmp/schema</var>
<status status="PASS" start="2026-08-23T01:46:08.457798" elapsed="0.001890"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:08.460248" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:08.459943" elapsed="0.000330"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:08.461051" level="INFO">${encoded} = /rests</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-08-23T01:46:08.460818" elapsed="0.000259"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:08.461127" elapsed="0.000035"/>
</return>
<msg time="2026-08-23T01:46:08.461285" level="INFO">${encoded_value} = /rests</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-08-23T01:46:08.460458" elapsed="0.000852"/>
</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-08-23T01:46:08.461456" elapsed="0.000220"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-23T01:46:08.459799" elapsed="0.001916"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-23T01:46:08.445103" elapsed="0.016647"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-23T01:46:08.461792" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T01:46:08.461975" level="INFO">${mapping_to_use} = {'DEVICE_IP': '10.30.170.114', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', '...</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-23T01:46:08.443957" elapsed="0.018044"/>
</kw>
<status status="PASS" start="2026-08-23T01:46:08.443636" elapsed="0.018398"/>
</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-08-23T01:46:08.462203" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:08.462059" elapsed="0.000200"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:08.443615" elapsed="0.018664"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T01:46:08.463392" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</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-08-23T01:46:08.462502" elapsed="0.000918"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T01:46:08.463520" elapsed="0.000053"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="PASS" start="2026-08-23T01:46:08.439296" elapsed="0.024505"/>
</kw>
<msg time="2026-08-23T01:46:08.463908" 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-08-23T01:46:08.425674" elapsed="0.038332"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:08.486598" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:08.508920" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:08.530891" 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-08-23T01:46:08.531137" elapsed="0.000027"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${separator}</var>
<arg>'${extension}' != 'json'</arg>
<arg>${endline}</arg>
<arg>,${endline}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:08.531334" 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-08-23T01:46:08.531913" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:08.531633" elapsed="0.000365"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:08.531618" elapsed="0.000497"/>
</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-08-23T01:46:08.532319" elapsed="0.000044"/>
</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-08-23T01:46:08.532650" elapsed="0.000044"/>
</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-08-23T01:46:08.532999" elapsed="0.000046"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T01:46:08.531588" elapsed="0.001580"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T01:46:08.531458" elapsed="0.001770"/>
</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-08-23T01:46:08.533376" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T01:46:08.533530" elapsed="0.000017"/>
</return>
<msg time="2026-08-23T01:46:08.533652" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</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-08-23T01:46:08.421260" elapsed="0.112417"/>
</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-08-23T01:46:08.561435" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/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-08-23T01:46:08.561059" elapsed="0.000404"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T01:46:08.562360" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/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-08-23T01:46:08.562114" elapsed="0.000314">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/data.xml' does not exist.</status>
</kw>
<msg time="2026-08-23T01:46:08.562521" 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-08-23T01:46:08.561748" elapsed="0.000797"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T01:46:08.563179" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/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-08-23T01:46:08.562759" elapsed="0.000447"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T01:46:08.563555" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/data.xml"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/data.xml&lt;/a&gt;'.</msg>
<msg time="2026-08-23T01:46:08.563704" level="INFO">${template} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;$DEVICE_NAME&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;$DEVICE_IP&lt;/host&gt;
    &lt;port&gt;$DEVI...</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T01:46:08.563415" elapsed="0.000318"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:08.564227" level="INFO">&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;$DEVICE_NAME&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;$DEVICE_IP&lt;/host&gt;
    &lt;port&gt;$DEVICE_PORT&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;$DEVICE_USER&lt;/username&gt;
      &lt;password&gt;$DEVICE_PASSWORD&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt;
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:08.563977" elapsed="0.000302"/>
</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-08-23T01:46:08.564693" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:08.564398" elapsed="0.000354"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T01:46:08.565240" level="INFO">${mapping_to_use} = {'DEVICE_IP': '10.30.170.114', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', '...</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-08-23T01:46:08.564942" elapsed="0.000325"/>
</kw>
<status status="PASS" start="2026-08-23T01:46:08.564777" elapsed="0.000525"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:08.564376" elapsed="0.000947"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T01:46:08.566286" level="INFO">${final_text} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.114&lt;/host&gt;
    &lt;port&gt;283...</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-08-23T01:46:08.565518" elapsed="0.000838"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T01:46:08.566471" elapsed="0.000054"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="PASS" start="2026-08-23T01:46:08.560068" elapsed="0.006681"/>
</kw>
<msg time="2026-08-23T01:46:08.566858" 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-08-23T01:46:08.546631" elapsed="0.020327"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:08.590225" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:08.612370" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:08.634604" 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-08-23T01:46:08.634872" 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-08-23T01:46:08.635068" 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-08-23T01:46:08.635652" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:08.635388" elapsed="0.000348"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:08.635370" elapsed="0.000455"/>
</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-08-23T01:46:08.636055" elapsed="0.000045"/>
</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-08-23T01:46:08.636383" elapsed="0.000044"/>
</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-08-23T01:46:08.636710" elapsed="0.000044"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T01:46:08.635338" elapsed="0.001560"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T01:46:08.635199" elapsed="0.001761"/>
</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-08-23T01:46:08.637121" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T01:46:08.637278" elapsed="0.000018"/>
</return>
<msg time="2026-08-23T01:46:08.637416" level="INFO">${data} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.114&lt;/host&gt;
    &lt;port&gt;283...</msg>
<var>${data}</var>
<arg>folder=${folder}</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-08-23T01:46:08.543785" elapsed="0.093661"/>
</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-08-23T01:46:08.640191" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/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-08-23T01:46:08.639614" elapsed="0.000704">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-23T01:46:08.640451" 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-08-23T01:46:08.638264" elapsed="0.002212"/>
</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-08-23T01:46:08.641029" elapsed="0.000078"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:08.640586" elapsed="0.000602"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T01:46:08.642463" 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-08-23T01:46:08.641689" elapsed="0.000815"/>
</kw>
<status status="PASS" start="2026-08-23T01:46:08.641217" elapsed="0.001367"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:08.640566" elapsed="0.002042"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T01:46:08.645487" 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-08-23T01:46:08.642759" elapsed="0.002756"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-23T01:46:08.645615" elapsed="0.000032"/>
</return>
<msg time="2026-08-23T01:46:08.645774" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-23T01:46:08.637899" elapsed="0.007899"/>
</kw>
<kw name="Put_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:08.647691" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:08.647195" elapsed="0.000559"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:08.648439" level="INFO">&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.114&lt;/host&gt;
    &lt;port&gt;2830&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;admin&lt;/username&gt;
      &lt;password&gt;admin&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt;</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:08.647947" elapsed="0.000560"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:08.649202" 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-08-23T01:46:08.648674" elapsed="0.000589"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:08.649944" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:08.649428" elapsed="0.000578"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-08-23T01:46:08.651558" 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-08-23T01:46:08.650967" elapsed="0.000693"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-08-23T01:46:08.652552" 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-08-23T01:46:08.652004" elapsed="0.000650"/>
</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-08-23T01:46:08.652973" elapsed="0.000512"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:08.654479" 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-08-23T01:46:08.653752" elapsed="0.000927"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-08-23T01:46:08.654767" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T01:46:08.655110" 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-08-23T01:46:08.650220" elapsed="0.004916"/>
</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-08-23T01:46:08.670086" level="INFO">PUT Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Content-Length': '439', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.114&lt;/host&gt;
    &lt;port&gt;2830&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;admin&lt;/username&gt;
      &lt;password&gt;admin&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt; 
 </msg>
<msg time="2026-08-23T01:46:08.670175" level="INFO">PUT Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 status=404, reason=Not Found 
 headers={'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:08.670315" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</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-08-23T01:46:08.664767" elapsed="0.006366">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</kw>
<status status="FAIL" start="2026-08-23T01:46:08.655248" elapsed="0.016079">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</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-08-23T01:46:08.671548" elapsed="0.000076"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:08.671365" elapsed="0.000417"/>
</branch>
<status status="FAIL" start="2026-08-23T01:46:08.655228" elapsed="0.016581">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</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-08-23T01:46:08.672306" elapsed="0.000027"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T01:46:08.672455" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T01:46:08.672417" elapsed="0.000126"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:08.672399" elapsed="0.000168"/>
</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-08-23T01:46:08.672709" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T01:46:08.673220" elapsed="0.000035"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>content_type=${content_type}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</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-08-23T01:46:08.646278" elapsed="0.027093">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T01:46:08.673448" elapsed="0.000017"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>extension=xml</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>content_type=${HEADERS_XML}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>endline=${\n}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve URI and data from folder, call Put_To_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-23T01:46:08.410421" elapsed="0.263129">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=response</arg>
<arg>mapping=${mapping}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:08.673888" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:08.673660" elapsed="0.000299"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:08.673642" elapsed="0.000341"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T01:46:08.674016" elapsed="0.000015"/>
</return>
<arg>folder=${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Add arguments sensible for XML data, return Put_Templated response text.
Optionally, verification against response.xml (no iteration) is called.</doc>
<status status="FAIL" start="2026-08-23T01:46:08.407589" elapsed="0.266528">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</kw>
<status status="FAIL" start="2026-08-23T01:46:08.407350" elapsed="0.266835">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</branch>
<status status="FAIL" start="2026-08-23T01:46:08.406794" elapsed="0.267419">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</if>
<kw name="Set To Dictionary" owner="Collections">
<arg>${NetconfKeywords__mounted_device_types}</arg>
<arg>${device_name}</arg>
<arg>${device_type}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:08.674373" elapsed="0.000022"/>
</kw>
<arg>${device_name}</arg>
<arg>device_type=full-uri-device</arg>
<arg>device_port=${DEVICE_PORT}</arg>
<arg>device_address=${device_ip}</arg>
<arg>device_user=admin</arg>
<arg>device_password=admin</arg>
<arg>session=${session}</arg>
<doc>Tell Netconf about the specified device so it can add it into its configuration.</doc>
<status status="FAIL" start="2026-08-23T01:46:08.381547" elapsed="0.292943">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</kw>
<arg>${DEVICE_NAME}</arg>
<arg>${session}</arg>
<arg>${ODL_SYSTEM_${node_index}_IP}</arg>
<doc>Configures the device via REST api.</doc>
<status status="FAIL" start="2026-08-23T01:46:08.380298" elapsed="0.294301">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<var>&amp;{mapping}</var>
<arg>DEVICE_NAME=${DEVICE_NAME}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:08.674767" elapsed="0.000021"/>
</kw>
<kw name="Wait_Netconf_Device_Mounted">
<arg>${DEVICE_NAME}</arg>
<arg>${session}</arg>
<arg>${mapping}</arg>
<doc>Checks weather the device was mounted.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:08.674948" elapsed="0.000023"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:08.686162" elapsed="0.000040"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<var>${mod_session}</var>
<arg>member_index=${idx}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:08.686626" elapsed="0.000033"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5x</arg>
<arg>3s</arg>
<arg>TemplatedRequests.Get_As_Xml_Templated</arg>
<arg>${NETCONF_FOLDER}${/}${version}${/}netconf-state</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${mod_session}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:08.686897" elapsed="0.000030"/>
</kw>
<var name="${idx}"/>
<status status="NOT RUN" start="2026-08-23T01:46:08.686366" elapsed="0.000624"/>
</iter>
<var>${idx}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="NOT RUN" start="2026-08-23T01:46:08.686282" elapsed="0.000745"/>
</for>
<kw name="Remove_Netconf_Device" type="TEARDOWN">
<kw name="Remove_Device_From_Netconf" owner="NetconfKeywords">
<kw name="Pop From Dictionary" owner="Collections">
<msg time="2026-08-23T01:46:08.688994" level="INFO">${device_type} = None</msg>
<msg time="2026-08-23T01:46:08.689053" level="FAIL">Dictionary does not contain key 'test-device'.</msg>
<var>${device_type}</var>
<arg>${NetconfKeywords__mounted_device_types}</arg>
<arg>${device_name}</arg>
<doc>Pops the given ``key`` from the ``dictionary`` and returns its value.</doc>
<status status="FAIL" start="2026-08-23T01:46:08.688557" elapsed="0.000581">Dictionary does not contain key 'test-device'.</status>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T01:46:08.689828" level="INFO">${mapping} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping}</var>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-23T01:46:08.689400" elapsed="0.000471"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T01:46:08.735219" elapsed="0.000951"/>
</kw>
<msg time="2026-08-23T01:46:08.736447" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T01:46:08.734851" elapsed="0.001678"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return scandium if vanadium is at least ${lower_bound},
return calcium otherwise.</doc>
<status status="PASS" start="2026-08-23T01:46:08.734419" elapsed="0.002189"/>
</kw>
<msg time="2026-08-23T01:46:08.736653" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T01:46:08.725500" elapsed="0.011210"/>
</kw>
<msg time="2026-08-23T01:46:08.736818" level="INFO">${version} = scandium</msg>
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-08-23T01:46:08.725028" elapsed="0.011838"/>
</kw>
<kw name="Delete_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-08-23T01:46:08.780748" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T01:46:08.779855" elapsed="0.001024"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T01:46:08.782561" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-23T01:46:08.781996" elapsed="0.000693">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-23T01:46:08.782816" 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-08-23T01:46:08.781200" elapsed="0.001762"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T01:46:08.784401" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None/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-08-23T01:46:08.783319" elapsed="0.001191"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T01:46:08.785252" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-23T01:46:08.785495" level="INFO">${template} = None</msg>
<msg time="2026-08-23T01:46:08.785585" level="FAIL">FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="FAIL" start="2026-08-23T01:46:08.785034" elapsed="0.000663">FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'</status>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:08.786567" level="INFO">None</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:08.786060" elapsed="0.000568"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:08.788981" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:08.788635" elapsed="0.000399"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T01:46:08.789522" 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-08-23T01:46:08.789246" elapsed="0.000302"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:08.790342" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:08.790032" elapsed="0.000336"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:08.791211" level="INFO">${encoded} = test-device</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-08-23T01:46:08.790983" elapsed="0.000253"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:08.791291" elapsed="0.000033"/>
</return>
<msg time="2026-08-23T01:46:08.791450" level="INFO">${encoded_value} = test-device</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-08-23T01:46:08.790553" elapsed="0.000922"/>
</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-08-23T01:46:08.791625" elapsed="0.000258"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-23T01:46:08.789896" elapsed="0.002028"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:08.792507" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:08.792204" elapsed="0.000328"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:08.793324" level="INFO">${encoded} = /rests</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-08-23T01:46:08.793083" elapsed="0.000267"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:08.793399" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T01:46:08.793550" level="INFO">${encoded_value} = /rests</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-08-23T01:46:08.792713" elapsed="0.000861"/>
</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-08-23T01:46:08.793721" elapsed="0.000244"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-23T01:46:08.792067" elapsed="0.001939"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-23T01:46:08.789652" elapsed="0.004409"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-23T01:46:08.794128" elapsed="0.000070"/>
</return>
<msg time="2026-08-23T01:46:08.794497" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-23T01:46:08.787817" elapsed="0.006770"/>
</kw>
<status status="PASS" start="2026-08-23T01:46:08.786985" elapsed="0.007680"/>
</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-08-23T01:46:08.794987" elapsed="0.000086"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:08.794744" elapsed="0.000409"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:08.786957" elapsed="0.008271"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T01:46:08.796229" level="INFO">${final_text} = None</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-08-23T01:46:08.795374" elapsed="0.000964"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T01:46:08.796567" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None/${file_name}.</doc>
<status status="FAIL" start="2026-08-23T01:46:08.778850" elapsed="0.017930">FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'</status>
</kw>
<msg time="2026-08-23T01:46:08.796859" 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="FAIL" start="2026-08-23T01:46:08.765878" elapsed="0.031044"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:08.809509" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:08.822244" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:08.834801" 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-08-23T01:46:08.835009" 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-08-23T01:46:08.835182" 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-08-23T01:46:08.835595" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:08.835450" elapsed="0.000211"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:08.835435" 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-08-23T01:46:08.835822" elapsed="0.000046"/>
</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-08-23T01:46:08.836015" 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-08-23T01:46:08.836185" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T01:46:08.835404" elapsed="0.000834"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T01:46:08.835261" elapsed="0.001002"/>
</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-08-23T01:46:08.836405" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T01:46:08.836480" elapsed="0.000015"/>
</return>
<msg time="2026-08-23T01:46:08.836634" level="INFO">${uri} = None</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=${location}</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="FAIL" start="2026-08-23T01:46:08.761557" elapsed="0.075104">FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'</status>
</kw>
<kw name="Delete_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:08.837787" level="INFO">None</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:08.837536" elapsed="0.000317"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:46:08.844440" level="INFO">DELETE Request : url=http://10.30.170.114:8181/ 
 path_url=/ 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Length': '0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:08.844488" level="INFO">DELETE Response : url=http://10.30.170.114:8181/ 
 status=404, reason=Not Found 
 headers={'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:08.844616" level="INFO">${response} = None</msg>
<msg time="2026-08-23T01:46:08.844658" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:46:08.840038" elapsed="0.005025">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/</status>
</kw>
<status status="FAIL" start="2026-08-23T01:46:08.837924" elapsed="0.007217">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/</status>
</branch>
<branch type="ELSE">
<kw name="DELETE On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:08.845327" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:08.845178" elapsed="0.000211"/>
</branch>
<status status="FAIL" start="2026-08-23T01:46:08.837905" elapsed="0.007507">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/</status>
</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-08-23T01:46:08.849313" level="FAIL">Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="FAIL" start="2026-08-23T01:46:08.846602" elapsed="0.002778">Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<status status="FAIL" start="2026-08-23T01:46:08.846385" elapsed="0.003062">Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</branch>
<status status="FAIL" start="2026-08-23T01:46:08.846366" elapsed="0.003114">Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:08.852422" level="FAIL">Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="FAIL" start="2026-08-23T01:46:08.849776" elapsed="0.002696">Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</status>
</kw>
<status status="FAIL" start="2026-08-23T01:46:08.849551" elapsed="0.003010">Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</status>
</branch>
<status status="FAIL" start="2026-08-23T01:46:08.849534" elapsed="0.003072">Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</status>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T01:46:08.853429" 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-08-23T01:46:08.852880" elapsed="0.000588"/>
</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-08-23T01:46:08.853928" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:08.853566" elapsed="0.000445"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T01:46:08.854828" 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-08-23T01:46:08.854259" elapsed="0.000636"/>
</kw>
<status status="PASS" start="2026-08-23T01:46:08.854045" elapsed="0.000901"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:08.853541" elapsed="0.001435"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T01:46:08.855769" 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-08-23T01:46:08.855194" elapsed="0.000613"/>
</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-08-23T01:46:08.856265" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:08.855939" elapsed="0.000407"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T01:46:08.857188" 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-08-23T01:46:08.856592" elapsed="0.000633"/>
</kw>
<status status="PASS" start="2026-08-23T01:46:08.856378" elapsed="0.000897"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:08.855913" elapsed="0.001392"/>
</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-08-23T01:46:08.857508" elapsed="0.000677"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-08-23T01:46:08.858949" 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-08-23T01:46:08.858413" elapsed="0.000575"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<msg time="2026-08-23T01:46:08.866260" level="FAIL">Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</msg>
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="FAIL" start="2026-08-23T01:46:08.859199" elapsed="0.007095">Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</status>
</kw>
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_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="FAIL" start="2026-08-23T01:46:08.845944" elapsed="0.020487">Several failures occurred:

1) Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'

2) Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'

3) Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</status>
</kw>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-08-23T01:46:08.866493" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T01:46:08.868959" level="INFO">${response_text} = None</msg>
<msg time="2026-08-23T01:46:08.868991" level="FAIL">Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>session=${session}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>DELETE resource at URI, check status_code and return response text..</doc>
<status status="FAIL" start="2026-08-23T01:46:08.836945" elapsed="0.032075">Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-08-23T01:46:08.869088" elapsed="0.000027"/>
</return>
<arg>${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>${mapping}</arg>
<arg>session=${session}</arg>
<arg>location=${location}</arg>
<doc>Resolve URI from folder, issue DELETE request.</doc>
<status status="FAIL" start="2026-08-23T01:46:08.737098" elapsed="0.132193">Several failures occurred:

1) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

2) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Tell Netconf to deconfigure the specified device</doc>
<status status="FAIL" start="2026-08-23T01:46:08.687935" elapsed="0.181544">Several failures occurred:

1) Dictionary does not contain key 'test-device'.

2) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

3) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<arg>${DEVICE_NAME}</arg>
<arg>${session}</arg>
<doc>Removes configured device</doc>
<status status="FAIL" start="2026-08-23T01:46:08.687289" elapsed="0.182324">Several failures occurred:

1) Dictionary does not contain key 'test-device'.

2) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

3) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<arg>${idx}</arg>
<doc>Netconf readines for a node is done by creating a netconf device connected to that node
and performing GET operation got from the device's mount point.</doc>
<status status="FAIL" start="2026-08-23T01:46:08.376694" elapsed="0.493004">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device

Also keyword teardown failed:
Several failures occurred:

1) Dictionary does not contain key 'test-device'.

2) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

3) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<var name="${idx}">1</var>
<status status="FAIL" start="2026-08-23T01:46:08.376280" elapsed="0.493482">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device

Also keyword teardown failed:
Several failures occurred:

1) Dictionary does not contain key 'test-device'.

2) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

3) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</iter>
<var>${idx}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="FAIL" start="2026-08-23T01:46:08.375936" elapsed="0.493886">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device

Also keyword teardown failed:
Several failures occurred:

1) Dictionary does not contain key 'test-device'.

2) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

3) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</for>
<doc>Verifies the netconf readiness for every odl node.</doc>
<status status="FAIL" start="2026-08-23T01:46:08.375379" elapsed="0.494571">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device

Also keyword teardown failed:
Several failures occurred:

1) Dictionary does not contain key 'test-device'.

2) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

3) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<kw name="Check_Netconf_Topology_Ready">
<for flavor="IN">
<iter>
<kw name="Verify_Netconf_Topology_Ready_For_Node">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T01:46:09.875753" 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-08-23T01:46:09.874787" elapsed="0.001081"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-08-23T01:46:09.876016" elapsed="0.000100"/>
</return>
<msg time="2026-08-23T01:46:09.876438" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${node_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-08-23T01:46:09.873603" elapsed="0.002906"/>
</kw>
<kw name="Configure_Netconf_Device">
<kw name="Configure_Device_In_Netconf" owner="NetconfKeywords">
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T01:46:09.917340" elapsed="0.000931"/>
</kw>
<msg time="2026-08-23T01:46:09.918430" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T01:46:09.916346" elapsed="0.002154"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return scandium if vanadium is at least ${lower_bound},
return calcium otherwise.</doc>
<status status="PASS" start="2026-08-23T01:46:09.915302" elapsed="0.003280"/>
</kw>
<msg time="2026-08-23T01:46:09.918626" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T01:46:09.897272" elapsed="0.021400"/>
</kw>
<msg time="2026-08-23T01:46:09.918781" level="INFO">${version} = scandium</msg>
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-08-23T01:46:09.896743" elapsed="0.022063"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T01:46:09.919731" level="INFO">${mapping} = {'DEVICE_IP': '10.30.170.114', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', '...</msg>
<var>${mapping}</var>
<arg>DEVICE_IP=${device_address}</arg>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>DEVICE_PORT=${device_port}</arg>
<arg>DEVICE_USER=${device_user}</arg>
<arg>DEVICE_PASSWORD=${device_password}</arg>
<arg>DEVICE_KEY=${device_key}</arg>
<arg>SCHEMA_DIRECTORY=${schema_directory}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-23T01:46:09.919002" elapsed="0.000757"/>
</kw>
<if>
<branch type="IF" condition="'${http_method}'=='post'">
<kw name="Post_As_Xml_Templated" owner="TemplatedRequests">
<arg>folder=${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</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="NOT RUN" start="2026-08-23T01:46:09.920338" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:09.919987" elapsed="0.000419"/>
</branch>
<branch type="ELSE">
<kw name="Put_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Put_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-08-23T01:46:09.954211" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T01:46:09.953698" elapsed="0.000542"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T01:46:09.955078" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-23T01:46:09.954793" elapsed="0.000370">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-23T01:46:09.955261" 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-08-23T01:46:09.954456" elapsed="0.000829"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T01:46:09.955928" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/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-08-23T01:46:09.955502" elapsed="0.000454"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T01:46:09.956319" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/location.uri"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-23T01:46:09.956474" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T01:46:09.956169" elapsed="0.000330"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:09.956992" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:09.956714" elapsed="0.000323"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:09.958081" level="INFO">mapping: {'DEVICE_IP': '10.30.170.114', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:09.957779" elapsed="0.000349"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T01:46:09.958550" 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-08-23T01:46:09.958289" elapsed="0.000287"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:09.959288" level="INFO">${value} = 10.30.170.114</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:09.958982" elapsed="0.000332"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:09.960075" level="INFO">${encoded} = 10.30.170.114</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-08-23T01:46:09.959817" elapsed="0.000284"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:09.960155" elapsed="0.000047"/>
</return>
<msg time="2026-08-23T01:46:09.960330" level="INFO">${encoded_value} = 10.30.170.114</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-08-23T01:46:09.959500" elapsed="0.000855"/>
</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-08-23T01:46:09.960512" elapsed="0.000245"/>
</kw>
<var name="${key}">DEVICE_IP</var>
<var name="${value}">10.30.170.114</var>
<status status="PASS" start="2026-08-23T01:46:09.958826" elapsed="0.001971"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:09.961369" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:09.961069" elapsed="0.000326"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:09.962129" level="INFO">${encoded} = test-device</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-08-23T01:46:09.961912" elapsed="0.000242"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:09.962206" elapsed="0.000032"/>
</return>
<msg time="2026-08-23T01:46:09.962360" level="INFO">${encoded_value} = test-device</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-08-23T01:46:09.961576" elapsed="0.000809"/>
</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-08-23T01:46:09.962576" elapsed="0.000393"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-23T01:46:09.960939" elapsed="0.002071"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:09.963557" level="INFO">${value} = 2830</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:09.963257" elapsed="0.000326"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:09.964365" level="INFO">${encoded} = 2830</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-08-23T01:46:09.964091" elapsed="0.000300"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:09.964442" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T01:46:09.964593" level="INFO">${encoded_value} = 2830</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-08-23T01:46:09.963762" elapsed="0.000856"/>
</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-08-23T01:46:09.964764" elapsed="0.000243"/>
</kw>
<var name="${key}">DEVICE_PORT</var>
<var name="${value}">2830</var>
<status status="PASS" start="2026-08-23T01:46:09.963126" elapsed="0.001922"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:09.965622" level="INFO">${value} = admin</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:09.965324" elapsed="0.000323"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:09.966370" level="INFO">${encoded} = admin</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-08-23T01:46:09.966160" elapsed="0.000236"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:09.966445" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T01:46:09.966596" level="INFO">${encoded_value} = admin</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-08-23T01:46:09.965827" 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-08-23T01:46:09.966769" elapsed="0.000240"/>
</kw>
<var name="${key}">DEVICE_USER</var>
<var name="${value}">admin</var>
<status status="PASS" start="2026-08-23T01:46:09.965173" elapsed="0.001877"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:09.967591" level="INFO">${value} = admin</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:09.967294" elapsed="0.000323"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:09.968346" level="INFO">${encoded} = admin</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-08-23T01:46:09.968124" elapsed="0.000248"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:09.968422" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T01:46:09.968572" level="INFO">${encoded_value} = admin</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-08-23T01:46:09.967794" elapsed="0.000803"/>
</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-08-23T01:46:09.968743" elapsed="0.000242"/>
</kw>
<var name="${key}">DEVICE_PASSWORD</var>
<var name="${value}">admin</var>
<status status="PASS" start="2026-08-23T01:46:09.967163" elapsed="0.001863"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:09.969613" level="INFO">${value} = device-key</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:09.969302" elapsed="0.000338"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:09.970366" level="INFO">${encoded} = device-key</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-08-23T01:46:09.970154" elapsed="0.000238"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:09.970441" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T01:46:09.970592" level="INFO">${encoded_value} = device-key</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-08-23T01:46:09.969820" elapsed="0.000797"/>
</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-08-23T01:46:09.970770" elapsed="0.000241"/>
</kw>
<var name="${key}">DEVICE_KEY</var>
<var name="${value}">device-key</var>
<status status="PASS" start="2026-08-23T01:46:09.969140" elapsed="0.001911"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:09.971592" level="INFO">${value} = /tmp/schema</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:09.971294" elapsed="0.000324"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:09.972360" level="INFO">${encoded} = /tmp/schema</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-08-23T01:46:09.972141" elapsed="0.000245"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:09.972436" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T01:46:09.972587" level="INFO">${encoded_value} = /tmp/schema</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-08-23T01:46:09.971797" elapsed="0.000815"/>
</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-08-23T01:46:09.972761" elapsed="0.000283"/>
</kw>
<var name="${key}">SCHEMA_DIRECTORY</var>
<var name="${value}">/tmp/schema</var>
<status status="PASS" start="2026-08-23T01:46:09.971164" elapsed="0.001923"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:09.973626" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:09.973330" elapsed="0.000322"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:09.974554" level="INFO">${encoded} = /rests</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-08-23T01:46:09.974336" elapsed="0.000243"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:09.974629" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T01:46:09.974780" level="INFO">${encoded_value} = /rests</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-08-23T01:46:09.974017" elapsed="0.000788"/>
</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-08-23T01:46:09.974968" elapsed="0.000222"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-23T01:46:09.973200" elapsed="0.002031"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-23T01:46:09.958632" elapsed="0.016634"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-23T01:46:09.975310" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T01:46:09.975472" level="INFO">${mapping_to_use} = {'DEVICE_IP': '10.30.170.114', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', '...</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-23T01:46:09.957461" elapsed="0.018037"/>
</kw>
<status status="PASS" start="2026-08-23T01:46:09.957159" elapsed="0.018371"/>
</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-08-23T01:46:09.975702" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:09.975556" elapsed="0.000202"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:09.957135" elapsed="0.018643"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T01:46:09.976760" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</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-08-23T01:46:09.976025" elapsed="0.000764"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T01:46:09.976904" elapsed="0.000054"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="PASS" start="2026-08-23T01:46:09.952689" elapsed="0.024508"/>
</kw>
<msg time="2026-08-23T01:46:09.977287" 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-08-23T01:46:09.939167" elapsed="0.038221"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:10.000438" elapsed="0.000036"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:10.032436" elapsed="0.000071"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:10.055024" 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-08-23T01:46:10.055338" 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-08-23T01:46:10.055665" elapsed="0.000030"/>
</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-08-23T01:46:10.056390" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:10.056102" elapsed="0.000374"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:10.056074" elapsed="0.000497"/>
</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-08-23T01:46:10.056781" elapsed="0.000046"/>
</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-08-23T01:46:10.057144" elapsed="0.000046"/>
</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-08-23T01:46:10.057477" elapsed="0.000045"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T01:46:10.056024" elapsed="0.001624"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T01:46:10.055824" elapsed="0.001891"/>
</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-08-23T01:46:10.057892" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T01:46:10.058057" elapsed="0.000023"/>
</return>
<msg time="2026-08-23T01:46:10.058248" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</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-08-23T01:46:09.934681" elapsed="0.123599"/>
</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-08-23T01:46:10.086921" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/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-08-23T01:46:10.086495" elapsed="0.000455"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T01:46:10.087978" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/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-08-23T01:46:10.087656" elapsed="0.000408">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/data.xml' does not exist.</status>
</kw>
<msg time="2026-08-23T01:46:10.088161" 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-08-23T01:46:10.087164" elapsed="0.001021"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T01:46:10.088797" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/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-08-23T01:46:10.088402" elapsed="0.000422"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T01:46:10.089202" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/data.xml"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/data.xml&lt;/a&gt;'.</msg>
<msg time="2026-08-23T01:46:10.089364" level="INFO">${template} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;$DEVICE_NAME&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;$DEVICE_IP&lt;/host&gt;
    &lt;port&gt;$DEVI...</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T01:46:10.089056" elapsed="0.000337"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:10.089873" level="INFO">&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;$DEVICE_NAME&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;$DEVICE_IP&lt;/host&gt;
    &lt;port&gt;$DEVICE_PORT&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;$DEVICE_USER&lt;/username&gt;
      &lt;password&gt;$DEVICE_PASSWORD&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt;
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:10.089599" elapsed="0.000329"/>
</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-08-23T01:46:10.090354" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:10.090046" elapsed="0.000368"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T01:46:10.090919" level="INFO">${mapping_to_use} = {'DEVICE_IP': '10.30.170.114', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', '...</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-08-23T01:46:10.090581" elapsed="0.000401"/>
</kw>
<status status="PASS" start="2026-08-23T01:46:10.090439" elapsed="0.000581"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:10.090025" elapsed="0.001016"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T01:46:10.092096" level="INFO">${final_text} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.114&lt;/host&gt;
    &lt;port&gt;283...</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-08-23T01:46:10.091239" elapsed="0.000893"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T01:46:10.092239" elapsed="0.000058"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="PASS" start="2026-08-23T01:46:10.085488" elapsed="0.007036"/>
</kw>
<msg time="2026-08-23T01:46:10.092617" 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-08-23T01:46:10.071557" elapsed="0.021158"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:10.115116" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:10.137140" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:10.159144" 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-08-23T01:46:10.159386" 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-08-23T01:46:10.159580" 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-08-23T01:46:10.160160" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:10.159898" elapsed="0.000347"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:10.159883" elapsed="0.000447"/>
</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-08-23T01:46:10.160542" elapsed="0.000045"/>
</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-08-23T01:46:10.160897" elapsed="0.000049"/>
</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-08-23T01:46:10.161232" elapsed="0.000044"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T01:46:10.159850" elapsed="0.001549"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T01:46:10.159703" elapsed="0.001756"/>
</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-08-23T01:46:10.161607" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T01:46:10.161758" elapsed="0.000018"/>
</return>
<msg time="2026-08-23T01:46:10.161906" level="INFO">${data} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.114&lt;/host&gt;
    &lt;port&gt;283...</msg>
<var>${data}</var>
<arg>folder=${folder}</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-08-23T01:46:10.068587" elapsed="0.093382"/>
</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-08-23T01:46:10.164586" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/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-08-23T01:46:10.164055" elapsed="0.000652">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-23T01:46:10.164904" 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-08-23T01:46:10.162708" elapsed="0.002224"/>
</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-08-23T01:46:10.165396" elapsed="0.000074"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:10.165046" elapsed="0.000505"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T01:46:10.166795" 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-08-23T01:46:10.166156" elapsed="0.000694"/>
</kw>
<status status="PASS" start="2026-08-23T01:46:10.165578" elapsed="0.001377"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:10.165026" elapsed="0.001955"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T01:46:10.170026" 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-08-23T01:46:10.167133" elapsed="0.002920"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-23T01:46:10.170151" elapsed="0.000032"/>
</return>
<msg time="2026-08-23T01:46:10.170312" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-23T01:46:10.162363" elapsed="0.007973"/>
</kw>
<kw name="Put_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:10.172172" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:10.171667" elapsed="0.000566"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:10.172884" level="INFO">&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.114&lt;/host&gt;
    &lt;port&gt;2830&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;admin&lt;/username&gt;
      &lt;password&gt;admin&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt;</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:10.172399" elapsed="0.000554"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:10.173592" 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-08-23T01:46:10.173118" elapsed="0.000534"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:10.174321" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:10.173815" elapsed="0.000566"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-08-23T01:46:10.175931" 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-08-23T01:46:10.175325" elapsed="0.000704"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-08-23T01:46:10.176939" 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-08-23T01:46:10.176327" elapsed="0.000711"/>
</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-08-23T01:46:10.177297" elapsed="0.000498"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:10.178898" 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-08-23T01:46:10.178173" elapsed="0.000923"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-08-23T01:46:10.179182" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T01:46:10.179456" 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-08-23T01:46:10.174600" elapsed="0.004882"/>
</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-08-23T01:46:10.193024" level="INFO">PUT Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Content-Length': '439', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.114&lt;/host&gt;
    &lt;port&gt;2830&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;admin&lt;/username&gt;
      &lt;password&gt;admin&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt; 
 </msg>
<msg time="2026-08-23T01:46:10.193143" level="INFO">PUT Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 status=404, reason=Not Found 
 headers={'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:10.193257" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</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-08-23T01:46:10.187717" elapsed="0.006426">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</kw>
<status status="FAIL" start="2026-08-23T01:46:10.179591" elapsed="0.014723">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</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-08-23T01:46:10.194538" elapsed="0.000075"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:10.194350" elapsed="0.000391"/>
</branch>
<status status="FAIL" start="2026-08-23T01:46:10.179571" elapsed="0.015210">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</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-08-23T01:46:10.195292" elapsed="0.000027"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T01:46:10.195440" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T01:46:10.195403" elapsed="0.000124"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:10.195385" elapsed="0.000167"/>
</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-08-23T01:46:10.195696" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T01:46:10.195801" elapsed="0.000016"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>content_type=${content_type}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</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-08-23T01:46:10.170742" elapsed="0.025200">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T01:46:10.196019" elapsed="0.000016"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>extension=xml</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>content_type=${HEADERS_XML}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>endline=${\n}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve URI and data from folder, call Put_To_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-23T01:46:09.923389" elapsed="0.272733">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=response</arg>
<arg>mapping=${mapping}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:10.196419" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:10.196234" elapsed="0.000258"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:10.196216" elapsed="0.000299"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T01:46:10.196548" elapsed="0.000014"/>
</return>
<arg>folder=${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Add arguments sensible for XML data, return Put_Templated response text.
Optionally, verification against response.xml (no iteration) is called.</doc>
<status status="FAIL" start="2026-08-23T01:46:09.920679" elapsed="0.275972">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</kw>
<status status="FAIL" start="2026-08-23T01:46:09.920445" elapsed="0.276276">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</branch>
<status status="FAIL" start="2026-08-23T01:46:09.919958" elapsed="0.276793">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</if>
<kw name="Set To Dictionary" owner="Collections">
<arg>${NetconfKeywords__mounted_device_types}</arg>
<arg>${device_name}</arg>
<arg>${device_type}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:10.196949" elapsed="0.000024"/>
</kw>
<arg>${device_name}</arg>
<arg>device_type=full-uri-device</arg>
<arg>device_port=${DEVICE_PORT}</arg>
<arg>device_address=${device_ip}</arg>
<arg>device_user=admin</arg>
<arg>device_password=admin</arg>
<arg>session=${session}</arg>
<doc>Tell Netconf about the specified device so it can add it into its configuration.</doc>
<status status="FAIL" start="2026-08-23T01:46:09.879063" elapsed="0.318010">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</kw>
<arg>${DEVICE_NAME}</arg>
<arg>${session}</arg>
<arg>${ODL_SYSTEM_${node_index}_IP}</arg>
<doc>Configures the device via REST api.</doc>
<status status="FAIL" start="2026-08-23T01:46:09.876956" elapsed="0.320233">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<var>&amp;{mapping}</var>
<arg>DEVICE_NAME=${DEVICE_NAME}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:10.197365" elapsed="0.000022"/>
</kw>
<kw name="Wait_Netconf_Device_Mounted">
<arg>${DEVICE_NAME}</arg>
<arg>${session}</arg>
<arg>${mapping}</arg>
<doc>Checks weather the device was mounted.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:10.197566" elapsed="0.000023"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:10.209445" elapsed="0.000041"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<var>${mod_session}</var>
<arg>member_index=${idx}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:10.210022" elapsed="0.000034"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5x</arg>
<arg>3s</arg>
<arg>TemplatedRequests.Get_As_Xml_Templated</arg>
<arg>${NETCONF_FOLDER}${/}${version}${/}netconf-state</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${mod_session}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:10.210255" elapsed="0.000021"/>
</kw>
<var name="${idx}"/>
<status status="NOT RUN" start="2026-08-23T01:46:10.209726" elapsed="0.000596"/>
</iter>
<var>${idx}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="NOT RUN" start="2026-08-23T01:46:10.209567" elapsed="0.000781"/>
</for>
<kw name="Remove_Netconf_Device" type="TEARDOWN">
<kw name="Remove_Device_From_Netconf" owner="NetconfKeywords">
<kw name="Pop From Dictionary" owner="Collections">
<msg time="2026-08-23T01:46:10.211769" level="INFO">${device_type} = None</msg>
<msg time="2026-08-23T01:46:10.211812" level="FAIL">Dictionary does not contain key 'test-device'.</msg>
<var>${device_type}</var>
<arg>${NetconfKeywords__mounted_device_types}</arg>
<arg>${device_name}</arg>
<doc>Pops the given ``key`` from the ``dictionary`` and returns its value.</doc>
<status status="FAIL" start="2026-08-23T01:46:10.211484" elapsed="0.000400">Dictionary does not contain key 'test-device'.</status>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T01:46:10.212486" level="INFO">${mapping} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping}</var>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-23T01:46:10.212060" elapsed="0.000453"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T01:46:10.232788" elapsed="0.000876"/>
</kw>
<msg time="2026-08-23T01:46:10.233916" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T01:46:10.232431" elapsed="0.001553"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return scandium if vanadium is at least ${lower_bound},
return calcium otherwise.</doc>
<status status="PASS" start="2026-08-23T01:46:10.232018" elapsed="0.002042"/>
</kw>
<msg time="2026-08-23T01:46:10.234102" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T01:46:10.221396" elapsed="0.012764"/>
</kw>
<msg time="2026-08-23T01:46:10.234267" level="INFO">${version} = scandium</msg>
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-08-23T01:46:10.221048" elapsed="0.013244"/>
</kw>
<kw name="Delete_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-08-23T01:46:10.278131" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T01:46:10.277467" elapsed="0.000775"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T01:46:10.279829" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-23T01:46:10.279333" elapsed="0.000628">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-23T01:46:10.280086" 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-08-23T01:46:10.278566" elapsed="0.001623"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T01:46:10.281580" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None/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-08-23T01:46:10.280527" elapsed="0.001160"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T01:46:10.282363" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-23T01:46:10.282585" level="INFO">${template} = None</msg>
<msg time="2026-08-23T01:46:10.282673" level="FAIL">FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="FAIL" start="2026-08-23T01:46:10.282140" elapsed="0.000636">FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'</status>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:10.283778" level="INFO">None</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:10.283288" elapsed="0.000567"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:10.285774" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:10.285512" elapsed="0.000308"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T01:46:10.286319" 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-08-23T01:46:10.286038" elapsed="0.000307"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:10.287239" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:10.286923" elapsed="0.000342"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:10.288034" level="INFO">${encoded} = test-device</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-08-23T01:46:10.287796" elapsed="0.000264"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:10.288110" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T01:46:10.288263" level="INFO">${encoded_value} = test-device</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-08-23T01:46:10.287450" elapsed="0.000838"/>
</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-08-23T01:46:10.288436" elapsed="0.000225"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-23T01:46:10.286693" elapsed="0.002009"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:10.289299" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:10.288999" elapsed="0.000326"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:10.290081" level="INFO">${encoded} = /rests</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-08-23T01:46:10.289866" elapsed="0.000240"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:10.290156" elapsed="0.000049"/>
</return>
<msg time="2026-08-23T01:46:10.290330" level="INFO">${encoded_value} = /rests</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-08-23T01:46:10.289504" elapsed="0.000850"/>
</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-08-23T01:46:10.290503" elapsed="0.001490"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-23T01:46:10.288815" elapsed="0.003221"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-23T01:46:10.286443" elapsed="0.005649"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-23T01:46:10.292163" elapsed="0.000073"/>
</return>
<msg time="2026-08-23T01:46:10.292539" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-23T01:46:10.284685" elapsed="0.007944"/>
</kw>
<status status="PASS" start="2026-08-23T01:46:10.284030" elapsed="0.008676"/>
</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-08-23T01:46:10.293048" elapsed="0.000086"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:10.292792" elapsed="0.000422"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:10.284008" elapsed="0.009281"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T01:46:10.294328" level="INFO">${final_text} = None</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-08-23T01:46:10.293436" elapsed="0.001151"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T01:46:10.294861" elapsed="0.000034"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None/${file_name}.</doc>
<status status="FAIL" start="2026-08-23T01:46:10.276480" elapsed="0.018602">FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'</status>
</kw>
<msg time="2026-08-23T01:46:10.295144" 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="FAIL" start="2026-08-23T01:46:10.263579" elapsed="0.031627"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:10.308233" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:10.320962" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:10.333534" 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-08-23T01:46:10.333729" 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-08-23T01:46:10.333922" 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-08-23T01:46:10.334333" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:10.334190" elapsed="0.000199"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:10.334175" 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-08-23T01:46:10.334547" 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-08-23T01:46:10.334711" 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-08-23T01:46:10.334895" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T01:46:10.334144" elapsed="0.000807"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T01:46:10.334001" elapsed="0.000976"/>
</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-08-23T01:46:10.335117" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T01:46:10.335194" elapsed="0.000018"/>
</return>
<msg time="2026-08-23T01:46:10.335353" level="INFO">${uri} = None</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=${location}</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="FAIL" start="2026-08-23T01:46:10.259239" elapsed="0.076141">FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'</status>
</kw>
<kw name="Delete_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:10.336514" level="INFO">None</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:10.336263" elapsed="0.000296"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:46:10.342305" level="INFO">DELETE Request : url=http://10.30.170.114:8181/ 
 path_url=/ 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Length': '0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:10.342353" level="INFO">DELETE Response : url=http://10.30.170.114:8181/ 
 status=404, reason=Not Found 
 headers={'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:10.342482" level="INFO">${response} = None</msg>
<msg time="2026-08-23T01:46:10.342525" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:46:10.338695" elapsed="0.004185">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/</status>
</kw>
<status status="FAIL" start="2026-08-23T01:46:10.336626" elapsed="0.006332">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/</status>
</branch>
<branch type="ELSE">
<kw name="DELETE On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:10.343141" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:10.342991" elapsed="0.000212"/>
</branch>
<status status="FAIL" start="2026-08-23T01:46:10.336607" elapsed="0.006619">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/</status>
</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-08-23T01:46:10.347267" level="FAIL">Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="FAIL" start="2026-08-23T01:46:10.344466" elapsed="0.002871">Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<status status="FAIL" start="2026-08-23T01:46:10.344234" elapsed="0.003171">Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</branch>
<status status="FAIL" start="2026-08-23T01:46:10.344209" elapsed="0.003229">Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:10.350325" level="FAIL">Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="FAIL" start="2026-08-23T01:46:10.347735" elapsed="0.002625">Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</status>
</kw>
<status status="FAIL" start="2026-08-23T01:46:10.347510" elapsed="0.002914">Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</status>
</branch>
<status status="FAIL" start="2026-08-23T01:46:10.347493" elapsed="0.002963">Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</status>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T01:46:10.351065" 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-08-23T01:46:10.350633" elapsed="0.000459"/>
</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-08-23T01:46:10.351397" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:10.351163" elapsed="0.000293"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T01:46:10.352064" 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-08-23T01:46:10.351636" elapsed="0.000455"/>
</kw>
<status status="PASS" start="2026-08-23T01:46:10.351481" elapsed="0.000646"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:10.351145" elapsed="0.001005"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T01:46:10.352682" 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-08-23T01:46:10.352305" 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-08-23T01:46:10.353033" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:10.352778" elapsed="0.000313"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T01:46:10.353671" 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-08-23T01:46:10.353273" elapsed="0.000425"/>
</kw>
<status status="PASS" start="2026-08-23T01:46:10.353116" elapsed="0.000617"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:10.352760" elapsed="0.000995"/>
</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-08-23T01:46:10.353942" elapsed="0.000498"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-08-23T01:46:10.355021" 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-08-23T01:46:10.354610" elapsed="0.000438"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<msg time="2026-08-23T01:46:10.360822" level="FAIL">Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</msg>
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="FAIL" start="2026-08-23T01:46:10.355208" elapsed="0.005663">Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</status>
</kw>
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_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="FAIL" start="2026-08-23T01:46:10.343734" elapsed="0.017279">Several failures occurred:

1) Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'

2) Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'

3) Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</status>
</kw>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-08-23T01:46:10.361076" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T01:46:10.363480" level="INFO">${response_text} = None</msg>
<msg time="2026-08-23T01:46:10.363510" level="FAIL">Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>session=${session}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>DELETE resource at URI, check status_code and return response text..</doc>
<status status="FAIL" start="2026-08-23T01:46:10.335648" elapsed="0.027891">Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-08-23T01:46:10.363606" elapsed="0.000026"/>
</return>
<arg>${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>${mapping}</arg>
<arg>session=${session}</arg>
<arg>location=${location}</arg>
<doc>Resolve URI from folder, issue DELETE request.</doc>
<status status="FAIL" start="2026-08-23T01:46:10.234510" elapsed="0.129275">Several failures occurred:

1) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

2) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Tell Netconf to deconfigure the specified device</doc>
<status status="FAIL" start="2026-08-23T01:46:10.211034" elapsed="0.152944">Several failures occurred:

1) Dictionary does not contain key 'test-device'.

2) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

3) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<arg>${DEVICE_NAME}</arg>
<arg>${session}</arg>
<doc>Removes configured device</doc>
<status status="FAIL" start="2026-08-23T01:46:10.210544" elapsed="0.153565">Several failures occurred:

1) Dictionary does not contain key 'test-device'.

2) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

3) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<arg>${idx}</arg>
<doc>Netconf readines for a node is done by creating a netconf device connected to that node
and performing GET operation got from the device's mount point.</doc>
<status status="FAIL" start="2026-08-23T01:46:09.872085" elapsed="0.492106">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device

Also keyword teardown failed:
Several failures occurred:

1) Dictionary does not contain key 'test-device'.

2) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

3) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<var name="${idx}">1</var>
<status status="FAIL" start="2026-08-23T01:46:09.871644" elapsed="0.492610">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device

Also keyword teardown failed:
Several failures occurred:

1) Dictionary does not contain key 'test-device'.

2) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

3) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</iter>
<var>${idx}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="FAIL" start="2026-08-23T01:46:09.871288" elapsed="0.493029">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device

Also keyword teardown failed:
Several failures occurred:

1) Dictionary does not contain key 'test-device'.

2) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

3) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</for>
<doc>Verifies the netconf readiness for every odl node.</doc>
<status status="FAIL" start="2026-08-23T01:46:09.870681" elapsed="0.493737">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device

Also keyword teardown failed:
Several failures occurred:

1) Dictionary does not contain key 'test-device'.

2) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

3) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<kw name="Check_Netconf_Topology_Ready">
<for flavor="IN">
<iter>
<kw name="Verify_Netconf_Topology_Ready_For_Node">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T01:46:11.369205" 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-08-23T01:46:11.368371" elapsed="0.000906"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-08-23T01:46:11.369403" elapsed="0.000082"/>
</return>
<msg time="2026-08-23T01:46:11.369764" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${node_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-08-23T01:46:11.367496" elapsed="0.002324"/>
</kw>
<kw name="Configure_Netconf_Device">
<kw name="Configure_Device_In_Netconf" owner="NetconfKeywords">
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T01:46:11.398058" elapsed="0.000914"/>
</kw>
<msg time="2026-08-23T01:46:11.399122" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T01:46:11.397569" elapsed="0.001616"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return scandium if vanadium is at least ${lower_bound},
return calcium otherwise.</doc>
<status status="PASS" start="2026-08-23T01:46:11.397178" elapsed="0.002083"/>
</kw>
<msg time="2026-08-23T01:46:11.399303" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T01:46:11.388551" elapsed="0.010797"/>
</kw>
<msg time="2026-08-23T01:46:11.399449" level="INFO">${version} = scandium</msg>
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-08-23T01:46:11.388219" elapsed="0.011255"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T01:46:11.400411" level="INFO">${mapping} = {'DEVICE_IP': '10.30.170.114', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', '...</msg>
<var>${mapping}</var>
<arg>DEVICE_IP=${device_address}</arg>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>DEVICE_PORT=${device_port}</arg>
<arg>DEVICE_USER=${device_user}</arg>
<arg>DEVICE_PASSWORD=${device_password}</arg>
<arg>DEVICE_KEY=${device_key}</arg>
<arg>SCHEMA_DIRECTORY=${schema_directory}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-23T01:46:11.399639" elapsed="0.000803"/>
</kw>
<if>
<branch type="IF" condition="'${http_method}'=='post'">
<kw name="Post_As_Xml_Templated" owner="TemplatedRequests">
<arg>folder=${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</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="NOT RUN" start="2026-08-23T01:46:11.401312" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:11.400663" elapsed="0.000720"/>
</branch>
<branch type="ELSE">
<kw name="Put_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Put_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-08-23T01:46:11.434706" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T01:46:11.434323" elapsed="0.000411"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T01:46:11.435574" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-23T01:46:11.435306" elapsed="0.000352">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-23T01:46:11.435752" 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-08-23T01:46:11.434966" elapsed="0.000810"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T01:46:11.436440" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/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-08-23T01:46:11.436034" elapsed="0.000433"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T01:46:11.436821" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/location.uri"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-23T01:46:11.437003" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T01:46:11.436680" elapsed="0.000349"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:11.437485" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:11.437237" 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-08-23T01:46:11.438573" level="INFO">mapping: {'DEVICE_IP': '10.30.170.114', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:11.438314" elapsed="0.000305"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T01:46:11.439072" 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-08-23T01:46:11.438773" elapsed="0.000325"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:11.439758" level="INFO">${value} = 10.30.170.114</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:11.439462" elapsed="0.000334"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:11.440561" level="INFO">${encoded} = 10.30.170.114</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-08-23T01:46:11.440335" elapsed="0.000251"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:11.440637" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T01:46:11.440791" level="INFO">${encoded_value} = 10.30.170.114</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-08-23T01:46:11.440010" 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-08-23T01:46:11.440997" elapsed="0.000248"/>
</kw>
<var name="${key}">DEVICE_IP</var>
<var name="${value}">10.30.170.114</var>
<status status="PASS" start="2026-08-23T01:46:11.439329" elapsed="0.001957"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:11.441857" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:11.441537" elapsed="0.000347"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:11.442588" level="INFO">${encoded} = test-device</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-08-23T01:46:11.442378" elapsed="0.000235"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:11.442663" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T01:46:11.442814" level="INFO">${encoded_value} = test-device</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-08-23T01:46:11.442065" elapsed="0.000788"/>
</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-08-23T01:46:11.443041" elapsed="0.000233"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-23T01:46:11.441402" elapsed="0.001913"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:11.444056" level="INFO">${value} = 2830</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:11.443708" elapsed="0.000374"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:11.444782" level="INFO">${encoded} = 2830</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-08-23T01:46:11.444574" elapsed="0.000234"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:11.444873" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T01:46:11.445026" level="INFO">${encoded_value} = 2830</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-08-23T01:46:11.444262" elapsed="0.000788"/>
</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-08-23T01:46:11.445197" elapsed="0.000221"/>
</kw>
<var name="${key}">DEVICE_PORT</var>
<var name="${value}">2830</var>
<status status="PASS" start="2026-08-23T01:46:11.443430" elapsed="0.002029"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:11.446014" level="INFO">${value} = admin</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:11.445701" elapsed="0.000338"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:11.446750" level="INFO">${encoded} = admin</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-08-23T01:46:11.446527" elapsed="0.000248"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:11.446825" elapsed="0.000044"/>
</return>
<msg time="2026-08-23T01:46:11.447024" level="INFO">${encoded_value} = admin</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-08-23T01:46:11.446217" 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-08-23T01:46:11.447210" elapsed="0.000224"/>
</kw>
<var name="${key}">DEVICE_USER</var>
<var name="${value}">admin</var>
<status status="PASS" start="2026-08-23T01:46:11.445571" elapsed="0.001903"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:11.448085" level="INFO">${value} = admin</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:11.447730" elapsed="0.000381"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:11.448811" level="INFO">${encoded} = admin</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-08-23T01:46:11.448602" elapsed="0.000250"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:11.448904" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T01:46:11.449056" level="INFO">${encoded_value} = admin</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-08-23T01:46:11.448289" elapsed="0.000792"/>
</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-08-23T01:46:11.449227" elapsed="0.000226"/>
</kw>
<var name="${key}">DEVICE_PASSWORD</var>
<var name="${value}">admin</var>
<status status="PASS" start="2026-08-23T01:46:11.447587" elapsed="0.001907"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:11.450092" level="INFO">${value} = device-key</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:11.449773" elapsed="0.000346"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:11.450823" level="INFO">${encoded} = device-key</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-08-23T01:46:11.450615" elapsed="0.000249"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:11.450914" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T01:46:11.451064" level="INFO">${encoded_value} = device-key</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-08-23T01:46:11.450297" elapsed="0.000797"/>
</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-08-23T01:46:11.451240" elapsed="0.000221"/>
</kw>
<var name="${key}">DEVICE_KEY</var>
<var name="${value}">device-key</var>
<status status="PASS" start="2026-08-23T01:46:11.449624" elapsed="0.001876"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:11.452077" level="INFO">${value} = /tmp/schema</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:11.451750" elapsed="0.000353"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:11.452811" level="INFO">${encoded} = /tmp/schema</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-08-23T01:46:11.452600" elapsed="0.000251"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:11.452901" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T01:46:11.453052" level="INFO">${encoded_value} = /tmp/schema</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-08-23T01:46:11.452280" 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-08-23T01:46:11.453222" elapsed="0.000263"/>
</kw>
<var name="${key}">SCHEMA_DIRECTORY</var>
<var name="${value}">/tmp/schema</var>
<status status="PASS" start="2026-08-23T01:46:11.451612" elapsed="0.001914"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:11.454088" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:11.453766" elapsed="0.000348"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:11.454989" level="INFO">${encoded} = /rests</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-08-23T01:46:11.454763" elapsed="0.000252"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:11.455065" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T01:46:11.455215" level="INFO">${encoded_value} = /rests</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-08-23T01:46:11.454291" elapsed="0.000948"/>
</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-08-23T01:46:11.455385" elapsed="0.000219"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-23T01:46:11.453637" elapsed="0.002007"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-23T01:46:11.439149" elapsed="0.016530"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-23T01:46:11.455744" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T01:46:11.455928" level="INFO">${mapping_to_use} = {'DEVICE_IP': '10.30.170.114', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', '...</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-23T01:46:11.437993" elapsed="0.017962"/>
</kw>
<status status="PASS" start="2026-08-23T01:46:11.437650" elapsed="0.018337"/>
</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-08-23T01:46:11.456158" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:11.456012" elapsed="0.000201"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:11.437625" elapsed="0.018608"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T01:46:11.457149" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</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-08-23T01:46:11.456428" elapsed="0.000750"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T01:46:11.457277" elapsed="0.000053"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="PASS" start="2026-08-23T01:46:11.433326" elapsed="0.024227"/>
</kw>
<msg time="2026-08-23T01:46:11.457643" 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-08-23T01:46:11.419747" elapsed="0.037992"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:11.479976" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:11.501962" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:11.524103" 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-08-23T01:46:11.524345" 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-08-23T01:46:11.524634" 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-08-23T01:46:11.525231" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:11.524963" elapsed="0.000357"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:11.524948" elapsed="0.000460"/>
</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-08-23T01:46:11.525610" elapsed="0.000045"/>
</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-08-23T01:46:11.525966" elapsed="0.000046"/>
</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-08-23T01:46:11.526296" elapsed="0.000044"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T01:46:11.524917" elapsed="0.001547"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T01:46:11.524766" elapsed="0.001759"/>
</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-08-23T01:46:11.526675" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T01:46:11.526829" elapsed="0.000042"/>
</return>
<msg time="2026-08-23T01:46:11.526977" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</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-08-23T01:46:11.415317" elapsed="0.111686"/>
</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-08-23T01:46:11.554613" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/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-08-23T01:46:11.554234" elapsed="0.000408"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T01:46:11.555437" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/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-08-23T01:46:11.555214" elapsed="0.000289">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/data.xml' does not exist.</status>
</kw>
<msg time="2026-08-23T01:46:11.555596" 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-08-23T01:46:11.554866" elapsed="0.000754"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T01:46:11.556250" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/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-08-23T01:46:11.555854" elapsed="0.000422"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T01:46:11.556619" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/data.xml"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/data.xml&lt;/a&gt;'.</msg>
<msg time="2026-08-23T01:46:11.556746" level="INFO">${template} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;$DEVICE_NAME&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;$DEVICE_IP&lt;/host&gt;
    &lt;port&gt;$DEVI...</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T01:46:11.556483" elapsed="0.000291"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:11.557252" level="INFO">&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;$DEVICE_NAME&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;$DEVICE_IP&lt;/host&gt;
    &lt;port&gt;$DEVICE_PORT&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;$DEVICE_USER&lt;/username&gt;
      &lt;password&gt;$DEVICE_PASSWORD&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt;
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:11.557007" elapsed="0.000297"/>
</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-08-23T01:46:11.557718" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:11.557421" elapsed="0.000356"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T01:46:11.558437" level="INFO">${mapping_to_use} = {'DEVICE_IP': '10.30.170.114', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', '...</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-08-23T01:46:11.557972" elapsed="0.000528"/>
</kw>
<status status="PASS" start="2026-08-23T01:46:11.557803" elapsed="0.000736"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:11.557399" elapsed="0.001162"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T01:46:11.559501" level="INFO">${final_text} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.114&lt;/host&gt;
    &lt;port&gt;283...</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-08-23T01:46:11.558759" elapsed="0.000773"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T01:46:11.559630" elapsed="0.000054"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="PASS" start="2026-08-23T01:46:11.553244" elapsed="0.006688"/>
</kw>
<msg time="2026-08-23T01:46:11.560024" 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-08-23T01:46:11.539874" elapsed="0.020246"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:11.582068" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:11.604013" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:11.626226" 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-08-23T01:46:11.626472" 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-08-23T01:46:11.626661" 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-08-23T01:46:11.627258" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:11.626995" elapsed="0.000347"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:11.626979" elapsed="0.000451"/>
</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-08-23T01:46:11.627632" elapsed="0.000046"/>
</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-08-23T01:46:11.627988" elapsed="0.000046"/>
</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-08-23T01:46:11.628319" elapsed="0.000045"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T01:46:11.626950" elapsed="0.001540"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T01:46:11.626784" elapsed="0.001767"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:11.628698" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T01:46:11.628873" elapsed="0.000019"/>
</return>
<msg time="2026-08-23T01:46:11.629003" level="INFO">${data} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.114&lt;/host&gt;
    &lt;port&gt;283...</msg>
<var>${data}</var>
<arg>folder=${folder}</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-08-23T01:46:11.537047" elapsed="0.092024"/>
</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-08-23T01:46:11.631707" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/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-08-23T01:46:11.631154" elapsed="0.000673">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-23T01:46:11.632021" 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-08-23T01:46:11.629808" elapsed="0.002238"/>
</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-08-23T01:46:11.632502" elapsed="0.000075"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:11.632156" elapsed="0.000502"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T01:46:11.633952" 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-08-23T01:46:11.633238" elapsed="0.000755"/>
</kw>
<status status="PASS" start="2026-08-23T01:46:11.632685" elapsed="0.001388"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:11.632136" elapsed="0.001961"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T01:46:11.637017" 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-08-23T01:46:11.634247" elapsed="0.002797"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-23T01:46:11.637143" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T01:46:11.637301" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-23T01:46:11.629465" elapsed="0.007860"/>
</kw>
<kw name="Put_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:11.639195" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:11.638672" elapsed="0.000585"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:11.639927" level="INFO">&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.114&lt;/host&gt;
    &lt;port&gt;2830&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;admin&lt;/username&gt;
      &lt;password&gt;admin&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt;</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:11.639421" elapsed="0.000574"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:11.640637" 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-08-23T01:46:11.640158" elapsed="0.000539"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:11.641353" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:11.640876" elapsed="0.000537"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-08-23T01:46:11.642992" 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-08-23T01:46:11.642323" elapsed="0.000769"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-08-23T01:46:11.643962" 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-08-23T01:46:11.643358" elapsed="0.000706"/>
</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-08-23T01:46:11.644323" elapsed="0.000485"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:11.646089" 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-08-23T01:46:11.645133" elapsed="0.001156"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-08-23T01:46:11.646376" elapsed="0.000032"/>
</return>
<msg time="2026-08-23T01:46:11.646651" 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-08-23T01:46:11.641626" elapsed="0.005051"/>
</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-08-23T01:46:11.659827" level="INFO">PUT Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Content-Length': '439', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.114&lt;/host&gt;
    &lt;port&gt;2830&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;admin&lt;/username&gt;
      &lt;password&gt;admin&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt; 
 </msg>
<msg time="2026-08-23T01:46:11.659965" level="INFO">PUT Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 status=404, reason=Not Found 
 headers={'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:11.660074" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</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-08-23T01:46:11.655085" elapsed="0.005802">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</kw>
<status status="FAIL" start="2026-08-23T01:46:11.646818" elapsed="0.014233">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</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-08-23T01:46:11.661273" elapsed="0.000076"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:11.661087" elapsed="0.000392"/>
</branch>
<status status="FAIL" start="2026-08-23T01:46:11.646797" elapsed="0.014709">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</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-08-23T01:46:11.662014" elapsed="0.000028"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T01:46:11.662165" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-08-23T01:46:11.662126" elapsed="0.000127"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:11.662107" elapsed="0.000169"/>
</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-08-23T01:46:11.662417" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T01:46:11.662523" elapsed="0.000017"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>content_type=${content_type}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</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-08-23T01:46:11.637729" elapsed="0.024923">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T01:46:11.662729" elapsed="0.000016"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>extension=xml</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>content_type=${HEADERS_XML}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>endline=${\n}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve URI and data from folder, call Put_To_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-23T01:46:11.404359" elapsed="0.258491">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=response</arg>
<arg>mapping=${mapping}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:11.663143" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:11.662967" elapsed="0.000243"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:11.662950" elapsed="0.000283"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T01:46:11.663265" elapsed="0.000014"/>
</return>
<arg>folder=${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Add arguments sensible for XML data, return Put_Templated response text.
Optionally, verification against response.xml (no iteration) is called.</doc>
<status status="FAIL" start="2026-08-23T01:46:11.401642" elapsed="0.261727">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</kw>
<status status="FAIL" start="2026-08-23T01:46:11.401411" elapsed="0.262025">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</branch>
<status status="FAIL" start="2026-08-23T01:46:11.400637" elapsed="0.262827">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</if>
<kw name="Set To Dictionary" owner="Collections">
<arg>${NetconfKeywords__mounted_device_types}</arg>
<arg>${device_name}</arg>
<arg>${device_type}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:11.663614" elapsed="0.000021"/>
</kw>
<arg>${device_name}</arg>
<arg>device_type=full-uri-device</arg>
<arg>device_port=${DEVICE_PORT}</arg>
<arg>device_address=${device_ip}</arg>
<arg>device_user=admin</arg>
<arg>device_password=admin</arg>
<arg>session=${session}</arg>
<doc>Tell Netconf about the specified device so it can add it into its configuration.</doc>
<status status="FAIL" start="2026-08-23T01:46:11.371871" elapsed="0.291858">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</kw>
<arg>${DEVICE_NAME}</arg>
<arg>${session}</arg>
<arg>${ODL_SYSTEM_${node_index}_IP}</arg>
<doc>Configures the device via REST api.</doc>
<status status="FAIL" start="2026-08-23T01:46:11.370126" elapsed="0.293732">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<var>&amp;{mapping}</var>
<arg>DEVICE_NAME=${DEVICE_NAME}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:11.664029" elapsed="0.000021"/>
</kw>
<kw name="Wait_Netconf_Device_Mounted">
<arg>${DEVICE_NAME}</arg>
<arg>${session}</arg>
<arg>${mapping}</arg>
<doc>Checks weather the device was mounted.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:11.664219" elapsed="0.000023"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:11.675038" elapsed="0.000038"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<var>${mod_session}</var>
<arg>member_index=${idx}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:11.675497" elapsed="0.000034"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5x</arg>
<arg>3s</arg>
<arg>TemplatedRequests.Get_As_Xml_Templated</arg>
<arg>${NETCONF_FOLDER}${/}${version}${/}netconf-state</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${mod_session}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:11.675746" elapsed="0.000030"/>
</kw>
<var name="${idx}"/>
<status status="NOT RUN" start="2026-08-23T01:46:11.675240" elapsed="0.000622"/>
</iter>
<var>${idx}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="NOT RUN" start="2026-08-23T01:46:11.675156" elapsed="0.000744"/>
</for>
<kw name="Remove_Netconf_Device" type="TEARDOWN">
<kw name="Remove_Device_From_Netconf" owner="NetconfKeywords">
<kw name="Pop From Dictionary" owner="Collections">
<msg time="2026-08-23T01:46:11.677822" level="INFO">${device_type} = None</msg>
<msg time="2026-08-23T01:46:11.677903" level="FAIL">Dictionary does not contain key 'test-device'.</msg>
<var>${device_type}</var>
<arg>${NetconfKeywords__mounted_device_types}</arg>
<arg>${device_name}</arg>
<doc>Pops the given ``key`` from the ``dictionary`` and returns its value.</doc>
<status status="FAIL" start="2026-08-23T01:46:11.677443" elapsed="0.000541">Dictionary does not contain key 'test-device'.</status>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T01:46:11.678863" level="INFO">${mapping} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping}</var>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-23T01:46:11.678227" elapsed="0.000676"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T01:46:11.697638" elapsed="0.000896"/>
</kw>
<msg time="2026-08-23T01:46:11.698759" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T01:46:11.697231" elapsed="0.001595"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return scandium if vanadium is at least ${lower_bound},
return calcium otherwise.</doc>
<status status="PASS" start="2026-08-23T01:46:11.696805" elapsed="0.002123"/>
</kw>
<msg time="2026-08-23T01:46:11.698971" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T01:46:11.688109" elapsed="0.010918"/>
</kw>
<msg time="2026-08-23T01:46:11.699128" level="INFO">${version} = scandium</msg>
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-08-23T01:46:11.687748" elapsed="0.011404"/>
</kw>
<kw name="Delete_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-08-23T01:46:11.742633" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T01:46:11.741862" elapsed="0.000890"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T01:46:11.744344" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-23T01:46:11.743857" elapsed="0.000595">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-23T01:46:11.744578" 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-08-23T01:46:11.743083" elapsed="0.001600"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T01:46:11.746127" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None/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-08-23T01:46:11.745074" elapsed="0.001178"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T01:46:11.746990" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-23T01:46:11.747222" level="INFO">${template} = None</msg>
<msg time="2026-08-23T01:46:11.747310" level="FAIL">FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="FAIL" start="2026-08-23T01:46:11.746631" elapsed="0.000783">FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'</status>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:11.748351" level="INFO">None</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:11.747850" elapsed="0.000562"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:11.750410" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:11.750119" elapsed="0.000344"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T01:46:11.751172" 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-08-23T01:46:11.750667" elapsed="0.000531"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:11.751977" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:11.751646" elapsed="0.000357"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:11.752744" level="INFO">${encoded} = test-device</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-08-23T01:46:11.752531" elapsed="0.000239"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:11.752820" elapsed="0.000104"/>
</return>
<msg time="2026-08-23T01:46:11.753051" level="INFO">${encoded_value} = test-device</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-08-23T01:46:11.752186" elapsed="0.000891"/>
</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-08-23T01:46:11.753226" elapsed="0.000224"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-23T01:46:11.751511" elapsed="0.001979"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:11.754049" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:11.753732" elapsed="0.000343"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:11.754821" level="INFO">${encoded} = /rests</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-08-23T01:46:11.754612" elapsed="0.000256"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:11.754920" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T01:46:11.755071" level="INFO">${encoded_value} = /rests</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-08-23T01:46:11.754270" elapsed="0.000826"/>
</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-08-23T01:46:11.755243" elapsed="0.000221"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-23T01:46:11.753602" elapsed="0.001902"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-23T01:46:11.751299" elapsed="0.004259"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-23T01:46:11.755625" elapsed="0.000071"/>
</return>
<msg time="2026-08-23T01:46:11.756025" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-23T01:46:11.749312" elapsed="0.006805"/>
</kw>
<status status="PASS" start="2026-08-23T01:46:11.748584" elapsed="0.007610"/>
</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-08-23T01:46:11.756490" elapsed="0.000084"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:11.756272" elapsed="0.000383"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:11.748564" elapsed="0.008164"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T01:46:11.757715" level="INFO">${final_text} = None</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-08-23T01:46:11.756891" elapsed="0.000931"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T01:46:11.758073" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None/${file_name}.</doc>
<status status="FAIL" start="2026-08-23T01:46:11.740866" elapsed="0.017427">FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'</status>
</kw>
<msg time="2026-08-23T01:46:11.758349" 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="FAIL" start="2026-08-23T01:46:11.728138" elapsed="0.030271"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:11.770978" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:11.784096" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:11.796461" 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-08-23T01:46:11.796652" 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-08-23T01:46:11.796823" 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-08-23T01:46:11.797252" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:11.797103" elapsed="0.000205"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:11.797088" 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-08-23T01:46:11.797472" elapsed="0.000038"/>
</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-08-23T01:46:11.797703" elapsed="0.000027"/>
</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-08-23T01:46:11.797903" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T01:46:11.797058" elapsed="0.000901"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T01:46:11.796914" elapsed="0.001128"/>
</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-08-23T01:46:11.798210" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T01:46:11.798289" elapsed="0.000015"/>
</return>
<msg time="2026-08-23T01:46:11.798452" level="INFO">${uri} = None</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=${location}</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="FAIL" start="2026-08-23T01:46:11.723819" elapsed="0.074661">FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'</status>
</kw>
<kw name="Delete_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:11.799625" level="INFO">None</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:11.799376" elapsed="0.000294"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:46:11.806027" level="INFO">DELETE Request : url=http://10.30.170.114:8181/ 
 path_url=/ 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Length': '0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:11.806075" level="INFO">DELETE Response : url=http://10.30.170.114:8181/ 
 status=404, reason=Not Found 
 headers={'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:11.806204" level="INFO">${response} = None</msg>
<msg time="2026-08-23T01:46:11.806247" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:46:11.801990" elapsed="0.004603">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/</status>
</kw>
<status status="FAIL" start="2026-08-23T01:46:11.799737" elapsed="0.006943">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/</status>
</branch>
<branch type="ELSE">
<kw name="DELETE On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:11.806889" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:11.806714" elapsed="0.000246"/>
</branch>
<status status="FAIL" start="2026-08-23T01:46:11.799719" elapsed="0.007264">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/</status>
</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-08-23T01:46:11.811142" level="FAIL">Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="FAIL" start="2026-08-23T01:46:11.808210" elapsed="0.003032">Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<status status="FAIL" start="2026-08-23T01:46:11.807990" elapsed="0.003346">Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</branch>
<status status="FAIL" start="2026-08-23T01:46:11.807970" elapsed="0.003411">Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:11.815388" level="FAIL">Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="FAIL" start="2026-08-23T01:46:11.811788" elapsed="0.003647">Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</status>
</kw>
<status status="FAIL" start="2026-08-23T01:46:11.811480" elapsed="0.004045">Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</status>
</branch>
<status status="FAIL" start="2026-08-23T01:46:11.811457" elapsed="0.004113">Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</status>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T01:46:11.816400" 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-08-23T01:46:11.815821" elapsed="0.000617"/>
</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-08-23T01:46:11.816896" elapsed="0.000040"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:11.816538" elapsed="0.000449"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T01:46:11.817821" 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-08-23T01:46:11.817239" elapsed="0.000679"/>
</kw>
<status status="PASS" start="2026-08-23T01:46:11.817021" elapsed="0.000955"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:11.816513" elapsed="0.001494"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T01:46:11.818670" 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-08-23T01:46:11.818246" elapsed="0.000451"/>
</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-08-23T01:46:11.819030" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:11.818765" elapsed="0.000323"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T01:46:11.819673" 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-08-23T01:46:11.819266" elapsed="0.000433"/>
</kw>
<status status="PASS" start="2026-08-23T01:46:11.819113" elapsed="0.000622"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:11.818748" elapsed="0.001008"/>
</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-08-23T01:46:11.819922" elapsed="0.000469"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-08-23T01:46:11.820956" 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-08-23T01:46:11.820556" elapsed="0.000427"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<msg time="2026-08-23T01:46:11.827003" level="FAIL">Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</msg>
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="FAIL" start="2026-08-23T01:46:11.821135" elapsed="0.005903">Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</status>
</kw>
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_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="FAIL" start="2026-08-23T01:46:11.807517" elapsed="0.019660">Several failures occurred:

1) Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'

2) Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'

3) Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</status>
</kw>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-08-23T01:46:11.827241" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T01:46:11.829626" level="INFO">${response_text} = None</msg>
<msg time="2026-08-23T01:46:11.829657" level="FAIL">Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>session=${session}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>DELETE resource at URI, check status_code and return response text..</doc>
<status status="FAIL" start="2026-08-23T01:46:11.798757" elapsed="0.030929">Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-08-23T01:46:11.829754" elapsed="0.000025"/>
</return>
<arg>${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>${mapping}</arg>
<arg>session=${session}</arg>
<arg>location=${location}</arg>
<doc>Resolve URI from folder, issue DELETE request.</doc>
<status status="FAIL" start="2026-08-23T01:46:11.699373" elapsed="0.130621">Several failures occurred:

1) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

2) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Tell Netconf to deconfigure the specified device</doc>
<status status="FAIL" start="2026-08-23T01:46:11.676801" elapsed="0.153364">Several failures occurred:

1) Dictionary does not contain key 'test-device'.

2) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

3) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<arg>${DEVICE_NAME}</arg>
<arg>${session}</arg>
<doc>Removes configured device</doc>
<status status="FAIL" start="2026-08-23T01:46:11.676172" elapsed="0.154119">Several failures occurred:

1) Dictionary does not contain key 'test-device'.

2) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

3) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<arg>${idx}</arg>
<doc>Netconf readines for a node is done by creating a netconf device connected to that node
and performing GET operation got from the device's mount point.</doc>
<status status="FAIL" start="2026-08-23T01:46:11.366586" elapsed="0.463790">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device

Also keyword teardown failed:
Several failures occurred:

1) Dictionary does not contain key 'test-device'.

2) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

3) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<var name="${idx}">1</var>
<status status="FAIL" start="2026-08-23T01:46:11.366179" elapsed="0.464261">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device

Also keyword teardown failed:
Several failures occurred:

1) Dictionary does not contain key 'test-device'.

2) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

3) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</iter>
<var>${idx}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="FAIL" start="2026-08-23T01:46:11.365783" elapsed="0.464727">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device

Also keyword teardown failed:
Several failures occurred:

1) Dictionary does not contain key 'test-device'.

2) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

3) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</for>
<doc>Verifies the netconf readiness for every odl node.</doc>
<status status="FAIL" start="2026-08-23T01:46:11.365218" elapsed="0.465396">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device

Also keyword teardown failed:
Several failures occurred:

1) Dictionary does not contain key 'test-device'.

2) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

3) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<kw name="Check_Netconf_Topology_Ready">
<for flavor="IN">
<iter>
<kw name="Verify_Netconf_Topology_Ready_For_Node">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T01:46:12.835362" 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-08-23T01:46:12.834563" elapsed="0.000869"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-08-23T01:46:12.835554" elapsed="0.000078"/>
</return>
<msg time="2026-08-23T01:46:12.835945" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${node_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-08-23T01:46:12.833714" elapsed="0.002289"/>
</kw>
<kw name="Configure_Netconf_Device">
<kw name="Configure_Device_In_Netconf" owner="NetconfKeywords">
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T01:46:12.864932" elapsed="0.000936"/>
</kw>
<msg time="2026-08-23T01:46:12.866018" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T01:46:12.864457" elapsed="0.001625"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return scandium if vanadium is at least ${lower_bound},
return calcium otherwise.</doc>
<status status="PASS" start="2026-08-23T01:46:12.864065" elapsed="0.002095"/>
</kw>
<msg time="2026-08-23T01:46:12.866202" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T01:46:12.855431" elapsed="0.010817"/>
</kw>
<msg time="2026-08-23T01:46:12.866350" level="INFO">${version} = scandium</msg>
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-08-23T01:46:12.855097" elapsed="0.011278"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T01:46:12.867288" level="INFO">${mapping} = {'DEVICE_IP': '10.30.170.114', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', '...</msg>
<var>${mapping}</var>
<arg>DEVICE_IP=${device_address}</arg>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>DEVICE_PORT=${device_port}</arg>
<arg>DEVICE_USER=${device_user}</arg>
<arg>DEVICE_PASSWORD=${device_password}</arg>
<arg>DEVICE_KEY=${device_key}</arg>
<arg>SCHEMA_DIRECTORY=${schema_directory}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-23T01:46:12.866539" elapsed="0.000778"/>
</kw>
<if>
<branch type="IF" condition="'${http_method}'=='post'">
<kw name="Post_As_Xml_Templated" owner="TemplatedRequests">
<arg>folder=${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</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="NOT RUN" start="2026-08-23T01:46:12.867794" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:12.867469" elapsed="0.000417"/>
</branch>
<branch type="ELSE">
<kw name="Put_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Put_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-08-23T01:46:12.901155" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T01:46:12.900735" elapsed="0.000450"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T01:46:12.902028" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-23T01:46:12.901735" elapsed="0.000378">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-23T01:46:12.902208" 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-08-23T01:46:12.901400" elapsed="0.000832"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T01:46:12.902905" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/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-08-23T01:46:12.902480" elapsed="0.000453"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T01:46:12.903284" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/location.uri"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-23T01:46:12.903443" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T01:46:12.903143" elapsed="0.000325"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:12.903952" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:12.903674" 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-08-23T01:46:12.905081" level="INFO">mapping: {'DEVICE_IP': '10.30.170.114', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:12.904732" elapsed="0.000401"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T01:46:12.905551" 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-08-23T01:46:12.905288" elapsed="0.000289"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:12.906281" level="INFO">${value} = 10.30.170.114</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:12.905976" elapsed="0.000331"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:12.907060" level="INFO">${encoded} = 10.30.170.114</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-08-23T01:46:12.906804" elapsed="0.000282"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:12.907138" elapsed="0.000032"/>
</return>
<msg time="2026-08-23T01:46:12.907293" level="INFO">${encoded_value} = 10.30.170.114</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-08-23T01:46:12.906490" 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-08-23T01:46:12.907466" elapsed="0.000242"/>
</kw>
<var name="${key}">DEVICE_IP</var>
<var name="${value}">10.30.170.114</var>
<status status="PASS" start="2026-08-23T01:46:12.905813" elapsed="0.001935"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:12.908316" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:12.908018" elapsed="0.000324"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:12.909088" level="INFO">${encoded} = test-device</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-08-23T01:46:12.908871" elapsed="0.000243"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:12.909164" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T01:46:12.909314" level="INFO">${encoded_value} = test-device</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-08-23T01:46:12.908521" elapsed="0.000818"/>
</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-08-23T01:46:12.909532" elapsed="0.000226"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-23T01:46:12.907886" elapsed="0.001913"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:12.910358" level="INFO">${value} = 2830</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:12.910061" elapsed="0.000324"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:12.911106" level="INFO">${encoded} = 2830</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-08-23T01:46:12.910894" elapsed="0.000238"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:12.911182" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T01:46:12.911336" level="INFO">${encoded_value} = 2830</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-08-23T01:46:12.910565" 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-08-23T01:46:12.911507" elapsed="0.000223"/>
</kw>
<var name="${key}">DEVICE_PORT</var>
<var name="${value}">2830</var>
<status status="PASS" start="2026-08-23T01:46:12.909930" elapsed="0.001841"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:12.912497" level="INFO">${value} = admin</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:12.912031" elapsed="0.000491"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:12.913259" level="INFO">${encoded} = admin</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-08-23T01:46:12.913050" elapsed="0.000234"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:12.913334" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T01:46:12.913484" level="INFO">${encoded_value} = admin</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-08-23T01:46:12.912704" 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-08-23T01:46:12.913654" elapsed="0.000238"/>
</kw>
<var name="${key}">DEVICE_USER</var>
<var name="${value}">admin</var>
<status status="PASS" start="2026-08-23T01:46:12.911900" elapsed="0.002033"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:12.914483" level="INFO">${value} = admin</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:12.914186" elapsed="0.000322"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:12.915222" level="INFO">${encoded} = admin</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-08-23T01:46:12.915015" elapsed="0.000233"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:12.915297" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T01:46:12.915446" level="INFO">${encoded_value} = admin</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-08-23T01:46:12.914687" elapsed="0.000784"/>
</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-08-23T01:46:12.915616" elapsed="0.000236"/>
</kw>
<var name="${key}">DEVICE_PASSWORD</var>
<var name="${value}">admin</var>
<status status="PASS" start="2026-08-23T01:46:12.914052" elapsed="0.001842"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:12.916437" level="INFO">${value} = device-key</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:12.916135" elapsed="0.000327"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:12.917208" level="INFO">${encoded} = device-key</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-08-23T01:46:12.916998" elapsed="0.000236"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:12.917283" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T01:46:12.917435" level="INFO">${encoded_value} = device-key</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-08-23T01:46:12.916644" elapsed="0.000815"/>
</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-08-23T01:46:12.917605" elapsed="0.000224"/>
</kw>
<var name="${key}">DEVICE_KEY</var>
<var name="${value}">device-key</var>
<status status="PASS" start="2026-08-23T01:46:12.916005" elapsed="0.001880"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:12.918425" level="INFO">${value} = /tmp/schema</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:12.918127" elapsed="0.000323"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:12.919174" level="INFO">${encoded} = /tmp/schema</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-08-23T01:46:12.918962" elapsed="0.000238"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:12.919250" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T01:46:12.919400" level="INFO">${encoded_value} = /tmp/schema</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-08-23T01:46:12.918632" 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-08-23T01:46:12.919572" elapsed="0.000287"/>
</kw>
<var name="${key}">SCHEMA_DIRECTORY</var>
<var name="${value}">/tmp/schema</var>
<status status="PASS" start="2026-08-23T01:46:12.917997" elapsed="0.001904"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:12.920442" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:12.920143" elapsed="0.000325"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:12.921232" level="INFO">${encoded} = /rests</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-08-23T01:46:12.921018" elapsed="0.000240"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:12.921308" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T01:46:12.921460" level="INFO">${encoded_value} = /rests</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-08-23T01:46:12.920649" elapsed="0.000836"/>
</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-08-23T01:46:12.921631" elapsed="0.000248"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-23T01:46:12.920013" elapsed="0.001907"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-23T01:46:12.905630" elapsed="0.016325"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-23T01:46:12.922001" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T01:46:12.922165" level="INFO">${mapping_to_use} = {'DEVICE_IP': '10.30.170.114', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', '...</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-23T01:46:12.904414" elapsed="0.017778"/>
</kw>
<status status="PASS" start="2026-08-23T01:46:12.904117" elapsed="0.018107"/>
</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-08-23T01:46:12.922403" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:12.922253" elapsed="0.000207"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:12.904095" elapsed="0.018385"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T01:46:12.923455" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</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-08-23T01:46:12.922692" elapsed="0.000791"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T01:46:12.923582" elapsed="0.000052"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="PASS" start="2026-08-23T01:46:12.899734" elapsed="0.024148"/>
</kw>
<msg time="2026-08-23T01:46:12.923977" 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-08-23T01:46:12.886082" elapsed="0.038000"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:12.946819" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:12.969254" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:12.995916" elapsed="0.000114"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:12.996639" elapsed="0.000054"/>
</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-08-23T01:46:12.997271" elapsed="0.000050"/>
</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-08-23T01:46:12.998693" elapsed="0.000079"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:12.998088" elapsed="0.000838"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:12.998048" elapsed="0.001081"/>
</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-08-23T01:46:12.999584" elapsed="0.000100"/>
</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-08-23T01:46:13.000365" elapsed="0.000099"/>
</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-08-23T01:46:13.001168" elapsed="0.000116"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T01:46:12.997966" elapsed="0.003620"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T01:46:12.997574" elapsed="0.004151"/>
</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-08-23T01:46:13.002116" elapsed="0.000048"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T01:46:13.002470" elapsed="0.000042"/>
</return>
<msg time="2026-08-23T01:46:13.002817" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</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-08-23T01:46:12.881611" elapsed="0.121311"/>
</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-08-23T01:46:13.032356" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/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-08-23T01:46:13.031942" elapsed="0.000443"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T01:46:13.033271" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/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-08-23T01:46:13.032960" elapsed="0.000402">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/data.xml' does not exist.</status>
</kw>
<msg time="2026-08-23T01:46:13.033459" 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-08-23T01:46:13.032601" elapsed="0.000883"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T01:46:13.034120" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/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-08-23T01:46:13.033701" elapsed="0.000447"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T01:46:13.034506" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/data.xml"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/data.xml&lt;/a&gt;'.</msg>
<msg time="2026-08-23T01:46:13.034729" level="INFO">${template} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;$DEVICE_NAME&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;$DEVICE_IP&lt;/host&gt;
    &lt;port&gt;$DEVI...</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T01:46:13.034361" elapsed="0.000397"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:13.035284" level="INFO">&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;$DEVICE_NAME&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;$DEVICE_IP&lt;/host&gt;
    &lt;port&gt;$DEVICE_PORT&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;$DEVICE_USER&lt;/username&gt;
      &lt;password&gt;$DEVICE_PASSWORD&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt;
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:13.035029" 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-08-23T01:46:13.035766" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:13.035456" elapsed="0.000370"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T01:46:13.036337" level="INFO">${mapping_to_use} = {'DEVICE_IP': '10.30.170.114', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', '...</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-08-23T01:46:13.036024" elapsed="0.000375"/>
</kw>
<status status="PASS" start="2026-08-23T01:46:13.035880" elapsed="0.000557"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:13.035435" elapsed="0.001024"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T01:46:13.037447" level="INFO">${final_text} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.114&lt;/host&gt;
    &lt;port&gt;283...</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-08-23T01:46:13.036655" elapsed="0.000822"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T01:46:13.037577" elapsed="0.000059"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="PASS" start="2026-08-23T01:46:13.030941" elapsed="0.006954"/>
</kw>
<msg time="2026-08-23T01:46:13.037991" 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-08-23T01:46:13.017391" elapsed="0.020698"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:13.060809" elapsed="0.000050"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:13.082979" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:13.104935" 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-08-23T01:46:13.105175" 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-08-23T01:46:13.105364" 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-08-23T01:46:13.105937" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:13.105660" elapsed="0.000363"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:13.105644" elapsed="0.000465"/>
</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-08-23T01:46:13.106310" elapsed="0.000045"/>
</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-08-23T01:46:13.106637" elapsed="0.000044"/>
</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-08-23T01:46:13.106987" elapsed="0.000045"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T01:46:13.105615" elapsed="0.001541"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T01:46:13.105485" elapsed="0.001733"/>
</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-08-23T01:46:13.107368" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T01:46:13.107519" elapsed="0.000018"/>
</return>
<msg time="2026-08-23T01:46:13.107647" level="INFO">${data} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.114&lt;/host&gt;
    &lt;port&gt;283...</msg>
<var>${data}</var>
<arg>folder=${folder}</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-08-23T01:46:13.014432" elapsed="0.093274"/>
</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-08-23T01:46:13.110336" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/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-08-23T01:46:13.109737" elapsed="0.000748">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-23T01:46:13.110616" 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-08-23T01:46:13.108474" elapsed="0.002167"/>
</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-08-23T01:46:13.111155" elapsed="0.000075"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:13.110752" elapsed="0.000559"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T01:46:13.112573" 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-08-23T01:46:13.111802" elapsed="0.000812"/>
</kw>
<status status="PASS" start="2026-08-23T01:46:13.111339" elapsed="0.001353"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:13.110732" elapsed="0.001985"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T01:46:13.115551" 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-08-23T01:46:13.112883" elapsed="0.002695"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-23T01:46:13.115676" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T01:46:13.115906" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-23T01:46:13.108130" elapsed="0.007804"/>
</kw>
<kw name="Put_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:13.117734" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:13.117260" elapsed="0.000537"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:13.118455" level="INFO">&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.114&lt;/host&gt;
    &lt;port&gt;2830&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;admin&lt;/username&gt;
      &lt;password&gt;admin&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt;</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:13.117989" elapsed="0.000533"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:13.119175" 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-08-23T01:46:13.118683" elapsed="0.000552"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:13.119887" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:13.119395" elapsed="0.000554"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-08-23T01:46:13.121490" 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-08-23T01:46:13.120908" elapsed="0.000680"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-08-23T01:46:13.122453" 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-08-23T01:46:13.121922" elapsed="0.000629"/>
</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-08-23T01:46:13.122807" elapsed="0.000534"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:13.124330" 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-08-23T01:46:13.123602" elapsed="0.000924"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-08-23T01:46:13.124613" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T01:46:13.124956" 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-08-23T01:46:13.120180" elapsed="0.004803"/>
</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-08-23T01:46:13.138692" level="INFO">PUT Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Content-Length': '439', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.114&lt;/host&gt;
    &lt;port&gt;2830&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;admin&lt;/username&gt;
      &lt;password&gt;admin&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt; 
 </msg>
<msg time="2026-08-23T01:46:13.138992" level="INFO">PUT Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 status=404, reason=Not Found 
 headers={'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:13.139255" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</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-08-23T01:46:13.133359" elapsed="0.007791">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</kw>
<status status="FAIL" start="2026-08-23T01:46:13.125094" elapsed="0.016421">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</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-08-23T01:46:13.142036" elapsed="0.000172"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:13.141594" elapsed="0.000904"/>
</branch>
<status status="FAIL" start="2026-08-23T01:46:13.125074" elapsed="0.017481">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</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-08-23T01:46:13.143638" elapsed="0.000060"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T01:46:13.144043" elapsed="0.000029"/>
</return>
<status status="NOT RUN" start="2026-08-23T01:46:13.143951" elapsed="0.000296"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:13.143897" elapsed="0.000405"/>
</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-08-23T01:46:13.144620" elapsed="0.000048"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T01:46:13.145018" elapsed="0.000039"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>content_type=${content_type}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</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-08-23T01:46:13.116352" elapsed="0.028925">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T01:46:13.145445" elapsed="0.000034"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>extension=xml</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>content_type=${HEADERS_XML}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>endline=${\n}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve URI and data from folder, call Put_To_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-23T01:46:12.870783" elapsed="0.274879">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=response</arg>
<arg>mapping=${mapping}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:13.146318" elapsed="0.000053"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:13.145929" elapsed="0.000538"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:13.145891" elapsed="0.000628"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T01:46:13.146589" elapsed="0.000032"/>
</return>
<arg>folder=${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Add arguments sensible for XML data, return Put_Templated response text.
Optionally, verification against response.xml (no iteration) is called.</doc>
<status status="FAIL" start="2026-08-23T01:46:12.868143" elapsed="0.278663">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</kw>
<status status="FAIL" start="2026-08-23T01:46:12.867914" elapsed="0.279086">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</branch>
<status status="FAIL" start="2026-08-23T01:46:12.867446" elapsed="0.279618">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</if>
<kw name="Set To Dictionary" owner="Collections">
<arg>${NetconfKeywords__mounted_device_types}</arg>
<arg>${device_name}</arg>
<arg>${device_type}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:13.147401" elapsed="0.000048"/>
</kw>
<arg>${device_name}</arg>
<arg>device_type=full-uri-device</arg>
<arg>device_port=${DEVICE_PORT}</arg>
<arg>device_address=${device_ip}</arg>
<arg>device_user=admin</arg>
<arg>device_password=admin</arg>
<arg>session=${session}</arg>
<doc>Tell Netconf about the specified device so it can add it into its configuration.</doc>
<status status="FAIL" start="2026-08-23T01:46:12.837565" elapsed="0.310090">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</kw>
<arg>${DEVICE_NAME}</arg>
<arg>${session}</arg>
<arg>${ODL_SYSTEM_${node_index}_IP}</arg>
<doc>Configures the device via REST api.</doc>
<status status="FAIL" start="2026-08-23T01:46:12.836276" elapsed="0.311690">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<var>&amp;{mapping}</var>
<arg>DEVICE_NAME=${DEVICE_NAME}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:13.148277" elapsed="0.000021"/>
</kw>
<kw name="Wait_Netconf_Device_Mounted">
<arg>${DEVICE_NAME}</arg>
<arg>${session}</arg>
<arg>${mapping}</arg>
<doc>Checks weather the device was mounted.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:13.148471" elapsed="0.000022"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:13.156872" elapsed="0.000028"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<var>${mod_session}</var>
<arg>member_index=${idx}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:13.157206" elapsed="0.000024"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5x</arg>
<arg>3s</arg>
<arg>TemplatedRequests.Get_As_Xml_Templated</arg>
<arg>${NETCONF_FOLDER}${/}${version}${/}netconf-state</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${mod_session}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:13.157385" elapsed="0.000021"/>
</kw>
<var name="${idx}"/>
<status status="NOT RUN" start="2026-08-23T01:46:13.157017" elapsed="0.000434"/>
</iter>
<var>${idx}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="NOT RUN" start="2026-08-23T01:46:13.156956" elapsed="0.000521"/>
</for>
<kw name="Remove_Netconf_Device" type="TEARDOWN">
<kw name="Remove_Device_From_Netconf" owner="NetconfKeywords">
<kw name="Pop From Dictionary" owner="Collections">
<msg time="2026-08-23T01:46:13.158879" level="INFO">${device_type} = None</msg>
<msg time="2026-08-23T01:46:13.158924" level="FAIL">Dictionary does not contain key 'test-device'.</msg>
<var>${device_type}</var>
<arg>${NetconfKeywords__mounted_device_types}</arg>
<arg>${device_name}</arg>
<doc>Pops the given ``key`` from the ``dictionary`` and returns its value.</doc>
<status status="FAIL" start="2026-08-23T01:46:13.158589" elapsed="0.000392">Dictionary does not contain key 'test-device'.</status>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T01:46:13.159584" level="INFO">${mapping} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping}</var>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-23T01:46:13.159155" elapsed="0.000456"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T01:46:13.178172" elapsed="0.000863"/>
</kw>
<msg time="2026-08-23T01:46:13.179265" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T01:46:13.177795" elapsed="0.001537"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return scandium if vanadium is at least ${lower_bound},
return calcium otherwise.</doc>
<status status="PASS" start="2026-08-23T01:46:13.177381" elapsed="0.002026"/>
</kw>
<msg time="2026-08-23T01:46:13.179450" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T01:46:13.168545" elapsed="0.010962"/>
</kw>
<msg time="2026-08-23T01:46:13.179609" level="INFO">${version} = scandium</msg>
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-08-23T01:46:13.168193" elapsed="0.011440"/>
</kw>
<kw name="Delete_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-08-23T01:46:13.222905" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T01:46:13.222244" elapsed="0.000768"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T01:46:13.224568" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-23T01:46:13.224088" elapsed="0.000585">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-23T01:46:13.224798" 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-08-23T01:46:13.223310" elapsed="0.001628"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T01:46:13.226324" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None/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-08-23T01:46:13.225280" elapsed="0.001153"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T01:46:13.227153" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-23T01:46:13.227377" level="INFO">${template} = None</msg>
<msg time="2026-08-23T01:46:13.227465" level="FAIL">FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="FAIL" start="2026-08-23T01:46:13.226805" elapsed="0.000773">FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'</status>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:13.228454" level="INFO">None</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:13.227963" elapsed="0.000551"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:13.230466" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:13.230202" elapsed="0.000310"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T01:46:13.231006" 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-08-23T01:46:13.230713" elapsed="0.000319"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:13.231823" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:13.231482" elapsed="0.000503"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:13.232905" level="INFO">${encoded} = test-device</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-08-23T01:46:13.232665" elapsed="0.000266"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:13.232983" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T01:46:13.233137" level="INFO">${encoded_value} = test-device</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-08-23T01:46:13.232173" elapsed="0.000989"/>
</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-08-23T01:46:13.233315" elapsed="0.000224"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-23T01:46:13.231347" elapsed="0.002233"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:13.234141" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:13.233821" elapsed="0.000345"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:13.234922" level="INFO">${encoded} = /rests</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-08-23T01:46:13.234688" elapsed="0.000259"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:13.234998" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T01:46:13.235148" level="INFO">${encoded_value} = /rests</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-08-23T01:46:13.234347" 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-08-23T01:46:13.235319" elapsed="0.000232"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-23T01:46:13.233693" elapsed="0.001899"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-23T01:46:13.231129" elapsed="0.004518"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-23T01:46:13.235713" elapsed="0.000071"/>
</return>
<msg time="2026-08-23T01:46:13.236111" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-23T01:46:13.229409" elapsed="0.006793"/>
</kw>
<status status="PASS" start="2026-08-23T01:46:13.228686" elapsed="0.007592"/>
</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-08-23T01:46:13.236573" elapsed="0.000083"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:13.236355" elapsed="0.000380"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:13.228664" elapsed="0.008144"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T01:46:13.237790" level="INFO">${final_text} = None</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-08-23T01:46:13.236971" elapsed="0.000952"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T01:46:13.238154" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None/${file_name}.</doc>
<status status="FAIL" start="2026-08-23T01:46:13.221262" elapsed="0.017099">FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'</status>
</kw>
<msg time="2026-08-23T01:46:13.238417" 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="FAIL" start="2026-08-23T01:46:13.208464" elapsed="0.030012"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:13.251107" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:13.263574" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:13.276078" 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-08-23T01:46:13.276268" 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-08-23T01:46:13.276438" 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-08-23T01:46:13.276862" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:13.276700" elapsed="0.000222"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:13.276685" 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-08-23T01:46:13.277084" 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-08-23T01:46:13.277247" 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-08-23T01:46:13.277408" elapsed="0.000019"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T01:46:13.276656" elapsed="0.000804"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T01:46:13.276514" 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-08-23T01:46:13.277623" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T01:46:13.277697" elapsed="0.000015"/>
</return>
<msg time="2026-08-23T01:46:13.277867" level="INFO">${uri} = None</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=${location}</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="FAIL" start="2026-08-23T01:46:13.204154" elapsed="0.073742">FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'</status>
</kw>
<kw name="Delete_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:13.279043" level="INFO">None</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:13.278767" elapsed="0.000321"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:46:13.284942" level="INFO">DELETE Request : url=http://10.30.170.114:8181/ 
 path_url=/ 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Length': '0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:13.284987" level="INFO">DELETE Response : url=http://10.30.170.114:8181/ 
 status=404, reason=Not Found 
 headers={'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:13.285107" level="INFO">${response} = None</msg>
<msg time="2026-08-23T01:46:13.285149" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:46:13.281397" elapsed="0.004069">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/</status>
</kw>
<status status="FAIL" start="2026-08-23T01:46:13.279154" elapsed="0.006388">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/</status>
</branch>
<branch type="ELSE">
<kw name="DELETE On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:13.285722" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:13.285574" elapsed="0.000209"/>
</branch>
<status status="FAIL" start="2026-08-23T01:46:13.279136" elapsed="0.006670">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/</status>
</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-08-23T01:46:13.289582" level="FAIL">Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="FAIL" start="2026-08-23T01:46:13.287001" elapsed="0.002648">Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<status status="FAIL" start="2026-08-23T01:46:13.286764" elapsed="0.002951">Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</branch>
<status status="FAIL" start="2026-08-23T01:46:13.286746" elapsed="0.003001">Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:13.292610" level="FAIL">Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="FAIL" start="2026-08-23T01:46:13.290059" elapsed="0.002586">Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</status>
</kw>
<status status="FAIL" start="2026-08-23T01:46:13.289817" elapsed="0.002892">Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</status>
</branch>
<status status="FAIL" start="2026-08-23T01:46:13.289800" elapsed="0.002940">Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</status>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T01:46:13.293327" 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-08-23T01:46:13.292936" 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-08-23T01:46:13.293661" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:13.293423" elapsed="0.000296"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T01:46:13.294325" 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-08-23T01:46:13.293918" elapsed="0.000434"/>
</kw>
<status status="PASS" start="2026-08-23T01:46:13.293743" elapsed="0.000645"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:13.293405" elapsed="0.001004"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T01:46:13.294952" 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-08-23T01:46:13.294566" 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-08-23T01:46:13.295287" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:13.295049" elapsed="0.000302"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T01:46:13.295954" 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-08-23T01:46:13.295533" elapsed="0.000448"/>
</kw>
<status status="PASS" start="2026-08-23T01:46:13.295379" elapsed="0.000638"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:13.295031" elapsed="0.001007"/>
</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-08-23T01:46:13.296184" elapsed="0.000463"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-08-23T01:46:13.297187" 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-08-23T01:46:13.296808" elapsed="0.000406"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<msg time="2026-08-23T01:46:13.303020" level="FAIL">Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</msg>
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="FAIL" start="2026-08-23T01:46:13.297364" elapsed="0.005690">Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</status>
</kw>
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_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="FAIL" start="2026-08-23T01:46:13.286334" elapsed="0.016880">Several failures occurred:

1) Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'

2) Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'

3) Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</status>
</kw>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-08-23T01:46:13.303282" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T01:46:13.305660" level="INFO">${response_text} = None</msg>
<msg time="2026-08-23T01:46:13.305690" level="FAIL">Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>session=${session}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>DELETE resource at URI, check status_code and return response text..</doc>
<status status="FAIL" start="2026-08-23T01:46:13.278174" elapsed="0.027545">Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-08-23T01:46:13.305785" elapsed="0.000026"/>
</return>
<arg>${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>${mapping}</arg>
<arg>session=${session}</arg>
<arg>location=${location}</arg>
<doc>Resolve URI from folder, issue DELETE request.</doc>
<status status="FAIL" start="2026-08-23T01:46:13.179885" elapsed="0.126104">Several failures occurred:

1) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

2) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Tell Netconf to deconfigure the specified device</doc>
<status status="FAIL" start="2026-08-23T01:46:13.158139" elapsed="0.148015">Several failures occurred:

1) Dictionary does not contain key 'test-device'.

2) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

3) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<arg>${DEVICE_NAME}</arg>
<arg>${session}</arg>
<doc>Removes configured device</doc>
<status status="FAIL" start="2026-08-23T01:46:13.157668" elapsed="0.148620">Several failures occurred:

1) Dictionary does not contain key 'test-device'.

2) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

3) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<arg>${idx}</arg>
<doc>Netconf readines for a node is done by creating a netconf device connected to that node
and performing GET operation got from the device's mount point.</doc>
<status status="FAIL" start="2026-08-23T01:46:12.832776" elapsed="0.473593">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device

Also keyword teardown failed:
Several failures occurred:

1) Dictionary does not contain key 'test-device'.

2) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

3) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<var name="${idx}">1</var>
<status status="FAIL" start="2026-08-23T01:46:12.832381" elapsed="0.474051">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device

Also keyword teardown failed:
Several failures occurred:

1) Dictionary does not contain key 'test-device'.

2) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

3) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</iter>
<var>${idx}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="FAIL" start="2026-08-23T01:46:12.832023" elapsed="0.474472">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device

Also keyword teardown failed:
Several failures occurred:

1) Dictionary does not contain key 'test-device'.

2) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

3) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</for>
<doc>Verifies the netconf readiness for every odl node.</doc>
<status status="FAIL" start="2026-08-23T01:46:12.831415" elapsed="0.475181">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device

Also keyword teardown failed:
Several failures occurred:

1) Dictionary does not contain key 'test-device'.

2) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

3) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<kw name="Check_Netconf_Topology_Ready">
<for flavor="IN">
<iter>
<kw name="Verify_Netconf_Topology_Ready_For_Node">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T01:46:14.310534" 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-08-23T01:46:14.310135" elapsed="0.000434"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-08-23T01:46:14.310632" elapsed="0.000045"/>
</return>
<msg time="2026-08-23T01:46:14.310807" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${node_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-08-23T01:46:14.309743" elapsed="0.001102"/>
</kw>
<kw name="Configure_Netconf_Device">
<kw name="Configure_Device_In_Netconf" owner="NetconfKeywords">
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T01:46:14.332665" elapsed="0.000902"/>
</kw>
<msg time="2026-08-23T01:46:14.333712" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T01:46:14.332219" elapsed="0.001554"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return scandium if vanadium is at least ${lower_bound},
return calcium otherwise.</doc>
<status status="PASS" start="2026-08-23T01:46:14.331814" elapsed="0.002057"/>
</kw>
<msg time="2026-08-23T01:46:14.333917" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T01:46:14.323191" elapsed="0.010772"/>
</kw>
<msg time="2026-08-23T01:46:14.334066" level="INFO">${version} = scandium</msg>
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-08-23T01:46:14.322864" elapsed="0.011227"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T01:46:14.335005" level="INFO">${mapping} = {'DEVICE_IP': '10.30.170.114', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', '...</msg>
<var>${mapping}</var>
<arg>DEVICE_IP=${device_address}</arg>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>DEVICE_PORT=${device_port}</arg>
<arg>DEVICE_USER=${device_user}</arg>
<arg>DEVICE_PASSWORD=${device_password}</arg>
<arg>DEVICE_KEY=${device_key}</arg>
<arg>SCHEMA_DIRECTORY=${schema_directory}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-23T01:46:14.334256" elapsed="0.000777"/>
</kw>
<if>
<branch type="IF" condition="'${http_method}'=='post'">
<kw name="Post_As_Xml_Templated" owner="TemplatedRequests">
<arg>folder=${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</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="NOT RUN" start="2026-08-23T01:46:14.335532" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:14.335196" elapsed="0.000405"/>
</branch>
<branch type="ELSE">
<kw name="Put_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Put_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-08-23T01:46:14.369879" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T01:46:14.369460" elapsed="0.000449"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T01:46:14.370780" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-23T01:46:14.370479" elapsed="0.000409">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-23T01:46:14.370987" 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-08-23T01:46:14.370136" elapsed="0.000876"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T01:46:14.371633" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/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-08-23T01:46:14.371238" elapsed="0.000422"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T01:46:14.372038" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/location.uri"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-23T01:46:14.372206" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T01:46:14.371897" elapsed="0.000334"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:14.372690" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:14.372441" 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-08-23T01:46:14.373785" level="INFO">mapping: {'DEVICE_IP': '10.30.170.114', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:14.373525" elapsed="0.000306"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T01:46:14.374298" 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-08-23T01:46:14.374028" elapsed="0.000296"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:14.375006" level="INFO">${value} = 10.30.170.114</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:14.374688" elapsed="0.000353"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:14.375779" level="INFO">${encoded} = 10.30.170.114</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-08-23T01:46:14.375548" elapsed="0.000257"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:14.375882" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T01:46:14.376045" level="INFO">${encoded_value} = 10.30.170.114</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-08-23T01:46:14.375227" elapsed="0.000843"/>
</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-08-23T01:46:14.376219" elapsed="0.000252"/>
</kw>
<var name="${key}">DEVICE_IP</var>
<var name="${value}">10.30.170.114</var>
<status status="PASS" start="2026-08-23T01:46:14.374553" elapsed="0.001966"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:14.377083" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:14.376767" elapsed="0.000342"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:14.377820" level="INFO">${encoded} = test-device</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-08-23T01:46:14.377611" elapsed="0.000250"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:14.377916" elapsed="0.000034"/>
</return>
<msg time="2026-08-23T01:46:14.378073" level="INFO">${encoded_value} = test-device</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-08-23T01:46:14.377289" elapsed="0.000882"/>
</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-08-23T01:46:14.378385" elapsed="0.000226"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-23T01:46:14.376633" elapsed="0.002019"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:14.379239" level="INFO">${value} = 2830</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:14.378910" elapsed="0.000356"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:14.381552" level="INFO">${encoded} = 2830</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-08-23T01:46:14.379762" elapsed="0.001817"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:14.381630" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T01:46:14.381784" level="INFO">${encoded_value} = 2830</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-08-23T01:46:14.379445" elapsed="0.002364"/>
</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-08-23T01:46:14.381974" elapsed="0.000226"/>
</kw>
<var name="${key}">DEVICE_PORT</var>
<var name="${value}">2830</var>
<status status="PASS" start="2026-08-23T01:46:14.378765" elapsed="0.003475"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:14.382782" level="INFO">${value} = admin</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:14.382483" elapsed="0.000325"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:14.383544" level="INFO">${encoded} = admin</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-08-23T01:46:14.383335" elapsed="0.000235"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:14.383619" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T01:46:14.383770" level="INFO">${encoded_value} = admin</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-08-23T01:46:14.383015" elapsed="0.000780"/>
</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-08-23T01:46:14.383958" elapsed="0.000224"/>
</kw>
<var name="${key}">DEVICE_USER</var>
<var name="${value}">admin</var>
<status status="PASS" start="2026-08-23T01:46:14.382354" elapsed="0.001868"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:14.384771" level="INFO">${value} = admin</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:14.384470" elapsed="0.000326"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:14.385525" level="INFO">${encoded} = admin</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-08-23T01:46:14.385313" elapsed="0.000239"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:14.385602" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T01:46:14.385754" level="INFO">${encoded_value} = admin</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-08-23T01:46:14.384994" 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-08-23T01:46:14.385943" elapsed="0.000225"/>
</kw>
<var name="${key}">DEVICE_PASSWORD</var>
<var name="${value}">admin</var>
<status status="PASS" start="2026-08-23T01:46:14.384341" elapsed="0.001868"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:14.386756" level="INFO">${value} = device-key</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:14.386452" elapsed="0.000330"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:14.387519" level="INFO">${encoded} = device-key</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-08-23T01:46:14.387311" elapsed="0.000234"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:14.387593" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T01:46:14.387745" level="INFO">${encoded_value} = device-key</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-08-23T01:46:14.386994" 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-08-23T01:46:14.387931" elapsed="0.000224"/>
</kw>
<var name="${key}">DEVICE_KEY</var>
<var name="${value}">device-key</var>
<status status="PASS" start="2026-08-23T01:46:14.386322" elapsed="0.001874"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:14.388733" level="INFO">${value} = /tmp/schema</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:14.388436" elapsed="0.000323"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:14.389476" level="INFO">${encoded} = /tmp/schema</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-08-23T01:46:14.389268" elapsed="0.000233"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:14.389549" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T01:46:14.389699" level="INFO">${encoded_value} = /tmp/schema</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-08-23T01:46:14.388954" 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-08-23T01:46:14.389885" elapsed="0.000263"/>
</kw>
<var name="${key}">SCHEMA_DIRECTORY</var>
<var name="${value}">/tmp/schema</var>
<status status="PASS" start="2026-08-23T01:46:14.388307" elapsed="0.001883"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:14.390725" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:14.390430" elapsed="0.000320"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:14.391499" level="INFO">${encoded} = /rests</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-08-23T01:46:14.391286" elapsed="0.000239"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:14.391575" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T01:46:14.391725" level="INFO">${encoded_value} = /rests</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-08-23T01:46:14.390947" 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-08-23T01:46:14.391913" elapsed="0.000224"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-23T01:46:14.390301" elapsed="0.001877"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-23T01:46:14.374371" elapsed="0.017842"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-23T01:46:14.392257" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T01:46:14.392418" level="INFO">${mapping_to_use} = {'DEVICE_IP': '10.30.170.114', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', '...</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-23T01:46:14.373189" elapsed="0.019255"/>
</kw>
<status status="PASS" start="2026-08-23T01:46:14.372873" elapsed="0.019602"/>
</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-08-23T01:46:14.392645" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:14.392501" elapsed="0.000199"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:14.372850" elapsed="0.019870"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T01:46:14.393864" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</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-08-23T01:46:14.392935" elapsed="0.000959"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T01:46:14.393994" elapsed="0.000053"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="PASS" start="2026-08-23T01:46:14.368362" elapsed="0.025911"/>
</kw>
<msg time="2026-08-23T01:46:14.394362" 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-08-23T01:46:14.353814" elapsed="0.040645"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:14.416897" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:14.438876" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:14.460992" 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-08-23T01:46:14.461235" 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-08-23T01:46:14.461465" 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-08-23T01:46:14.462069" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:14.461774" elapsed="0.000381"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:14.461758" elapsed="0.000485"/>
</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-08-23T01:46:14.462445" elapsed="0.000045"/>
</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-08-23T01:46:14.462804" elapsed="0.000068"/>
</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-08-23T01:46:14.463164" elapsed="0.000045"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T01:46:14.461727" elapsed="0.001611"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T01:46:14.461595" elapsed="0.001804"/>
</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-08-23T01:46:14.463550" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T01:46:14.463705" elapsed="0.000018"/>
</return>
<msg time="2026-08-23T01:46:14.463829" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</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-08-23T01:46:14.349413" elapsed="0.114465"/>
</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-08-23T01:46:14.492586" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/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-08-23T01:46:14.492168" elapsed="0.000446"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T01:46:14.493410" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/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-08-23T01:46:14.493190" elapsed="0.000287">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/data.xml' does not exist.</status>
</kw>
<msg time="2026-08-23T01:46:14.493570" 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-08-23T01:46:14.492824" elapsed="0.000770"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T01:46:14.494221" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/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-08-23T01:46:14.493809" elapsed="0.000440"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T01:46:14.494603" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/data.xml"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/data.xml&lt;/a&gt;'.</msg>
<msg time="2026-08-23T01:46:14.494733" level="INFO">${template} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;$DEVICE_NAME&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;$DEVICE_IP&lt;/host&gt;
    &lt;port&gt;$DEVI...</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T01:46:14.494456" elapsed="0.000306"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:14.495263" level="INFO">&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;$DEVICE_NAME&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;$DEVICE_IP&lt;/host&gt;
    &lt;port&gt;$DEVICE_PORT&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;$DEVICE_USER&lt;/username&gt;
      &lt;password&gt;$DEVICE_PASSWORD&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt;
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:14.495015" 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-08-23T01:46:14.495733" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:14.495432" elapsed="0.000361"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T01:46:14.496288" level="INFO">${mapping_to_use} = {'DEVICE_IP': '10.30.170.114', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', '...</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-08-23T01:46:14.495989" elapsed="0.000361"/>
</kw>
<status status="PASS" start="2026-08-23T01:46:14.495818" elapsed="0.000569"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:14.495411" elapsed="0.000998"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T01:46:14.497338" level="INFO">${final_text} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.114&lt;/host&gt;
    &lt;port&gt;283...</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-08-23T01:46:14.496604" elapsed="0.000765"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T01:46:14.497468" elapsed="0.000054"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="PASS" start="2026-08-23T01:46:14.491133" elapsed="0.006612"/>
</kw>
<msg time="2026-08-23T01:46:14.497854" 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-08-23T01:46:14.476823" elapsed="0.021131"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:14.520196" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:14.542336" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:14.564652" 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-08-23T01:46:14.564910" 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-08-23T01:46:14.565103" 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-08-23T01:46:14.565663" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:14.565402" elapsed="0.000346"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:14.565387" elapsed="0.000465"/>
</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-08-23T01:46:14.566057" elapsed="0.000045"/>
</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-08-23T01:46:14.566396" elapsed="0.000044"/>
</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-08-23T01:46:14.566724" elapsed="0.000045"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T01:46:14.565358" elapsed="0.001560"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T01:46:14.565227" elapsed="0.001752"/>
</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-08-23T01:46:14.567127" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T01:46:14.567280" elapsed="0.000018"/>
</return>
<msg time="2026-08-23T01:46:14.567419" level="INFO">${data} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.114&lt;/host&gt;
    &lt;port&gt;283...</msg>
<var>${data}</var>
<arg>folder=${folder}</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-08-23T01:46:14.473992" elapsed="0.093488"/>
</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-08-23T01:46:14.570152" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/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-08-23T01:46:14.569607" elapsed="0.000666">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-23T01:46:14.570426" 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-08-23T01:46:14.568239" elapsed="0.002212"/>
</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-08-23T01:46:14.570947" elapsed="0.000077"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:14.570562" elapsed="0.000543"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T01:46:14.572254" 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-08-23T01:46:14.571602" elapsed="0.000693"/>
</kw>
<status status="PASS" start="2026-08-23T01:46:14.571133" elapsed="0.001245"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:14.570542" elapsed="0.001860"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T01:46:14.575328" 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-08-23T01:46:14.572556" elapsed="0.002799"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-23T01:46:14.575452" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T01:46:14.575610" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-23T01:46:14.567892" elapsed="0.007742"/>
</kw>
<kw name="Put_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:14.577458" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:14.576975" elapsed="0.000545"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:14.578175" level="INFO">&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.114&lt;/host&gt;
    &lt;port&gt;2830&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;admin&lt;/username&gt;
      &lt;password&gt;admin&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt;</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:14.577683" elapsed="0.000559"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:14.578913" 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-08-23T01:46:14.578416" elapsed="0.000557"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:14.579611" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:14.579138" elapsed="0.000532"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-08-23T01:46:14.581178" 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-08-23T01:46:14.580581" elapsed="0.000695"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-08-23T01:46:14.582180" 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-08-23T01:46:14.581537" elapsed="0.000759"/>
</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-08-23T01:46:14.582552" elapsed="0.000497"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:14.584075" 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-08-23T01:46:14.583309" elapsed="0.000971"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-08-23T01:46:14.584388" elapsed="0.000038"/>
</return>
<msg time="2026-08-23T01:46:14.584670" 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-08-23T01:46:14.579911" elapsed="0.004785"/>
</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-08-23T01:46:14.598292" level="INFO">PUT Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Content-Length': '439', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.114&lt;/host&gt;
    &lt;port&gt;2830&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;admin&lt;/username&gt;
      &lt;password&gt;admin&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt; 
 </msg>
<msg time="2026-08-23T01:46:14.598414" level="INFO">PUT Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 status=404, reason=Not Found 
 headers={'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:14.598526" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</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-08-23T01:46:14.593382" elapsed="0.005989">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</kw>
<status status="FAIL" start="2026-08-23T01:46:14.584805" elapsed="0.014733">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</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-08-23T01:46:14.599756" elapsed="0.000093"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:14.599575" elapsed="0.000408"/>
</branch>
<status status="FAIL" start="2026-08-23T01:46:14.584785" elapsed="0.015225">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</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-08-23T01:46:14.600497" elapsed="0.000027"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T01:46:14.600648" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T01:46:14.600609" elapsed="0.000126"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:14.600590" elapsed="0.000170"/>
</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-08-23T01:46:14.600926" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T01:46:14.601036" elapsed="0.000017"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>content_type=${content_type}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</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-08-23T01:46:14.576076" elapsed="0.025074">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T01:46:14.601225" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>extension=xml</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>content_type=${HEADERS_XML}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>endline=${\n}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve URI and data from folder, call Put_To_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-23T01:46:14.338536" elapsed="0.262787">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=response</arg>
<arg>mapping=${mapping}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:14.601608" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:14.601430" elapsed="0.000246"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:14.601413" elapsed="0.000286"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T01:46:14.601731" elapsed="0.000015"/>
</return>
<arg>folder=${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Add arguments sensible for XML data, return Put_Templated response text.
Optionally, verification against response.xml (no iteration) is called.</doc>
<status status="FAIL" start="2026-08-23T01:46:14.335885" elapsed="0.265944">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</kw>
<status status="FAIL" start="2026-08-23T01:46:14.335628" elapsed="0.266297">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</branch>
<status status="FAIL" start="2026-08-23T01:46:14.335162" elapsed="0.266791">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</if>
<kw name="Set To Dictionary" owner="Collections">
<arg>${NetconfKeywords__mounted_device_types}</arg>
<arg>${device_name}</arg>
<arg>${device_type}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:14.602105" elapsed="0.000021"/>
</kw>
<arg>${device_name}</arg>
<arg>device_type=full-uri-device</arg>
<arg>device_port=${DEVICE_PORT}</arg>
<arg>device_address=${device_ip}</arg>
<arg>device_user=admin</arg>
<arg>device_password=admin</arg>
<arg>session=${session}</arg>
<doc>Tell Netconf about the specified device so it can add it into its configuration.</doc>
<status status="FAIL" start="2026-08-23T01:46:14.311562" elapsed="0.290667">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</kw>
<arg>${DEVICE_NAME}</arg>
<arg>${session}</arg>
<arg>${ODL_SYSTEM_${node_index}_IP}</arg>
<doc>Configures the device via REST api.</doc>
<status status="FAIL" start="2026-08-23T01:46:14.310974" elapsed="0.291369">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<var>&amp;{mapping}</var>
<arg>DEVICE_NAME=${DEVICE_NAME}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:14.602509" elapsed="0.000022"/>
</kw>
<kw name="Wait_Netconf_Device_Mounted">
<arg>${DEVICE_NAME}</arg>
<arg>${session}</arg>
<arg>${mapping}</arg>
<doc>Checks weather the device was mounted.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:14.602701" elapsed="0.000023"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:14.611256" elapsed="0.000028"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<var>${mod_session}</var>
<arg>member_index=${idx}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:14.611586" elapsed="0.000025"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5x</arg>
<arg>3s</arg>
<arg>TemplatedRequests.Get_As_Xml_Templated</arg>
<arg>${NETCONF_FOLDER}${/}${version}${/}netconf-state</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${mod_session}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:14.611766" elapsed="0.000021"/>
</kw>
<var name="${idx}"/>
<status status="NOT RUN" start="2026-08-23T01:46:14.611402" elapsed="0.000442"/>
</iter>
<var>${idx}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="NOT RUN" start="2026-08-23T01:46:14.611342" elapsed="0.000530"/>
</for>
<kw name="Remove_Netconf_Device" type="TEARDOWN">
<kw name="Remove_Device_From_Netconf" owner="NetconfKeywords">
<kw name="Pop From Dictionary" owner="Collections">
<msg time="2026-08-23T01:46:14.613255" level="INFO">${device_type} = None</msg>
<msg time="2026-08-23T01:46:14.613297" level="FAIL">Dictionary does not contain key 'test-device'.</msg>
<var>${device_type}</var>
<arg>${NetconfKeywords__mounted_device_types}</arg>
<arg>${device_name}</arg>
<doc>Pops the given ``key`` from the ``dictionary`` and returns its value.</doc>
<status status="FAIL" start="2026-08-23T01:46:14.612975" elapsed="0.000379">Dictionary does not contain key 'test-device'.</status>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T01:46:14.613959" level="INFO">${mapping} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping}</var>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-23T01:46:14.613527" elapsed="0.000459"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T01:46:14.632594" elapsed="0.000864"/>
</kw>
<msg time="2026-08-23T01:46:14.633687" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T01:46:14.632239" elapsed="0.001516"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return scandium if vanadium is at least ${lower_bound},
return calcium otherwise.</doc>
<status status="PASS" start="2026-08-23T01:46:14.631818" elapsed="0.002012"/>
</kw>
<msg time="2026-08-23T01:46:14.633892" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T01:46:14.623143" elapsed="0.010807"/>
</kw>
<msg time="2026-08-23T01:46:14.634052" level="INFO">${version} = scandium</msg>
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-08-23T01:46:14.622783" elapsed="0.011304"/>
</kw>
<kw name="Delete_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-08-23T01:46:14.677878" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T01:46:14.677211" elapsed="0.000790"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T01:46:14.679549" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-23T01:46:14.679069" elapsed="0.000587">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-23T01:46:14.679783" 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-08-23T01:46:14.678308" elapsed="0.001610"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T01:46:14.681345" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None/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-08-23T01:46:14.680267" elapsed="0.001187"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T01:46:14.682078" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-23T01:46:14.682304" level="INFO">${template} = None</msg>
<msg time="2026-08-23T01:46:14.682400" level="FAIL">FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="FAIL" start="2026-08-23T01:46:14.681849" elapsed="0.000655">FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'</status>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:14.683595" level="INFO">None</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:14.683058" elapsed="0.000598"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:14.685656" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:14.685393" elapsed="0.000307"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T01:46:14.686361" 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-08-23T01:46:14.685940" elapsed="0.000448"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:14.687225" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:14.686912" elapsed="0.000339"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:14.688012" level="INFO">${encoded} = test-device</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-08-23T01:46:14.687779" elapsed="0.000259"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:14.688089" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T01:46:14.688241" level="INFO">${encoded_value} = test-device</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-08-23T01:46:14.687435" elapsed="0.000831"/>
</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-08-23T01:46:14.688420" elapsed="0.000224"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-23T01:46:14.686697" elapsed="0.001988"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:14.689279" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:14.688978" elapsed="0.000326"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:14.690077" level="INFO">${encoded} = /rests</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-08-23T01:46:14.689848" elapsed="0.000255"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:14.690153" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T01:46:14.690304" level="INFO">${encoded_value} = /rests</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-08-23T01:46:14.689484" 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-08-23T01:46:14.690488" elapsed="0.000276"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-23T01:46:14.688796" elapsed="0.002024"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-23T01:46:14.686488" elapsed="0.004405"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-23T01:46:14.690959" elapsed="0.000076"/>
</return>
<msg time="2026-08-23T01:46:14.691373" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-23T01:46:14.684546" elapsed="0.006920"/>
</kw>
<status status="PASS" start="2026-08-23T01:46:14.683828" elapsed="0.007717"/>
</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-08-23T01:46:14.691879" elapsed="0.000102"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:14.691624" elapsed="0.000440"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:14.683807" elapsed="0.008332"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T01:46:14.693139" level="INFO">${final_text} = None</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-08-23T01:46:14.692290" elapsed="0.000958"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T01:46:14.693476" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None/${file_name}.</doc>
<status status="FAIL" start="2026-08-23T01:46:14.676226" elapsed="0.017454">FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'</status>
</kw>
<msg time="2026-08-23T01:46:14.693736" 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="FAIL" start="2026-08-23T01:46:14.663317" elapsed="0.030479"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:14.706447" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:14.718889" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:14.731305" 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-08-23T01:46:14.731528" 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-08-23T01:46:14.731700" 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-08-23T01:46:14.732118" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:14.731976" elapsed="0.000198"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:14.731961" 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-08-23T01:46:14.732337" 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-08-23T01:46:14.732507" 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-08-23T01:46:14.732668" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T01:46:14.731931" elapsed="0.000789"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T01:46:14.731777" 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-08-23T01:46:14.732904" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T01:46:14.732982" elapsed="0.000016"/>
</return>
<msg time="2026-08-23T01:46:14.733136" level="INFO">${uri} = None</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=${location}</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="FAIL" start="2026-08-23T01:46:14.658950" elapsed="0.074213">FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'</status>
</kw>
<kw name="Delete_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:14.734325" level="INFO">None</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:14.734074" elapsed="0.000295"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:46:14.739823" level="INFO">DELETE Request : url=http://10.30.170.114:8181/ 
 path_url=/ 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Length': '0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:14.739887" level="INFO">DELETE Response : url=http://10.30.170.114:8181/ 
 status=404, reason=Not Found 
 headers={'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:14.740018" level="INFO">${response} = None</msg>
<msg time="2026-08-23T01:46:14.740061" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:46:14.736650" elapsed="0.003759">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/</status>
</kw>
<status status="FAIL" start="2026-08-23T01:46:14.734435" elapsed="0.006055">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/</status>
</branch>
<branch type="ELSE">
<kw name="DELETE On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:14.740672" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:14.740523" elapsed="0.000211"/>
</branch>
<status status="FAIL" start="2026-08-23T01:46:14.734417" elapsed="0.006340">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/</status>
</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-08-23T01:46:14.744685" level="FAIL">Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="FAIL" start="2026-08-23T01:46:14.742019" elapsed="0.002734">Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<status status="FAIL" start="2026-08-23T01:46:14.741777" elapsed="0.003042">Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</branch>
<status status="FAIL" start="2026-08-23T01:46:14.741757" elapsed="0.003115">Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:14.747720" level="FAIL">Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="FAIL" start="2026-08-23T01:46:14.745164" elapsed="0.002594">Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</status>
</kw>
<status status="FAIL" start="2026-08-23T01:46:14.744945" elapsed="0.002877">Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</status>
</branch>
<status status="FAIL" start="2026-08-23T01:46:14.744928" elapsed="0.002948">Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</status>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T01:46:14.748449" 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-08-23T01:46:14.748057" elapsed="0.000419"/>
</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-08-23T01:46:14.748774" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:14.748545" elapsed="0.000306"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T01:46:14.749438" 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-08-23T01:46:14.749034" elapsed="0.000431"/>
</kw>
<status status="PASS" start="2026-08-23T01:46:14.748878" elapsed="0.000624"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:14.748528" elapsed="0.000995"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T01:46:14.750082" 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-08-23T01:46:14.749691" 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-08-23T01:46:14.750402" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:14.750177" elapsed="0.000288"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T01:46:14.751059" 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-08-23T01:46:14.750640" elapsed="0.000445"/>
</kw>
<status status="PASS" start="2026-08-23T01:46:14.750488" elapsed="0.000632"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:14.750160" elapsed="0.000981"/>
</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-08-23T01:46:14.751286" elapsed="0.000467"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-08-23T01:46:14.752297" 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-08-23T01:46:14.751939" elapsed="0.000384"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<msg time="2026-08-23T01:46:14.758190" level="FAIL">Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</msg>
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="FAIL" start="2026-08-23T01:46:14.752473" elapsed="0.005755">Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</status>
</kw>
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_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="FAIL" start="2026-08-23T01:46:14.741290" elapsed="0.017107">Several failures occurred:

1) Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'

2) Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'

3) Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</status>
</kw>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-08-23T01:46:14.758459" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T01:46:14.760905" level="INFO">${response_text} = None</msg>
<msg time="2026-08-23T01:46:14.760935" level="FAIL">Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>session=${session}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>DELETE resource at URI, check status_code and return response text..</doc>
<status status="FAIL" start="2026-08-23T01:46:14.733432" elapsed="0.027532">Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-08-23T01:46:14.761030" elapsed="0.000025"/>
</return>
<arg>${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>${mapping}</arg>
<arg>session=${session}</arg>
<arg>location=${location}</arg>
<doc>Resolve URI from folder, issue DELETE request.</doc>
<status status="FAIL" start="2026-08-23T01:46:14.634308" elapsed="0.126899">Several failures occurred:

1) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

2) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Tell Netconf to deconfigure the specified device</doc>
<status status="FAIL" start="2026-08-23T01:46:14.612514" elapsed="0.148858">Several failures occurred:

1) Dictionary does not contain key 'test-device'.

2) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

3) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<arg>${DEVICE_NAME}</arg>
<arg>${session}</arg>
<doc>Removes configured device</doc>
<status status="FAIL" start="2026-08-23T01:46:14.612066" elapsed="0.149428">Several failures occurred:

1) Dictionary does not contain key 'test-device'.

2) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

3) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<arg>${idx}</arg>
<doc>Netconf readines for a node is done by creating a netconf device connected to that node
and performing GET operation got from the device's mount point.</doc>
<status status="FAIL" start="2026-08-23T01:46:14.309282" elapsed="0.452292">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device

Also keyword teardown failed:
Several failures occurred:

1) Dictionary does not contain key 'test-device'.

2) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

3) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<var name="${idx}">1</var>
<status status="FAIL" start="2026-08-23T01:46:14.309047" elapsed="0.452604">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device

Also keyword teardown failed:
Several failures occurred:

1) Dictionary does not contain key 'test-device'.

2) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

3) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</iter>
<var>${idx}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="FAIL" start="2026-08-23T01:46:14.308798" elapsed="0.452917">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device

Also keyword teardown failed:
Several failures occurred:

1) Dictionary does not contain key 'test-device'.

2) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

3) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</for>
<doc>Verifies the netconf readiness for every odl node.</doc>
<status status="FAIL" start="2026-08-23T01:46:14.308369" elapsed="0.453444">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device

Also keyword teardown failed:
Several failures occurred:

1) Dictionary does not contain key 'test-device'.

2) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

3) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<kw name="Check_Netconf_Topology_Ready">
<for flavor="IN">
<iter>
<kw name="Verify_Netconf_Topology_Ready_For_Node">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T01:46:15.766587" 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-08-23T01:46:15.765732" elapsed="0.000926"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-08-23T01:46:15.766792" elapsed="0.000144"/>
</return>
<msg time="2026-08-23T01:46:15.767236" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${node_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-08-23T01:46:15.764924" elapsed="0.002371"/>
</kw>
<kw name="Configure_Netconf_Device">
<kw name="Configure_Device_In_Netconf" owner="NetconfKeywords">
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T01:46:15.791573" elapsed="0.000897"/>
</kw>
<msg time="2026-08-23T01:46:15.792613" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T01:46:15.791147" elapsed="0.001526"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return scandium if vanadium is at least ${lower_bound},
return calcium otherwise.</doc>
<status status="PASS" start="2026-08-23T01:46:15.790744" elapsed="0.002006"/>
</kw>
<msg time="2026-08-23T01:46:15.792792" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T01:46:15.782028" elapsed="0.010827"/>
</kw>
<msg time="2026-08-23T01:46:15.792966" level="INFO">${version} = scandium</msg>
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-08-23T01:46:15.781684" elapsed="0.011306"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T01:46:15.793911" level="INFO">${mapping} = {'DEVICE_IP': '10.30.170.114', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', '...</msg>
<var>${mapping}</var>
<arg>DEVICE_IP=${device_address}</arg>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>DEVICE_PORT=${device_port}</arg>
<arg>DEVICE_USER=${device_user}</arg>
<arg>DEVICE_PASSWORD=${device_password}</arg>
<arg>DEVICE_KEY=${device_key}</arg>
<arg>SCHEMA_DIRECTORY=${schema_directory}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-23T01:46:15.793158" elapsed="0.000781"/>
</kw>
<if>
<branch type="IF" condition="'${http_method}'=='post'">
<kw name="Post_As_Xml_Templated" owner="TemplatedRequests">
<arg>folder=${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</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="NOT RUN" start="2026-08-23T01:46:15.794444" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:15.794103" elapsed="0.000409"/>
</branch>
<branch type="ELSE">
<kw name="Put_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Put_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-08-23T01:46:15.827967" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T01:46:15.827563" elapsed="0.000433"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T01:46:15.828811" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-23T01:46:15.828544" elapsed="0.000372">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-23T01:46:15.829013" 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-08-23T01:46:15.828210" elapsed="0.000827"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T01:46:15.829644" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/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-08-23T01:46:15.829254" elapsed="0.000417"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T01:46:15.830051" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/location.uri"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-23T01:46:15.830253" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T01:46:15.829909" elapsed="0.000371"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:15.830734" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:15.830487" 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-08-23T01:46:15.831877" level="INFO">mapping: {'DEVICE_IP': '10.30.170.114', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:15.831583" elapsed="0.000343"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T01:46:15.832366" 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-08-23T01:46:15.832089" elapsed="0.000309"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:15.833107" level="INFO">${value} = 10.30.170.114</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:15.832768" elapsed="0.000365"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:15.833894" level="INFO">${encoded} = 10.30.170.114</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-08-23T01:46:15.833643" elapsed="0.000278"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:15.833971" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T01:46:15.834125" level="INFO">${encoded_value} = 10.30.170.114</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-08-23T01:46:15.833317" elapsed="0.000841"/>
</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-08-23T01:46:15.834308" elapsed="0.000242"/>
</kw>
<var name="${key}">DEVICE_IP</var>
<var name="${value}">10.30.170.114</var>
<status status="PASS" start="2026-08-23T01:46:15.832637" elapsed="0.001953"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:15.835160" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:15.834852" elapsed="0.000335"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:15.835918" level="INFO">${encoded} = test-device</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-08-23T01:46:15.835688" elapsed="0.000262"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:15.836007" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T01:46:15.836158" level="INFO">${encoded_value} = test-device</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-08-23T01:46:15.835366" elapsed="0.000817"/>
</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-08-23T01:46:15.836375" elapsed="0.000224"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-23T01:46:15.834705" elapsed="0.001935"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:15.837201" level="INFO">${value} = 2830</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:15.836896" elapsed="0.000332"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:15.838109" level="INFO">${encoded} = 2830</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-08-23T01:46:15.837733" elapsed="0.000413"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:15.838197" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T01:46:15.838349" level="INFO">${encoded_value} = 2830</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-08-23T01:46:15.837412" elapsed="0.000962"/>
</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-08-23T01:46:15.838520" elapsed="0.000224"/>
</kw>
<var name="${key}">DEVICE_PORT</var>
<var name="${value}">2830</var>
<status status="PASS" start="2026-08-23T01:46:15.836752" elapsed="0.002032"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:15.839346" level="INFO">${value} = admin</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:15.839048" elapsed="0.000323"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:15.840087" level="INFO">${encoded} = admin</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-08-23T01:46:15.839875" elapsed="0.000237"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:15.840161" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T01:46:15.840313" level="INFO">${encoded_value} = admin</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-08-23T01:46:15.839550" 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-08-23T01:46:15.840488" elapsed="0.000220"/>
</kw>
<var name="${key}">DEVICE_USER</var>
<var name="${value}">admin</var>
<status status="PASS" start="2026-08-23T01:46:15.838912" elapsed="0.001835"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:15.841310" level="INFO">${value} = admin</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:15.841013" elapsed="0.000322"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:15.842055" level="INFO">${encoded} = admin</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-08-23T01:46:15.841845" elapsed="0.000236"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:15.842148" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T01:46:15.842299" level="INFO">${encoded_value} = admin</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-08-23T01:46:15.841512" 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-08-23T01:46:15.842469" elapsed="0.000219"/>
</kw>
<var name="${key}">DEVICE_PASSWORD</var>
<var name="${value}">admin</var>
<status status="PASS" start="2026-08-23T01:46:15.840874" elapsed="0.001853"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:15.843285" level="INFO">${value} = device-key</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:15.842988" elapsed="0.000325"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:15.844043" level="INFO">${encoded} = device-key</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-08-23T01:46:15.843819" elapsed="0.000250"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:15.844117" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T01:46:15.844265" level="INFO">${encoded_value} = device-key</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-08-23T01:46:15.843492" 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-08-23T01:46:15.844440" elapsed="0.000220"/>
</kw>
<var name="${key}">DEVICE_KEY</var>
<var name="${value}">device-key</var>
<status status="PASS" start="2026-08-23T01:46:15.842851" elapsed="0.001849"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:15.845271" level="INFO">${value} = /tmp/schema</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:15.844963" elapsed="0.000334"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:15.846028" level="INFO">${encoded} = /tmp/schema</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-08-23T01:46:15.845803" elapsed="0.000250"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:15.846110" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T01:46:15.846260" level="INFO">${encoded_value} = /tmp/schema</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-08-23T01:46:15.845474" 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-08-23T01:46:15.846438" elapsed="0.000263"/>
</kw>
<var name="${key}">SCHEMA_DIRECTORY</var>
<var name="${value}">/tmp/schema</var>
<status status="PASS" start="2026-08-23T01:46:15.844816" elapsed="0.001926"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:15.847312" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:15.846999" elapsed="0.000345"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:15.848079" level="INFO">${encoded} = /rests</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-08-23T01:46:15.847869" elapsed="0.000235"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:15.848153" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T01:46:15.848311" level="INFO">${encoded_value} = /rests</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-08-23T01:46:15.847544" elapsed="0.000797"/>
</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-08-23T01:46:15.848517" elapsed="0.000225"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-23T01:46:15.846870" elapsed="0.001912"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-23T01:46:15.832457" elapsed="0.016360"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-23T01:46:15.848876" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T01:46:15.849039" level="INFO">${mapping_to_use} = {'DEVICE_IP': '10.30.170.114', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', '...</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-23T01:46:15.831225" elapsed="0.017840"/>
</kw>
<status status="PASS" start="2026-08-23T01:46:15.830919" elapsed="0.018182"/>
</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-08-23T01:46:15.849271" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:15.849126" elapsed="0.000200"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:15.830896" elapsed="0.018450"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T01:46:15.850444" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</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-08-23T01:46:15.849544" elapsed="0.000928"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T01:46:15.850570" elapsed="0.000052"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="PASS" start="2026-08-23T01:46:15.826561" elapsed="0.024340"/>
</kw>
<msg time="2026-08-23T01:46:15.850995" 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-08-23T01:46:15.812892" elapsed="0.038200"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:15.873317" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:15.895542" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:15.917676" 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-08-23T01:46:15.917952" 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-08-23T01:46:15.918179" 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-08-23T01:46:15.918751" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:15.918485" elapsed="0.000370"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:15.918469" elapsed="0.000477"/>
</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-08-23T01:46:15.919147" elapsed="0.000045"/>
</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-08-23T01:46:15.919476" elapsed="0.000045"/>
</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-08-23T01:46:15.919804" elapsed="0.000065"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T01:46:15.918439" elapsed="0.001562"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T01:46:15.918309" elapsed="0.001753"/>
</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-08-23T01:46:15.920212" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T01:46:15.920368" elapsed="0.000017"/>
</return>
<msg time="2026-08-23T01:46:15.920489" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</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-08-23T01:46:15.808440" elapsed="0.112075"/>
</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-08-23T01:46:15.948126" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/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-08-23T01:46:15.947724" elapsed="0.000430"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T01:46:15.948925" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/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-08-23T01:46:15.948693" elapsed="0.000298">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/data.xml' does not exist.</status>
</kw>
<msg time="2026-08-23T01:46:15.949084" 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-08-23T01:46:15.948362" elapsed="0.000745"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T01:46:15.949708" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/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-08-23T01:46:15.949317" elapsed="0.000418"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T01:46:15.950127" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/data.xml"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/data.xml&lt;/a&gt;'.</msg>
<msg time="2026-08-23T01:46:15.950254" level="INFO">${template} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;$DEVICE_NAME&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;$DEVICE_IP&lt;/host&gt;
    &lt;port&gt;$DEVI...</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T01:46:15.949988" elapsed="0.000294"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:15.950728" level="INFO">&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;$DEVICE_NAME&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;$DEVICE_IP&lt;/host&gt;
    &lt;port&gt;$DEVICE_PORT&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;$DEVICE_USER&lt;/username&gt;
      &lt;password&gt;$DEVICE_PASSWORD&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt;
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:15.950484" 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-08-23T01:46:15.951225" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:15.950930" elapsed="0.000355"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T01:46:15.951751" level="INFO">${mapping_to_use} = {'DEVICE_IP': '10.30.170.114', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', '...</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-08-23T01:46:15.951456" elapsed="0.000354"/>
</kw>
<status status="PASS" start="2026-08-23T01:46:15.951311" elapsed="0.000557"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:15.950902" elapsed="0.000988"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T01:46:15.952784" level="INFO">${final_text} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.114&lt;/host&gt;
    &lt;port&gt;283...</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-08-23T01:46:15.952088" elapsed="0.000727"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T01:46:15.952967" elapsed="0.000055"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="PASS" start="2026-08-23T01:46:15.946745" elapsed="0.006499"/>
</kw>
<msg time="2026-08-23T01:46:15.953337" 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-08-23T01:46:15.933401" elapsed="0.020033"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:15.976793" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:15.999011" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:16.021269" 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-08-23T01:46:16.021508" 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-08-23T01:46:16.021728" 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-08-23T01:46:16.022348" elapsed="0.000044"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:16.022050" elapsed="0.000405"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:16.022035" elapsed="0.000506"/>
</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-08-23T01:46:16.022742" elapsed="0.000045"/>
</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-08-23T01:46:16.023089" elapsed="0.000045"/>
</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-08-23T01:46:16.023450" elapsed="0.000053"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T01:46:16.022005" elapsed="0.001620"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T01:46:16.021872" elapsed="0.001813"/>
</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-08-23T01:46:16.023850" elapsed="0.000023"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T01:46:16.024005" elapsed="0.000018"/>
</return>
<msg time="2026-08-23T01:46:16.024133" level="INFO">${data} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.114&lt;/host&gt;
    &lt;port&gt;283...</msg>
<var>${data}</var>
<arg>folder=${folder}</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-08-23T01:46:15.930590" elapsed="0.093602"/>
</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-08-23T01:46:16.026782" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/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-08-23T01:46:16.026254" elapsed="0.000709">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-23T01:46:16.027094" 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-08-23T01:46:16.024938" elapsed="0.002181"/>
</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-08-23T01:46:16.027567" elapsed="0.000074"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:16.027228" elapsed="0.000492"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T01:46:16.029003" 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-08-23T01:46:16.028273" elapsed="0.000771"/>
</kw>
<status status="PASS" start="2026-08-23T01:46:16.027747" elapsed="0.001377"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:16.027208" elapsed="0.001939"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T01:46:16.031955" 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-08-23T01:46:16.029298" elapsed="0.002684"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-23T01:46:16.032079" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T01:46:16.032236" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-23T01:46:16.024576" elapsed="0.007684"/>
</kw>
<kw name="Put_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:16.034142" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:16.033636" elapsed="0.000568"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:16.034856" level="INFO">&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.114&lt;/host&gt;
    &lt;port&gt;2830&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;admin&lt;/username&gt;
      &lt;password&gt;admin&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt;</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:16.034369" elapsed="0.000558"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:16.035563" 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-08-23T01:46:16.035090" elapsed="0.000534"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:16.036281" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:16.035785" elapsed="0.000560"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-08-23T01:46:16.037825" 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-08-23T01:46:16.037247" elapsed="0.000742"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-08-23T01:46:16.038811" 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-08-23T01:46:16.038252" elapsed="0.000725"/>
</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-08-23T01:46:16.039234" elapsed="0.000486"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:16.040723" 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-08-23T01:46:16.040046" elapsed="0.000937"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-08-23T01:46:16.041070" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T01:46:16.041342" 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-08-23T01:46:16.036557" elapsed="0.004811"/>
</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-08-23T01:46:16.054537" level="INFO">PUT Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Content-Length': '439', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.114&lt;/host&gt;
    &lt;port&gt;2830&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;admin&lt;/username&gt;
      &lt;password&gt;admin&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt; 
 </msg>
<msg time="2026-08-23T01:46:16.054653" level="INFO">PUT Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 status=404, reason=Not Found 
 headers={'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:16.054760" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</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-08-23T01:46:16.049753" elapsed="0.005941">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</kw>
<status status="FAIL" start="2026-08-23T01:46:16.041475" elapsed="0.014468">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</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-08-23T01:46:16.056244" elapsed="0.000104"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:16.055994" elapsed="0.000533"/>
</branch>
<status status="FAIL" start="2026-08-23T01:46:16.041456" elapsed="0.015107">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</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-08-23T01:46:16.057250" elapsed="0.000039"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T01:46:16.057460" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-23T01:46:16.057407" elapsed="0.000191"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:16.057381" elapsed="0.000251"/>
</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-08-23T01:46:16.057863" elapsed="0.000034"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T01:46:16.058014" elapsed="0.000023"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>content_type=${content_type}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</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-08-23T01:46:16.032663" elapsed="0.025506">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T01:46:16.058272" elapsed="0.000021"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>extension=xml</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>content_type=${HEADERS_XML}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>endline=${\n}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve URI and data from folder, call Put_To_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-23T01:46:15.797448" elapsed="0.260960">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=response</arg>
<arg>mapping=${mapping}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:16.058799" elapsed="0.000057"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:16.058556" elapsed="0.000363"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:16.058532" elapsed="0.000421"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T01:46:16.058998" elapsed="0.000020"/>
</return>
<arg>folder=${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Add arguments sensible for XML data, return Put_Templated response text.
Optionally, verification against response.xml (no iteration) is called.</doc>
<status status="FAIL" start="2026-08-23T01:46:15.794766" elapsed="0.264369">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</kw>
<status status="FAIL" start="2026-08-23T01:46:15.794538" elapsed="0.264690">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</branch>
<status status="FAIL" start="2026-08-23T01:46:15.794079" elapsed="0.265188">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</if>
<kw name="Set To Dictionary" owner="Collections">
<arg>${NetconfKeywords__mounted_device_types}</arg>
<arg>${device_name}</arg>
<arg>${device_type}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:16.059477" elapsed="0.000030"/>
</kw>
<arg>${device_name}</arg>
<arg>device_type=full-uri-device</arg>
<arg>device_port=${DEVICE_PORT}</arg>
<arg>device_address=${device_ip}</arg>
<arg>device_user=admin</arg>
<arg>device_password=admin</arg>
<arg>session=${session}</arg>
<doc>Tell Netconf about the specified device so it can add it into its configuration.</doc>
<status status="FAIL" start="2026-08-23T01:46:15.768939" elapsed="0.290697">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</kw>
<arg>${DEVICE_NAME}</arg>
<arg>${session}</arg>
<arg>${ODL_SYSTEM_${node_index}_IP}</arg>
<doc>Configures the device via REST api.</doc>
<status status="FAIL" start="2026-08-23T01:46:15.767601" elapsed="0.292184">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<var>&amp;{mapping}</var>
<arg>DEVICE_NAME=${DEVICE_NAME}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:16.060124" elapsed="0.000031"/>
</kw>
<kw name="Wait_Netconf_Device_Mounted">
<arg>${DEVICE_NAME}</arg>
<arg>${session}</arg>
<arg>${mapping}</arg>
<doc>Checks weather the device was mounted.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:16.060392" elapsed="0.000031"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:16.070720" elapsed="0.000029"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<var>${mod_session}</var>
<arg>member_index=${idx}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:16.071069" elapsed="0.000024"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5x</arg>
<arg>3s</arg>
<arg>TemplatedRequests.Get_As_Xml_Templated</arg>
<arg>${NETCONF_FOLDER}${/}${version}${/}netconf-state</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${mod_session}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:16.071248" elapsed="0.000021"/>
</kw>
<var name="${idx}"/>
<status status="NOT RUN" start="2026-08-23T01:46:16.070879" elapsed="0.000440"/>
</iter>
<var>${idx}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="NOT RUN" start="2026-08-23T01:46:16.070807" elapsed="0.000544"/>
</for>
<kw name="Remove_Netconf_Device" type="TEARDOWN">
<kw name="Remove_Device_From_Netconf" owner="NetconfKeywords">
<kw name="Pop From Dictionary" owner="Collections">
<msg time="2026-08-23T01:46:16.072762" level="INFO">${device_type} = None</msg>
<msg time="2026-08-23T01:46:16.072805" level="FAIL">Dictionary does not contain key 'test-device'.</msg>
<var>${device_type}</var>
<arg>${NetconfKeywords__mounted_device_types}</arg>
<arg>${device_name}</arg>
<doc>Pops the given ``key`` from the ``dictionary`` and returns its value.</doc>
<status status="FAIL" start="2026-08-23T01:46:16.072479" elapsed="0.000404">Dictionary does not contain key 'test-device'.</status>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T01:46:16.073494" level="INFO">${mapping} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping}</var>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-23T01:46:16.073060" elapsed="0.000460"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T01:46:16.092120" elapsed="0.000855"/>
</kw>
<msg time="2026-08-23T01:46:16.093199" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T01:46:16.091746" elapsed="0.001519"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return scandium if vanadium is at least ${lower_bound},
return calcium otherwise.</doc>
<status status="PASS" start="2026-08-23T01:46:16.091336" elapsed="0.002004"/>
</kw>
<msg time="2026-08-23T01:46:16.093392" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T01:46:16.082559" elapsed="0.010891"/>
</kw>
<msg time="2026-08-23T01:46:16.093557" level="INFO">${version} = scandium</msg>
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-08-23T01:46:16.082210" elapsed="0.011371"/>
</kw>
<kw name="Delete_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-08-23T01:46:16.137319" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T01:46:16.136638" elapsed="0.000790"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T01:46:16.139007" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-23T01:46:16.138498" elapsed="0.000615">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-23T01:46:16.139239" 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-08-23T01:46:16.137731" elapsed="0.001614"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T01:46:16.140733" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None/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-08-23T01:46:16.139688" elapsed="0.001172"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T01:46:16.141463" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-23T01:46:16.141685" level="INFO">${template} = None</msg>
<msg time="2026-08-23T01:46:16.141773" level="FAIL">FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="FAIL" start="2026-08-23T01:46:16.141247" elapsed="0.000815">FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'</status>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:16.142938" level="INFO">None</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:16.142432" elapsed="0.000568"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:16.144937" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:16.144657" elapsed="0.000325"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T01:46:16.145625" 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-08-23T01:46:16.145182" elapsed="0.000470"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:16.146506" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:16.146193" elapsed="0.000339"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:16.147298" level="INFO">${encoded} = test-device</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-08-23T01:46:16.147079" elapsed="0.000245"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:16.147375" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T01:46:16.147529" level="INFO">${encoded_value} = test-device</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-08-23T01:46:16.146716" elapsed="0.000837"/>
</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-08-23T01:46:16.147703" elapsed="0.000296"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-23T01:46:16.146056" elapsed="0.001985"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:16.148580" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:16.148285" elapsed="0.000320"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:16.149362" level="INFO">${encoded} = /rests</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-08-23T01:46:16.149143" elapsed="0.000244"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:16.149437" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T01:46:16.149587" level="INFO">${encoded_value} = /rests</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-08-23T01:46:16.148785" elapsed="0.000826"/>
</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-08-23T01:46:16.149758" elapsed="0.000244"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-23T01:46:16.148153" elapsed="0.001890"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-23T01:46:16.145751" elapsed="0.004346"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-23T01:46:16.150162" elapsed="0.000070"/>
</return>
<msg time="2026-08-23T01:46:16.150563" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-23T01:46:16.143830" elapsed="0.006821"/>
</kw>
<status status="PASS" start="2026-08-23T01:46:16.143171" elapsed="0.007556"/>
</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-08-23T01:46:16.151044" elapsed="0.000083"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:16.150805" elapsed="0.000401"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:16.143149" elapsed="0.008129"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T01:46:16.152295" level="INFO">${final_text} = None</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-08-23T01:46:16.151463" elapsed="0.000938"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T01:46:16.152626" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None/${file_name}.</doc>
<status status="FAIL" start="2026-08-23T01:46:16.135658" elapsed="0.017171">FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'</status>
</kw>
<msg time="2026-08-23T01:46:16.152906" 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="FAIL" start="2026-08-23T01:46:16.122618" elapsed="0.030349"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:16.165482" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:16.177968" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:16.190395" 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-08-23T01:46:16.190586" 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-08-23T01:46:16.190758" 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-08-23T01:46:16.191189" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:16.191046" elapsed="0.000199"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:16.191031" 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-08-23T01:46:16.191410" 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-08-23T01:46:16.191576" 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-08-23T01:46:16.191737" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T01:46:16.191001" elapsed="0.000789"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T01:46:16.190848" elapsed="0.000967"/>
</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-08-23T01:46:16.191985" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T01:46:16.192061" elapsed="0.000015"/>
</return>
<msg time="2026-08-23T01:46:16.192215" level="INFO">${uri} = None</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=${location}</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="FAIL" start="2026-08-23T01:46:16.118238" elapsed="0.074004">FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'</status>
</kw>
<kw name="Delete_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:16.193471" level="INFO">None</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:16.193178" elapsed="0.000339"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:46:16.199745" level="INFO">DELETE Request : url=http://10.30.170.114:8181/ 
 path_url=/ 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Length': '0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:16.199791" level="INFO">DELETE Response : url=http://10.30.170.114:8181/ 
 status=404, reason=Not Found 
 headers={'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:16.199937" level="INFO">${response} = None</msg>
<msg time="2026-08-23T01:46:16.199980" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:46:16.195803" elapsed="0.004513">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/</status>
</kw>
<status status="FAIL" start="2026-08-23T01:46:16.193584" elapsed="0.006814">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/</status>
</branch>
<branch type="ELSE">
<kw name="DELETE On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:16.200581" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:16.200431" elapsed="0.000212"/>
</branch>
<status status="FAIL" start="2026-08-23T01:46:16.193566" elapsed="0.007100">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/</status>
</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-08-23T01:46:16.204468" level="FAIL">Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="FAIL" start="2026-08-23T01:46:16.201880" elapsed="0.002654">Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<status status="FAIL" start="2026-08-23T01:46:16.201642" elapsed="0.002959">Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</branch>
<status status="FAIL" start="2026-08-23T01:46:16.201624" elapsed="0.003008">Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:16.208417" level="FAIL">Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="FAIL" start="2026-08-23T01:46:16.204948" elapsed="0.003517">Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</status>
</kw>
<status status="FAIL" start="2026-08-23T01:46:16.204702" elapsed="0.003858">Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</status>
</branch>
<status status="FAIL" start="2026-08-23T01:46:16.204685" elapsed="0.003920">Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</status>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T01:46:16.209464" 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-08-23T01:46:16.208897" 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-08-23T01:46:16.209952" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:16.209600" elapsed="0.000435"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T01:46:16.210870" 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-08-23T01:46:16.210284" elapsed="0.000627"/>
</kw>
<status status="PASS" start="2026-08-23T01:46:16.210069" elapsed="0.000893"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:16.209574" elapsed="0.001417"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T01:46:16.211718" 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-08-23T01:46:16.211210" elapsed="0.000545"/>
</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-08-23T01:46:16.212205" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:16.211884" elapsed="0.000401"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T01:46:16.213128" 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-08-23T01:46:16.212535" elapsed="0.000631"/>
</kw>
<status status="PASS" start="2026-08-23T01:46:16.212317" elapsed="0.000898"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:16.211826" elapsed="0.001419"/>
</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-08-23T01:46:16.213448" elapsed="0.000680"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-08-23T01:46:16.214895" 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-08-23T01:46:16.214361" elapsed="0.000573"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<msg time="2026-08-23T01:46:16.221597" level="FAIL">Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</msg>
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="FAIL" start="2026-08-23T01:46:16.215147" elapsed="0.006484">Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</status>
</kw>
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_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="FAIL" start="2026-08-23T01:46:16.201206" elapsed="0.020562">Several failures occurred:

1) Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'

2) Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'

3) Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</status>
</kw>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-08-23T01:46:16.221830" elapsed="0.000043"/>
</return>
<msg time="2026-08-23T01:46:16.224314" level="INFO">${response_text} = None</msg>
<msg time="2026-08-23T01:46:16.224345" level="FAIL">Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>session=${session}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>DELETE resource at URI, check status_code and return response text..</doc>
<status status="FAIL" start="2026-08-23T01:46:16.192510" elapsed="0.031864">Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-08-23T01:46:16.224441" elapsed="0.000026"/>
</return>
<arg>${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>${mapping}</arg>
<arg>session=${session}</arg>
<arg>location=${location}</arg>
<doc>Resolve URI from folder, issue DELETE request.</doc>
<status status="FAIL" start="2026-08-23T01:46:16.093800" elapsed="0.130820">Several failures occurred:

1) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

2) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Tell Netconf to deconfigure the specified device</doc>
<status status="FAIL" start="2026-08-23T01:46:16.072032" elapsed="0.152754">Several failures occurred:

1) Dictionary does not contain key 'test-device'.

2) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

3) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<arg>${DEVICE_NAME}</arg>
<arg>${session}</arg>
<doc>Removes configured device</doc>
<status status="FAIL" start="2026-08-23T01:46:16.071567" elapsed="0.153362">Several failures occurred:

1) Dictionary does not contain key 'test-device'.

2) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

3) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<arg>${idx}</arg>
<doc>Netconf readines for a node is done by creating a netconf device connected to that node
and performing GET operation got from the device's mount point.</doc>
<status status="FAIL" start="2026-08-23T01:46:15.764027" elapsed="0.460996">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device

Also keyword teardown failed:
Several failures occurred:

1) Dictionary does not contain key 'test-device'.

2) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

3) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<var name="${idx}">1</var>
<status status="FAIL" start="2026-08-23T01:46:15.763600" elapsed="0.461487">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device

Also keyword teardown failed:
Several failures occurred:

1) Dictionary does not contain key 'test-device'.

2) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

3) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</iter>
<var>${idx}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="FAIL" start="2026-08-23T01:46:15.763245" elapsed="0.461904">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device

Also keyword teardown failed:
Several failures occurred:

1) Dictionary does not contain key 'test-device'.

2) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

3) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</for>
<doc>Verifies the netconf readiness for every odl node.</doc>
<status status="FAIL" start="2026-08-23T01:46:15.762625" elapsed="0.462625">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device

Also keyword teardown failed:
Several failures occurred:

1) Dictionary does not contain key 'test-device'.

2) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

3) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<kw name="Check_Netconf_Topology_Ready">
<for flavor="IN">
<iter>
<kw name="Verify_Netconf_Topology_Ready_For_Node">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T01:46:17.229662" 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-08-23T01:46:17.228921" elapsed="0.000810"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-08-23T01:46:17.229878" elapsed="0.000077"/>
</return>
<msg time="2026-08-23T01:46:17.230254" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${node_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-08-23T01:46:17.228110" elapsed="0.002201"/>
</kw>
<kw name="Configure_Netconf_Device">
<kw name="Configure_Device_In_Netconf" owner="NetconfKeywords">
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T01:46:17.254796" elapsed="0.000887"/>
</kw>
<msg time="2026-08-23T01:46:17.255825" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T01:46:17.254358" elapsed="0.001542"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return scandium if vanadium is at least ${lower_bound},
return calcium otherwise.</doc>
<status status="PASS" start="2026-08-23T01:46:17.253963" elapsed="0.002014"/>
</kw>
<msg time="2026-08-23T01:46:17.256019" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T01:46:17.245393" elapsed="0.010671"/>
</kw>
<msg time="2026-08-23T01:46:17.256165" level="INFO">${version} = scandium</msg>
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-08-23T01:46:17.245061" elapsed="0.011128"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T01:46:17.257089" level="INFO">${mapping} = {'DEVICE_IP': '10.30.170.114', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', '...</msg>
<var>${mapping}</var>
<arg>DEVICE_IP=${device_address}</arg>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>DEVICE_PORT=${device_port}</arg>
<arg>DEVICE_USER=${device_user}</arg>
<arg>DEVICE_PASSWORD=${device_password}</arg>
<arg>DEVICE_KEY=${device_key}</arg>
<arg>SCHEMA_DIRECTORY=${schema_directory}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-23T01:46:17.256351" elapsed="0.000766"/>
</kw>
<if>
<branch type="IF" condition="'${http_method}'=='post'">
<kw name="Post_As_Xml_Templated" owner="TemplatedRequests">
<arg>folder=${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</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="NOT RUN" start="2026-08-23T01:46:17.257592" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:17.257269" elapsed="0.000391"/>
</branch>
<branch type="ELSE">
<kw name="Put_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Put_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-08-23T01:46:17.290874" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T01:46:17.290466" elapsed="0.000438"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T01:46:17.291738" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-23T01:46:17.291460" elapsed="0.000358">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-23T01:46:17.291936" 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-08-23T01:46:17.291124" elapsed="0.000842"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T01:46:17.292579" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/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-08-23T01:46:17.292182" elapsed="0.000424"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T01:46:17.292988" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/location.uri"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-23T01:46:17.293158" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T01:46:17.292817" elapsed="0.000367"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:17.293641" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:17.293390" elapsed="0.000296"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:17.294734" level="INFO">mapping: {'DEVICE_IP': '10.30.170.114', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:17.294476" elapsed="0.000304"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T01:46:17.295231" 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-08-23T01:46:17.294968" elapsed="0.000290"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:17.295932" level="INFO">${value} = 10.30.170.114</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:17.295616" elapsed="0.000342"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:17.296686" level="INFO">${encoded} = 10.30.170.114</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-08-23T01:46:17.296463" elapsed="0.000248"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:17.296760" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T01:46:17.296951" level="INFO">${encoded_value} = 10.30.170.114</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-08-23T01:46:17.296140" elapsed="0.000836"/>
</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-08-23T01:46:17.297126" elapsed="0.000257"/>
</kw>
<var name="${key}">DEVICE_IP</var>
<var name="${value}">10.30.170.114</var>
<status status="PASS" start="2026-08-23T01:46:17.295482" elapsed="0.001940"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:17.297991" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:17.297666" elapsed="0.000352"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:17.298744" level="INFO">${encoded} = test-device</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-08-23T01:46:17.298534" elapsed="0.000235"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:17.298817" elapsed="0.000044"/>
</return>
<msg time="2026-08-23T01:46:17.298984" level="INFO">${encoded_value} = test-device</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-08-23T01:46:17.298197" 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-08-23T01:46:17.299211" elapsed="0.000225"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-23T01:46:17.297536" elapsed="0.001940"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:17.300038" level="INFO">${value} = 2830</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:17.299717" elapsed="0.000347"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:17.300932" level="INFO">${encoded} = 2830</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-08-23T01:46:17.300561" elapsed="0.000397"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:17.301008" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T01:46:17.301158" level="INFO">${encoded_value} = 2830</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-08-23T01:46:17.300243" elapsed="0.000940"/>
</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-08-23T01:46:17.301329" elapsed="0.000225"/>
</kw>
<var name="${key}">DEVICE_PORT</var>
<var name="${value}">2830</var>
<status status="PASS" start="2026-08-23T01:46:17.299587" elapsed="0.002006"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:17.302159" level="INFO">${value} = admin</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:17.301846" elapsed="0.000339"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:17.302898" level="INFO">${encoded} = admin</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-08-23T01:46:17.302673" elapsed="0.000251"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:17.302973" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T01:46:17.303122" level="INFO">${encoded_value} = admin</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-08-23T01:46:17.302364" 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-08-23T01:46:17.303294" elapsed="0.000220"/>
</kw>
<var name="${key}">DEVICE_USER</var>
<var name="${value}">admin</var>
<status status="PASS" start="2026-08-23T01:46:17.301703" elapsed="0.001850"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:17.304115" level="INFO">${value} = admin</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:17.303803" elapsed="0.000337"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:17.304978" level="INFO">${encoded} = admin</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-08-23T01:46:17.304729" elapsed="0.000275"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:17.305054" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T01:46:17.305202" level="INFO">${encoded_value} = admin</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-08-23T01:46:17.304416" 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-08-23T01:46:17.305372" elapsed="0.000220"/>
</kw>
<var name="${key}">DEVICE_PASSWORD</var>
<var name="${value}">admin</var>
<status status="PASS" start="2026-08-23T01:46:17.303673" elapsed="0.001958"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:17.306208" level="INFO">${value} = device-key</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:17.305885" elapsed="0.000349"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:17.306961" level="INFO">${encoded} = device-key</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-08-23T01:46:17.306732" elapsed="0.000255"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:17.307036" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T01:46:17.307192" level="INFO">${encoded_value} = device-key</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-08-23T01:46:17.306413" elapsed="0.000803"/>
</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-08-23T01:46:17.307365" elapsed="0.000218"/>
</kw>
<var name="${key}">DEVICE_KEY</var>
<var name="${value}">device-key</var>
<status status="PASS" start="2026-08-23T01:46:17.305741" elapsed="0.001882"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:17.308176" level="INFO">${value} = /tmp/schema</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:17.307874" elapsed="0.000327"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:17.308938" level="INFO">${encoded} = /tmp/schema</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-08-23T01:46:17.308713" elapsed="0.000250"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:17.309012" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T01:46:17.309161" level="INFO">${encoded_value} = /tmp/schema</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-08-23T01:46:17.308378" elapsed="0.000807"/>
</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-08-23T01:46:17.309341" elapsed="0.000259"/>
</kw>
<var name="${key}">SCHEMA_DIRECTORY</var>
<var name="${value}">/tmp/schema</var>
<status status="PASS" start="2026-08-23T01:46:17.307732" elapsed="0.001908"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:17.310223" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:17.309895" elapsed="0.000354"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:17.310984" level="INFO">${encoded} = /rests</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-08-23T01:46:17.310758" elapsed="0.000251"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:17.311058" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T01:46:17.311210" level="INFO">${encoded_value} = /rests</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-08-23T01:46:17.310439" elapsed="0.000795"/>
</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-08-23T01:46:17.311380" elapsed="0.000220"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-23T01:46:17.309751" elapsed="0.001888"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-23T01:46:17.295306" elapsed="0.016368"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-23T01:46:17.311717" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T01:46:17.311894" level="INFO">${mapping_to_use} = {'DEVICE_IP': '10.30.170.114', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', '...</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-23T01:46:17.294148" elapsed="0.017773"/>
</kw>
<status status="PASS" start="2026-08-23T01:46:17.293804" elapsed="0.018149"/>
</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-08-23T01:46:17.312122" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:17.311978" elapsed="0.000200"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:17.293783" elapsed="0.018415"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T01:46:17.313272" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</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-08-23T01:46:17.312393" elapsed="0.000907"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T01:46:17.313398" elapsed="0.000052"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="PASS" start="2026-08-23T01:46:17.289327" elapsed="0.024346"/>
</kw>
<msg time="2026-08-23T01:46:17.313762" 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-08-23T01:46:17.275830" elapsed="0.038045"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:17.336172" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:17.358130" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:17.379916" 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-08-23T01:46:17.380156" 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-08-23T01:46:17.380383" 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-08-23T01:46:17.380964" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:17.380686" elapsed="0.000363"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:17.380670" elapsed="0.000465"/>
</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-08-23T01:46:17.381333" elapsed="0.000044"/>
</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-08-23T01:46:17.381656" elapsed="0.000044"/>
</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-08-23T01:46:17.382017" elapsed="0.000045"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T01:46:17.380640" elapsed="0.001544"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T01:46:17.380511" elapsed="0.001733"/>
</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-08-23T01:46:17.382393" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T01:46:17.382552" elapsed="0.000017"/>
</return>
<msg time="2026-08-23T01:46:17.382673" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</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-08-23T01:46:17.271423" elapsed="0.111276"/>
</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-08-23T01:46:17.410440" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/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-08-23T01:46:17.410063" elapsed="0.000405"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T01:46:17.411254" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/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-08-23T01:46:17.411030" elapsed="0.000291">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/data.xml' does not exist.</status>
</kw>
<msg time="2026-08-23T01:46:17.411419" 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-08-23T01:46:17.410677" elapsed="0.000766"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T01:46:17.412075" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/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-08-23T01:46:17.411654" elapsed="0.000448"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T01:46:17.412451" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/data.xml"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/data.xml&lt;/a&gt;'.</msg>
<msg time="2026-08-23T01:46:17.412583" level="INFO">${template} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;$DEVICE_NAME&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;$DEVICE_IP&lt;/host&gt;
    &lt;port&gt;$DEVI...</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T01:46:17.412310" elapsed="0.000301"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:17.413084" level="INFO">&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;$DEVICE_NAME&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;$DEVICE_IP&lt;/host&gt;
    &lt;port&gt;$DEVICE_PORT&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;$DEVICE_USER&lt;/username&gt;
      &lt;password&gt;$DEVICE_PASSWORD&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt;
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:17.412816" elapsed="0.000320"/>
</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-08-23T01:46:17.413549" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:17.413254" elapsed="0.000355"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T01:46:17.414127" level="INFO">${mapping_to_use} = {'DEVICE_IP': '10.30.170.114', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', '...</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-08-23T01:46:17.413790" elapsed="0.000395"/>
</kw>
<status status="PASS" start="2026-08-23T01:46:17.413633" elapsed="0.000589"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:17.413233" elapsed="0.001010"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T01:46:17.415183" level="INFO">${final_text} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.114&lt;/host&gt;
    &lt;port&gt;283...</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-08-23T01:46:17.414445" elapsed="0.000769"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T01:46:17.415314" elapsed="0.000056"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="PASS" start="2026-08-23T01:46:17.408983" elapsed="0.006612"/>
</kw>
<msg time="2026-08-23T01:46:17.415687" 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-08-23T01:46:17.395569" elapsed="0.020213"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:17.438207" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:17.460169" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:17.482038" 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-08-23T01:46:17.482278" 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-08-23T01:46:17.482467" 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-08-23T01:46:17.483039" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:17.482764" elapsed="0.000360"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:17.482749" elapsed="0.000461"/>
</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-08-23T01:46:17.483410" elapsed="0.000045"/>
</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-08-23T01:46:17.483736" elapsed="0.000044"/>
</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-08-23T01:46:17.484086" elapsed="0.000044"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T01:46:17.482720" elapsed="0.001532"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T01:46:17.482590" elapsed="0.001722"/>
</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-08-23T01:46:17.484464" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T01:46:17.484614" elapsed="0.000018"/>
</return>
<msg time="2026-08-23T01:46:17.484743" level="INFO">${data} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.114&lt;/host&gt;
    &lt;port&gt;283...</msg>
<var>${data}</var>
<arg>folder=${folder}</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-08-23T01:46:17.392748" elapsed="0.092055"/>
</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-08-23T01:46:17.487420" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/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-08-23T01:46:17.486823" elapsed="0.000717">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-23T01:46:17.487670" 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-08-23T01:46:17.485562" elapsed="0.002133"/>
</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-08-23T01:46:17.488211" elapsed="0.000074"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:17.487804" elapsed="0.000561"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T01:46:17.489609" 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-08-23T01:46:17.488958" elapsed="0.000692"/>
</kw>
<status status="PASS" start="2026-08-23T01:46:17.488392" elapsed="0.001336"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:17.487785" elapsed="0.001967"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T01:46:17.492556" 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-08-23T01:46:17.489924" elapsed="0.002659"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-23T01:46:17.492681" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T01:46:17.492909" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-23T01:46:17.485207" elapsed="0.007729"/>
</kw>
<kw name="Put_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:17.494751" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:17.494275" elapsed="0.000538"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:17.495471" level="INFO">&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.114&lt;/host&gt;
    &lt;port&gt;2830&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;admin&lt;/username&gt;
      &lt;password&gt;admin&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt;</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:17.495003" elapsed="0.000535"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:17.496191" 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-08-23T01:46:17.495700" elapsed="0.000551"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:17.496904" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:17.496416" elapsed="0.000547"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-08-23T01:46:17.498561" 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-08-23T01:46:17.497982" elapsed="0.000687"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-08-23T01:46:17.499515" 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-08-23T01:46:17.498987" elapsed="0.000626"/>
</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-08-23T01:46:17.499990" elapsed="0.000484"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:17.501421" 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-08-23T01:46:17.500734" elapsed="0.000895"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-08-23T01:46:17.501714" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T01:46:17.502053" 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-08-23T01:46:17.497175" elapsed="0.004904"/>
</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-08-23T01:46:17.515476" level="INFO">PUT Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Content-Length': '439', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.114&lt;/host&gt;
    &lt;port&gt;2830&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;admin&lt;/username&gt;
      &lt;password&gt;admin&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt; 
 </msg>
<msg time="2026-08-23T01:46:17.515658" level="INFO">PUT Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 status=404, reason=Not Found 
 headers={'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:17.515808" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</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-08-23T01:46:17.510448" elapsed="0.006527">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</kw>
<status status="FAIL" start="2026-08-23T01:46:17.502189" elapsed="0.015014">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</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-08-23T01:46:17.517526" elapsed="0.000108"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:17.517253" elapsed="0.000564"/>
</branch>
<status status="FAIL" start="2026-08-23T01:46:17.502169" elapsed="0.015715">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</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-08-23T01:46:17.518558" elapsed="0.000046"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T01:46:17.518777" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-08-23T01:46:17.518722" elapsed="0.000209"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:17.518697" elapsed="0.000270"/>
</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-08-23T01:46:17.519168" elapsed="0.000031"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T01:46:17.519317" elapsed="0.000023"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>content_type=${content_type}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</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-08-23T01:46:17.493339" elapsed="0.026135">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T01:46:17.519580" elapsed="0.000022"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>extension=xml</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>content_type=${HEADERS_XML}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>endline=${\n}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve URI and data from folder, call Put_To_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-23T01:46:17.260643" elapsed="0.259075">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=response</arg>
<arg>mapping=${mapping}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:17.520142" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:17.519897" elapsed="0.000340"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:17.519871" elapsed="0.000399"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T01:46:17.520316" elapsed="0.000020"/>
</return>
<arg>folder=${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Add arguments sensible for XML data, return Put_Templated response text.
Optionally, verification against response.xml (no iteration) is called.</doc>
<status status="FAIL" start="2026-08-23T01:46:17.257939" elapsed="0.262516">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</kw>
<status status="FAIL" start="2026-08-23T01:46:17.257686" elapsed="0.262864">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</branch>
<status status="FAIL" start="2026-08-23T01:46:17.257246" elapsed="0.263344">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</if>
<kw name="Set To Dictionary" owner="Collections">
<arg>${NetconfKeywords__mounted_device_types}</arg>
<arg>${device_name}</arg>
<arg>${device_type}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:17.520799" elapsed="0.000030"/>
</kw>
<arg>${device_name}</arg>
<arg>device_type=full-uri-device</arg>
<arg>device_port=${DEVICE_PORT}</arg>
<arg>device_address=${device_ip}</arg>
<arg>device_user=admin</arg>
<arg>device_password=admin</arg>
<arg>session=${session}</arg>
<doc>Tell Netconf about the specified device so it can add it into its configuration.</doc>
<status status="FAIL" start="2026-08-23T01:46:17.231828" elapsed="0.289245">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</kw>
<arg>${DEVICE_NAME}</arg>
<arg>${session}</arg>
<arg>${ODL_SYSTEM_${node_index}_IP}</arg>
<doc>Configures the device via REST api.</doc>
<status status="FAIL" start="2026-08-23T01:46:17.230582" elapsed="0.290644">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<var>&amp;{mapping}</var>
<arg>DEVICE_NAME=${DEVICE_NAME}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:17.521489" elapsed="0.000031"/>
</kw>
<kw name="Wait_Netconf_Device_Mounted">
<arg>${DEVICE_NAME}</arg>
<arg>${session}</arg>
<arg>${mapping}</arg>
<doc>Checks weather the device was mounted.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:17.521758" elapsed="0.000032"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:17.531722" elapsed="0.000028"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<var>${mod_session}</var>
<arg>member_index=${idx}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:17.532068" elapsed="0.000025"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5x</arg>
<arg>3s</arg>
<arg>TemplatedRequests.Get_As_Xml_Templated</arg>
<arg>${NETCONF_FOLDER}${/}${version}${/}netconf-state</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${mod_session}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:17.532251" elapsed="0.000021"/>
</kw>
<var name="${idx}"/>
<status status="NOT RUN" start="2026-08-23T01:46:17.531881" elapsed="0.000437"/>
</iter>
<var>${idx}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="NOT RUN" start="2026-08-23T01:46:17.531807" elapsed="0.000537"/>
</for>
<kw name="Remove_Netconf_Device" type="TEARDOWN">
<kw name="Remove_Device_From_Netconf" owner="NetconfKeywords">
<kw name="Pop From Dictionary" owner="Collections">
<msg time="2026-08-23T01:46:17.533742" level="INFO">${device_type} = None</msg>
<msg time="2026-08-23T01:46:17.533786" level="FAIL">Dictionary does not contain key 'test-device'.</msg>
<var>${device_type}</var>
<arg>${NetconfKeywords__mounted_device_types}</arg>
<arg>${device_name}</arg>
<doc>Pops the given ``key`` from the ``dictionary`` and returns its value.</doc>
<status status="FAIL" start="2026-08-23T01:46:17.533469" elapsed="0.000390">Dictionary does not contain key 'test-device'.</status>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T01:46:17.534503" level="INFO">${mapping} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping}</var>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-23T01:46:17.534041" elapsed="0.000493"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T01:46:17.554584" elapsed="0.000877"/>
</kw>
<msg time="2026-08-23T01:46:17.555687" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T01:46:17.554227" elapsed="0.001528"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return scandium if vanadium is at least ${lower_bound},
return calcium otherwise.</doc>
<status status="PASS" start="2026-08-23T01:46:17.553798" elapsed="0.002033"/>
</kw>
<msg time="2026-08-23T01:46:17.555892" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T01:46:17.544917" elapsed="0.011040"/>
</kw>
<msg time="2026-08-23T01:46:17.556060" level="INFO">${version} = scandium</msg>
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-08-23T01:46:17.544547" elapsed="0.011542"/>
</kw>
<kw name="Delete_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-08-23T01:46:17.599390" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T01:46:17.598721" elapsed="0.000777"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T01:46:17.601071" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-23T01:46:17.600564" elapsed="0.000626">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-23T01:46:17.601318" 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-08-23T01:46:17.599798" elapsed="0.001624"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T01:46:17.602851" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None/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-08-23T01:46:17.601767" elapsed="0.001198"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T01:46:17.603557" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-23T01:46:17.603781" level="INFO">${template} = None</msg>
<msg time="2026-08-23T01:46:17.604027" level="FAIL">FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="FAIL" start="2026-08-23T01:46:17.603341" elapsed="0.000791">FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'</status>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:17.604999" level="INFO">None</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:17.604496" elapsed="0.000564"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:17.607023" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:17.606742" elapsed="0.000327"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T01:46:17.607536" 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-08-23T01:46:17.607268" elapsed="0.000294"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:17.608563" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:17.608249" elapsed="0.000340"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:17.609378" level="INFO">${encoded} = test-device</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-08-23T01:46:17.609137" elapsed="0.000267"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:17.609455" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T01:46:17.609608" level="INFO">${encoded_value} = test-device</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-08-23T01:46:17.608774" elapsed="0.000859"/>
</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-08-23T01:46:17.609781" elapsed="0.000298"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-23T01:46:17.607967" elapsed="0.002154"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:17.610665" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:17.610362" elapsed="0.000328"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:17.611453" level="INFO">${encoded} = /rests</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-08-23T01:46:17.611244" elapsed="0.000235"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:17.611528" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T01:46:17.611677" level="INFO">${encoded_value} = /rests</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-08-23T01:46:17.610889" 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-08-23T01:46:17.611863" elapsed="0.000223"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-23T01:46:17.610233" elapsed="0.001894"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-23T01:46:17.607659" elapsed="0.004522"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-23T01:46:17.612245" elapsed="0.000070"/>
</return>
<msg time="2026-08-23T01:46:17.612609" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-23T01:46:17.605975" elapsed="0.006722"/>
</kw>
<status status="PASS" start="2026-08-23T01:46:17.605244" elapsed="0.007528"/>
</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-08-23T01:46:17.613090" elapsed="0.000096"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:17.612869" elapsed="0.000400"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:17.605223" elapsed="0.008120"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T01:46:17.614325" level="INFO">${final_text} = None</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-08-23T01:46:17.613498" elapsed="0.000935"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T01:46:17.614662" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None/${file_name}.</doc>
<status status="FAIL" start="2026-08-23T01:46:17.597739" elapsed="0.017151">FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'</status>
</kw>
<msg time="2026-08-23T01:46:17.614947" 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="FAIL" start="2026-08-23T01:46:17.584920" elapsed="0.030087"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:17.627647" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:17.640164" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:17.652655" 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-08-23T01:46:17.652857" 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-08-23T01:46:17.653031" elapsed="0.000033"/>
</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-08-23T01:46:17.653451" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:17.653308" elapsed="0.000199"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:17.653293" 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-08-23T01:46:17.653672" 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-08-23T01:46:17.653854" 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-08-23T01:46:17.654021" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T01:46:17.653263" elapsed="0.000811"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T01:46:17.653119" elapsed="0.000980"/>
</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-08-23T01:46:17.654239" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T01:46:17.654314" elapsed="0.000015"/>
</return>
<msg time="2026-08-23T01:46:17.654474" level="INFO">${uri} = None</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=${location}</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="FAIL" start="2026-08-23T01:46:17.580599" elapsed="0.073903">FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'</status>
</kw>
<kw name="Delete_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:17.655638" level="INFO">None</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:17.655388" elapsed="0.000294"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:46:17.662240" level="INFO">DELETE Request : url=http://10.30.170.114:8181/ 
 path_url=/ 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Length': '0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:17.662285" level="INFO">DELETE Response : url=http://10.30.170.114:8181/ 
 status=404, reason=Not Found 
 headers={'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:17.662409" level="INFO">${response} = None</msg>
<msg time="2026-08-23T01:46:17.662451" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:46:17.658001" elapsed="0.004790">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/</status>
</kw>
<status status="FAIL" start="2026-08-23T01:46:17.655748" elapsed="0.007141">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/</status>
</branch>
<branch type="ELSE">
<kw name="DELETE On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:17.663072" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:17.662923" elapsed="0.000212"/>
</branch>
<status status="FAIL" start="2026-08-23T01:46:17.655730" elapsed="0.007429">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/</status>
</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-08-23T01:46:17.666984" level="FAIL">Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="FAIL" start="2026-08-23T01:46:17.664345" elapsed="0.002707">Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<status status="FAIL" start="2026-08-23T01:46:17.664130" elapsed="0.002988">Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</branch>
<status status="FAIL" start="2026-08-23T01:46:17.664112" elapsed="0.003039">Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:17.670348" level="FAIL">Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="FAIL" start="2026-08-23T01:46:17.667447" elapsed="0.002950">Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</status>
</kw>
<status status="FAIL" start="2026-08-23T01:46:17.667221" elapsed="0.003265">Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</status>
</branch>
<status status="FAIL" start="2026-08-23T01:46:17.667204" elapsed="0.003333">Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</status>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T01:46:17.671371" 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-08-23T01:46:17.670786" 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-08-23T01:46:17.671864" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:17.671508" elapsed="0.000441"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T01:46:17.672764" 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-08-23T01:46:17.672202" elapsed="0.000599"/>
</kw>
<status status="PASS" start="2026-08-23T01:46:17.671983" elapsed="0.000895"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:17.671483" elapsed="0.001427"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T01:46:17.673655" 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-08-23T01:46:17.673148" elapsed="0.000545"/>
</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-08-23T01:46:17.674150" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:17.673789" elapsed="0.000441"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T01:46:17.675065" 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-08-23T01:46:17.674482" elapsed="0.000621"/>
</kw>
<status status="PASS" start="2026-08-23T01:46:17.674263" elapsed="0.000888"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:17.673764" elapsed="0.001417"/>
</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-08-23T01:46:17.675385" elapsed="0.000673"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-08-23T01:46:17.676780" 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-08-23T01:46:17.676285" elapsed="0.000531"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<msg time="2026-08-23T01:46:17.684145" level="FAIL">Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</msg>
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="FAIL" start="2026-08-23T01:46:17.677074" elapsed="0.007106">Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</status>
</kw>
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_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="FAIL" start="2026-08-23T01:46:17.663668" elapsed="0.020650">Several failures occurred:

1) Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'

2) Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'

3) Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</status>
</kw>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-08-23T01:46:17.684380" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T01:46:17.686810" level="INFO">${response_text} = None</msg>
<msg time="2026-08-23T01:46:17.686854" level="FAIL">Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>session=${session}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>DELETE resource at URI, check status_code and return response text..</doc>
<status status="FAIL" start="2026-08-23T01:46:17.654770" elapsed="0.032115">Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-08-23T01:46:17.686954" elapsed="0.000026"/>
</return>
<arg>${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>${mapping}</arg>
<arg>session=${session}</arg>
<arg>location=${location}</arg>
<doc>Resolve URI from folder, issue DELETE request.</doc>
<status status="FAIL" start="2026-08-23T01:46:17.556308" elapsed="0.130832">Several failures occurred:

1) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

2) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Tell Netconf to deconfigure the specified device</doc>
<status status="FAIL" start="2026-08-23T01:46:17.533009" elapsed="0.154301">Several failures occurred:

1) Dictionary does not contain key 'test-device'.

2) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

3) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<arg>${DEVICE_NAME}</arg>
<arg>${session}</arg>
<doc>Removes configured device</doc>
<status status="FAIL" start="2026-08-23T01:46:17.532540" elapsed="0.154893">Several failures occurred:

1) Dictionary does not contain key 'test-device'.

2) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

3) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<arg>${idx}</arg>
<doc>Netconf readines for a node is done by creating a netconf device connected to that node
and performing GET operation got from the device's mount point.</doc>
<status status="FAIL" start="2026-08-23T01:46:17.227226" elapsed="0.460291">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device

Also keyword teardown failed:
Several failures occurred:

1) Dictionary does not contain key 'test-device'.

2) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

3) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<var name="${idx}">1</var>
<status status="FAIL" start="2026-08-23T01:46:17.226807" elapsed="0.460773">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device

Also keyword teardown failed:
Several failures occurred:

1) Dictionary does not contain key 'test-device'.

2) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

3) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</iter>
<var>${idx}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="FAIL" start="2026-08-23T01:46:17.226474" elapsed="0.461167">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device

Also keyword teardown failed:
Several failures occurred:

1) Dictionary does not contain key 'test-device'.

2) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

3) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</for>
<doc>Verifies the netconf readiness for every odl node.</doc>
<status status="FAIL" start="2026-08-23T01:46:17.225947" elapsed="0.461793">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device

Also keyword teardown failed:
Several failures occurred:

1) Dictionary does not contain key 'test-device'.

2) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

3) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<kw name="Check_Netconf_Topology_Ready">
<for flavor="IN">
<iter>
<kw name="Verify_Netconf_Topology_Ready_For_Node">
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T01:46:18.691975" 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-08-23T01:46:18.691227" elapsed="0.000813"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-08-23T01:46:18.692151" elapsed="0.000069"/>
</return>
<msg time="2026-08-23T01:46:18.692490" level="INFO">${session} = ClusterManagement__session_1</msg>
<var>${session}</var>
<arg>member_index=${node_index}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="PASS" start="2026-08-23T01:46:18.690366" elapsed="0.002180"/>
</kw>
<kw name="Configure_Netconf_Device">
<kw name="Configure_Device_In_Netconf" owner="NetconfKeywords">
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T01:46:18.720399" elapsed="0.000886"/>
</kw>
<msg time="2026-08-23T01:46:18.721431" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T01:46:18.719977" elapsed="0.001510"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return scandium if vanadium is at least ${lower_bound},
return calcium otherwise.</doc>
<status status="PASS" start="2026-08-23T01:46:18.719573" elapsed="0.001992"/>
</kw>
<msg time="2026-08-23T01:46:18.721607" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T01:46:18.711007" elapsed="0.010645"/>
</kw>
<msg time="2026-08-23T01:46:18.721754" level="INFO">${version} = scandium</msg>
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-08-23T01:46:18.710658" elapsed="0.011120"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T01:46:18.722686" level="INFO">${mapping} = {'DEVICE_IP': '10.30.170.114', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', '...</msg>
<var>${mapping}</var>
<arg>DEVICE_IP=${device_address}</arg>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>DEVICE_PORT=${device_port}</arg>
<arg>DEVICE_USER=${device_user}</arg>
<arg>DEVICE_PASSWORD=${device_password}</arg>
<arg>DEVICE_KEY=${device_key}</arg>
<arg>SCHEMA_DIRECTORY=${schema_directory}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-23T01:46:18.721958" elapsed="0.000756"/>
</kw>
<if>
<branch type="IF" condition="'${http_method}'=='post'">
<kw name="Post_As_Xml_Templated" owner="TemplatedRequests">
<arg>folder=${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</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="NOT RUN" start="2026-08-23T01:46:18.723201" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:18.722875" elapsed="0.000394"/>
</branch>
<branch type="ELSE">
<kw name="Put_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Put_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-08-23T01:46:18.756511" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T01:46:18.756135" elapsed="0.000405"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T01:46:18.757355" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-23T01:46:18.757113" elapsed="0.000319">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-23T01:46:18.757527" 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-08-23T01:46:18.756754" elapsed="0.000797"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T01:46:18.758183" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/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-08-23T01:46:18.757767" elapsed="0.000443"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T01:46:18.758571" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/location.uri"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-23T01:46:18.758714" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T01:46:18.758421" elapsed="0.000318"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:18.759230" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:18.758978" elapsed="0.000296"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:18.760281" level="INFO">mapping: {'DEVICE_IP': '10.30.170.114', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:18.760024" elapsed="0.000302"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T01:46:18.760740" 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-08-23T01:46:18.760482" elapsed="0.000284"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:18.761454" level="INFO">${value} = 10.30.170.114</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:18.761160" elapsed="0.000320"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:18.762216" level="INFO">${encoded} = 10.30.170.114</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-08-23T01:46:18.761997" elapsed="0.000244"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:18.762291" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T01:46:18.762464" level="INFO">${encoded_value} = 10.30.170.114</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-08-23T01:46:18.761662" 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-08-23T01:46:18.762641" elapsed="0.000262"/>
</kw>
<var name="${key}">DEVICE_IP</var>
<var name="${value}">10.30.170.114</var>
<status status="PASS" start="2026-08-23T01:46:18.761025" elapsed="0.001919"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:18.763482" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:18.763186" elapsed="0.000322"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:18.764238" level="INFO">${encoded} = test-device</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-08-23T01:46:18.764019" elapsed="0.000245"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:18.764320" elapsed="0.000032"/>
</return>
<msg time="2026-08-23T01:46:18.764504" level="INFO">${encoded_value} = test-device</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-08-23T01:46:18.763688" elapsed="0.000842"/>
</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-08-23T01:46:18.764719" elapsed="0.000241"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-23T01:46:18.763056" elapsed="0.001945"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:18.765583" level="INFO">${value} = 2830</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:18.765243" elapsed="0.000365"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:18.766501" level="INFO">${encoded} = 2830</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-08-23T01:46:18.766125" elapsed="0.000403"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:18.766579" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T01:46:18.766729" level="INFO">${encoded_value} = 2830</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-08-23T01:46:18.765787" elapsed="0.000966"/>
</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-08-23T01:46:18.766918" elapsed="0.000223"/>
</kw>
<var name="${key}">DEVICE_PORT</var>
<var name="${value}">2830</var>
<status status="PASS" start="2026-08-23T01:46:18.765113" elapsed="0.002069"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:18.767714" level="INFO">${value} = admin</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:18.767421" elapsed="0.000318"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:18.768451" level="INFO">${encoded} = admin</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-08-23T01:46:18.768245" elapsed="0.000231"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:18.768525" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T01:46:18.768674" level="INFO">${encoded_value} = admin</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-08-23T01:46:18.767934" elapsed="0.000764"/>
</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-08-23T01:46:18.768869" elapsed="0.000221"/>
</kw>
<var name="${key}">DEVICE_USER</var>
<var name="${value}">admin</var>
<status status="PASS" start="2026-08-23T01:46:18.767292" elapsed="0.001838"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:18.769667" level="INFO">${value} = admin</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:18.769372" elapsed="0.000321"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:18.770418" level="INFO">${encoded} = admin</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-08-23T01:46:18.770198" elapsed="0.000246"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:18.770493" elapsed="0.000036"/>
</return>
<msg time="2026-08-23T01:46:18.770652" level="INFO">${encoded_value} = admin</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-08-23T01:46:18.769886" elapsed="0.000790"/>
</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-08-23T01:46:18.770823" elapsed="0.000237"/>
</kw>
<var name="${key}">DEVICE_PASSWORD</var>
<var name="${value}">admin</var>
<status status="PASS" start="2026-08-23T01:46:18.769242" elapsed="0.001857"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:18.771639" level="INFO">${value} = device-key</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:18.771339" elapsed="0.000325"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:18.772407" level="INFO">${encoded} = device-key</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-08-23T01:46:18.772191" elapsed="0.000242"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:18.772481" elapsed="0.000034"/>
</return>
<msg time="2026-08-23T01:46:18.772640" level="INFO">${encoded_value} = device-key</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-08-23T01:46:18.771856" elapsed="0.000809"/>
</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-08-23T01:46:18.772812" elapsed="0.000237"/>
</kw>
<var name="${key}">DEVICE_KEY</var>
<var name="${value}">device-key</var>
<status status="PASS" start="2026-08-23T01:46:18.771209" elapsed="0.001880"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:18.773623" level="INFO">${value} = /tmp/schema</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:18.773329" elapsed="0.000320"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:18.774380" level="INFO">${encoded} = /tmp/schema</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-08-23T01:46:18.774167" elapsed="0.000260"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:18.774477" elapsed="0.000034"/>
</return>
<msg time="2026-08-23T01:46:18.774633" level="INFO">${encoded_value} = /tmp/schema</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-08-23T01:46:18.773825" 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-08-23T01:46:18.774821" elapsed="0.000289"/>
</kw>
<var name="${key}">SCHEMA_DIRECTORY</var>
<var name="${value}">/tmp/schema</var>
<status status="PASS" start="2026-08-23T01:46:18.773200" elapsed="0.001951"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:18.775687" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:18.775392" elapsed="0.000321"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:18.776432" level="INFO">${encoded} = /rests</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-08-23T01:46:18.776224" elapsed="0.000233"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:18.776506" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T01:46:18.776663" level="INFO">${encoded_value} = /rests</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-08-23T01:46:18.775908" elapsed="0.000780"/>
</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-08-23T01:46:18.776850" elapsed="0.000230"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-23T01:46:18.775262" elapsed="0.001859"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-23T01:46:18.760814" elapsed="0.016341"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-23T01:46:18.777199" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T01:46:18.777360" level="INFO">${mapping_to_use} = {'DEVICE_IP': '10.30.170.114', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', '...</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-23T01:46:18.759686" elapsed="0.017701"/>
</kw>
<status status="PASS" start="2026-08-23T01:46:18.759391" elapsed="0.018028"/>
</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-08-23T01:46:18.777590" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:18.777445" elapsed="0.000200"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:18.759370" elapsed="0.018295"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T01:46:18.778767" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</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-08-23T01:46:18.777883" elapsed="0.000913"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T01:46:18.778913" elapsed="0.000065"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="PASS" start="2026-08-23T01:46:18.755129" elapsed="0.024075"/>
</kw>
<msg time="2026-08-23T01:46:18.779296" 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-08-23T01:46:18.741526" elapsed="0.037869"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:18.801511" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:18.823499" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:18.845538" 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-08-23T01:46:18.845777" 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-08-23T01:46:18.846016" 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-08-23T01:46:18.846612" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:18.846348" elapsed="0.000349"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:18.846333" elapsed="0.000453"/>
</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-08-23T01:46:18.847008" elapsed="0.000046"/>
</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-08-23T01:46:18.847337" elapsed="0.000044"/>
</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-08-23T01:46:18.847666" elapsed="0.000045"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T01:46:18.846302" elapsed="0.001549"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T01:46:18.846147" elapsed="0.001768"/>
</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-08-23T01:46:18.848064" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T01:46:18.848217" elapsed="0.000018"/>
</return>
<msg time="2026-08-23T01:46:18.848339" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</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-08-23T01:46:18.737108" elapsed="0.111257"/>
</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-08-23T01:46:18.876128" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/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-08-23T01:46:18.875724" elapsed="0.000433"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T01:46:18.876935" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/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-08-23T01:46:18.876696" elapsed="0.000306">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/data.xml' does not exist.</status>
</kw>
<msg time="2026-08-23T01:46:18.877094" 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-08-23T01:46:18.876367" elapsed="0.000751"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T01:46:18.877720" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/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-08-23T01:46:18.877331" elapsed="0.000416"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T01:46:18.878113" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/data.xml"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/data.xml&lt;/a&gt;'.</msg>
<msg time="2026-08-23T01:46:18.878255" level="INFO">${template} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;$DEVICE_NAME&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;$DEVICE_IP&lt;/host&gt;
    &lt;port&gt;$DEVI...</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T01:46:18.877976" elapsed="0.000316"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:18.878744" level="INFO">&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;$DEVICE_NAME&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;$DEVICE_IP&lt;/host&gt;
    &lt;port&gt;$DEVICE_PORT&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;$DEVICE_USER&lt;/username&gt;
      &lt;password&gt;$DEVICE_PASSWORD&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt;
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:18.878498" 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-08-23T01:46:18.879232" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:18.878934" elapsed="0.000358"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T01:46:18.879754" level="INFO">${mapping_to_use} = {'DEVICE_IP': '10.30.170.114', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '2830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'admin', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', '...</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-08-23T01:46:18.879459" elapsed="0.000354"/>
</kw>
<status status="PASS" start="2026-08-23T01:46:18.879318" elapsed="0.000570"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:18.878912" elapsed="0.001003"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T01:46:18.880809" level="INFO">${final_text} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.114&lt;/host&gt;
    &lt;port&gt;283...</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-08-23T01:46:18.880114" elapsed="0.000745"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T01:46:18.880961" elapsed="0.000055"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="PASS" start="2026-08-23T01:46:18.874734" elapsed="0.006506"/>
</kw>
<msg time="2026-08-23T01:46:18.881331" 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-08-23T01:46:18.861344" elapsed="0.020083"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:18.903670" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:18.925591" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:18.948621" elapsed="0.000045"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:18.948930" 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-08-23T01:46:18.949134" 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-08-23T01:46:18.949731" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:18.949462" elapsed="0.000354"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:18.949446" elapsed="0.000479"/>
</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-08-23T01:46:18.950154" elapsed="0.000046"/>
</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-08-23T01:46:18.950490" elapsed="0.000044"/>
</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-08-23T01:46:18.950814" elapsed="0.000064"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T01:46:18.949406" elapsed="0.001596"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T01:46:18.949261" elapsed="0.001808"/>
</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-08-23T01:46:18.951218" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T01:46:18.951370" elapsed="0.000018"/>
</return>
<msg time="2026-08-23T01:46:18.951513" level="INFO">${data} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.114&lt;/host&gt;
    &lt;port&gt;283...</msg>
<var>${data}</var>
<arg>folder=${folder}</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-08-23T01:46:18.858517" elapsed="0.093081"/>
</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-08-23T01:46:18.954267" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/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-08-23T01:46:18.953678" elapsed="0.000717">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-23T01:46:18.954525" 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-08-23T01:46:18.952382" elapsed="0.002168"/>
</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-08-23T01:46:18.955149" elapsed="0.000074"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:18.954660" elapsed="0.000644"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T01:46:18.956443" 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-08-23T01:46:18.955794" elapsed="0.000689"/>
</kw>
<status status="PASS" start="2026-08-23T01:46:18.955331" elapsed="0.001231"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:18.954640" elapsed="0.001946"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T01:46:18.959470" 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-08-23T01:46:18.956735" elapsed="0.002762"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-23T01:46:18.959595" elapsed="0.000033"/>
</return>
<msg time="2026-08-23T01:46:18.959759" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-23T01:46:18.952023" elapsed="0.007761"/>
</kw>
<kw name="Put_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:18.961621" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:18.961135" elapsed="0.000548"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:18.962367" level="INFO">&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.114&lt;/host&gt;
    &lt;port&gt;2830&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;admin&lt;/username&gt;
      &lt;password&gt;admin&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt;</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:18.961861" elapsed="0.000574"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:18.963170" 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-08-23T01:46:18.962597" elapsed="0.000632"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:18.963882" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:18.963391" elapsed="0.000553"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-08-23T01:46:18.965448" 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-08-23T01:46:18.964829" elapsed="0.000719"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-08-23T01:46:18.966378" 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-08-23T01:46:18.965809" elapsed="0.000674"/>
</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-08-23T01:46:18.966740" elapsed="0.000538"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:18.968272" 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-08-23T01:46:18.967545" elapsed="0.000924"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-08-23T01:46:18.968556" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T01:46:18.968980" 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-08-23T01:46:18.964157" elapsed="0.004851"/>
</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-08-23T01:46:18.982497" level="INFO">PUT Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Content-Length': '439', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.114&lt;/host&gt;
    &lt;port&gt;2830&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;admin&lt;/username&gt;
      &lt;password&gt;admin&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt; 
 </msg>
<msg time="2026-08-23T01:46:18.982619" level="INFO">PUT Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 status=404, reason=Not Found 
 headers={'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:18.982727" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</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-08-23T01:46:18.977486" elapsed="0.006060">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</kw>
<status status="FAIL" start="2026-08-23T01:46:18.969120" elapsed="0.014591">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</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-08-23T01:46:18.983947" elapsed="0.000077"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:18.983747" elapsed="0.000408"/>
</branch>
<status status="FAIL" start="2026-08-23T01:46:18.969100" elapsed="0.015081">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</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-08-23T01:46:18.984660" elapsed="0.000028"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T01:46:18.984809" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T01:46:18.984772" elapsed="0.000154"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:18.984754" elapsed="0.000198"/>
</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-08-23T01:46:18.985096" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T01:46:18.985202" elapsed="0.000017"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>content_type=${content_type}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</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-08-23T01:46:18.960200" elapsed="0.025114">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T01:46:18.985389" elapsed="0.000016"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>extension=xml</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>content_type=${HEADERS_XML}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>endline=${\n}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve URI and data from folder, call Put_To_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-23T01:46:18.726188" elapsed="0.259311">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=response</arg>
<arg>mapping=${mapping}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:18.985783" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:18.985607" elapsed="0.000265"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:18.985590" elapsed="0.000307"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T01:46:18.985954" elapsed="0.000017"/>
</return>
<arg>folder=${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Add arguments sensible for XML data, return Put_Templated response text.
Optionally, verification against response.xml (no iteration) is called.</doc>
<status status="FAIL" start="2026-08-23T01:46:18.723524" elapsed="0.262536">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</kw>
<status status="FAIL" start="2026-08-23T01:46:18.723294" elapsed="0.262834">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</branch>
<status status="FAIL" start="2026-08-23T01:46:18.722852" elapsed="0.263304">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</if>
<kw name="Set To Dictionary" owner="Collections">
<arg>${NetconfKeywords__mounted_device_types}</arg>
<arg>${device_name}</arg>
<arg>${device_type}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:18.986307" elapsed="0.000022"/>
</kw>
<arg>${device_name}</arg>
<arg>device_type=full-uri-device</arg>
<arg>device_port=${DEVICE_PORT}</arg>
<arg>device_address=${device_ip}</arg>
<arg>device_user=admin</arg>
<arg>device_password=admin</arg>
<arg>session=${session}</arg>
<doc>Tell Netconf about the specified device so it can add it into its configuration.</doc>
<status status="FAIL" start="2026-08-23T01:46:18.694083" elapsed="0.292340">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</kw>
<arg>${DEVICE_NAME}</arg>
<arg>${session}</arg>
<arg>${ODL_SYSTEM_${node_index}_IP}</arg>
<doc>Configures the device via REST api.</doc>
<status status="FAIL" start="2026-08-23T01:46:18.692814" elapsed="0.293742">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<var>&amp;{mapping}</var>
<arg>DEVICE_NAME=${DEVICE_NAME}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:18.986817" elapsed="0.000056"/>
</kw>
<kw name="Wait_Netconf_Device_Mounted">
<arg>${DEVICE_NAME}</arg>
<arg>${session}</arg>
<arg>${mapping}</arg>
<doc>Checks weather the device was mounted.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:18.987116" elapsed="0.000032"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:18.998907" elapsed="0.000028"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<var>${mod_session}</var>
<arg>member_index=${idx}</arg>
<doc>Return RequestsLibrary session alias pointing to node of given index.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:18.999239" elapsed="0.000024"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<arg>5x</arg>
<arg>3s</arg>
<arg>TemplatedRequests.Get_As_Xml_Templated</arg>
<arg>${NETCONF_FOLDER}${/}${version}${/}netconf-state</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${mod_session}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:18.999417" elapsed="0.000025"/>
</kw>
<var name="${idx}"/>
<status status="NOT RUN" start="2026-08-23T01:46:18.999052" elapsed="0.000436"/>
</iter>
<var>${idx}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="NOT RUN" start="2026-08-23T01:46:18.998993" elapsed="0.000521"/>
</for>
<kw name="Remove_Netconf_Device" type="TEARDOWN">
<kw name="Remove_Device_From_Netconf" owner="NetconfKeywords">
<kw name="Pop From Dictionary" owner="Collections">
<msg time="2026-08-23T01:46:19.000901" level="INFO">${device_type} = None</msg>
<msg time="2026-08-23T01:46:19.000945" level="FAIL">Dictionary does not contain key 'test-device'.</msg>
<var>${device_type}</var>
<arg>${NetconfKeywords__mounted_device_types}</arg>
<arg>${device_name}</arg>
<doc>Pops the given ``key`` from the ``dictionary`` and returns its value.</doc>
<status status="FAIL" start="2026-08-23T01:46:19.000610" elapsed="0.000392">Dictionary does not contain key 'test-device'.</status>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T01:46:19.001595" level="INFO">${mapping} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping}</var>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-23T01:46:19.001177" elapsed="0.000444"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T01:46:19.020127" elapsed="0.000852"/>
</kw>
<msg time="2026-08-23T01:46:19.021204" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T01:46:19.019755" elapsed="0.001517"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return scandium if vanadium is at least ${lower_bound},
return calcium otherwise.</doc>
<status status="PASS" start="2026-08-23T01:46:19.019344" elapsed="0.002003"/>
</kw>
<msg time="2026-08-23T01:46:19.021388" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T01:46:19.010666" elapsed="0.010785"/>
</kw>
<msg time="2026-08-23T01:46:19.021556" level="INFO">${version} = scandium</msg>
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-08-23T01:46:19.010318" elapsed="0.011263"/>
</kw>
<kw name="Delete_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-08-23T01:46:19.064907" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T01:46:19.064243" elapsed="0.000776"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T01:46:19.066656" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-23T01:46:19.066116" elapsed="0.000647">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-23T01:46:19.066932" 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-08-23T01:46:19.065320" elapsed="0.001717"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T01:46:19.068433" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None/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-08-23T01:46:19.067379" elapsed="0.001165"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T01:46:19.069162" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-23T01:46:19.069397" level="INFO">${template} = None</msg>
<msg time="2026-08-23T01:46:19.069486" level="FAIL">FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="FAIL" start="2026-08-23T01:46:19.068949" elapsed="0.000641">FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'</status>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:19.070654" level="INFO">None</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:19.070162" elapsed="0.000552"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:19.072665" level="INFO">mapping: {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:19.072404" elapsed="0.000306"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T01:46:19.073349" 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-08-23T01:46:19.072939" elapsed="0.000436"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:19.074164" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:19.073853" elapsed="0.000337"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:19.075055" level="INFO">${encoded} = test-device</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-08-23T01:46:19.074715" elapsed="0.000366"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:19.075132" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T01:46:19.075285" level="INFO">${encoded_value} = test-device</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-08-23T01:46:19.074373" elapsed="0.000943"/>
</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-08-23T01:46:19.075464" elapsed="0.000225"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-23T01:46:19.073683" elapsed="0.002047"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T01:46:19.076292" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T01:46:19.075995" elapsed="0.000322"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:19.077061" level="INFO">${encoded} = /rests</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-08-23T01:46:19.076850" elapsed="0.000236"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T01:46:19.077144" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T01:46:19.077294" level="INFO">${encoded_value} = /rests</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-08-23T01:46:19.076497" elapsed="0.000821"/>
</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-08-23T01:46:19.077465" elapsed="0.000217"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-23T01:46:19.075855" elapsed="0.001868"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-23T01:46:19.073473" elapsed="0.004329"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-23T01:46:19.077891" elapsed="0.000071"/>
</return>
<msg time="2026-08-23T01:46:19.078261" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-23T01:46:19.071573" elapsed="0.006779"/>
</kw>
<status status="PASS" start="2026-08-23T01:46:19.070913" elapsed="0.007520"/>
</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-08-23T01:46:19.078727" elapsed="0.000084"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:19.078511" elapsed="0.000397"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:19.070882" elapsed="0.008100"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T01:46:19.079985" level="INFO">${final_text} = None</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-08-23T01:46:19.079130" elapsed="0.000963"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T01:46:19.080322" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None/${file_name}.</doc>
<status status="FAIL" start="2026-08-23T01:46:19.063252" elapsed="0.017273">FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'</status>
</kw>
<msg time="2026-08-23T01:46:19.080580" 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="FAIL" start="2026-08-23T01:46:19.050529" elapsed="0.030110"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:19.093173" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:19.105570" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/None/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:19.118055" elapsed="0.000036"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:19.118256" 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-08-23T01:46:19.118425" 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-08-23T01:46:19.118828" elapsed="0.000040"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:19.118685" elapsed="0.000219"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:19.118670" 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-08-23T01:46:19.119065" 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-08-23T01:46:19.119227" 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-08-23T01:46:19.119392" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T01:46:19.118640" elapsed="0.000805"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T01:46:19.118500" 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-08-23T01:46:19.119613" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T01:46:19.119688" elapsed="0.000015"/>
</return>
<msg time="2026-08-23T01:46:19.119863" level="INFO">${uri} = None</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=${location}</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="FAIL" start="2026-08-23T01:46:19.046190" elapsed="0.073702">FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'</status>
</kw>
<kw name="Delete_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:19.121031" level="INFO">None</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:19.120760" elapsed="0.000316"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:46:19.128208" level="INFO">DELETE Request : url=http://10.30.170.114:8181/ 
 path_url=/ 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Length': '0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:19.128254" level="INFO">DELETE Response : url=http://10.30.170.114:8181/ 
 status=404, reason=Not Found 
 headers={'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:19.128377" level="INFO">${response} = None</msg>
<msg time="2026-08-23T01:46:19.128419" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:46:19.124333" elapsed="0.004413">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/</status>
</kw>
<status status="FAIL" start="2026-08-23T01:46:19.121142" elapsed="0.007681">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/</status>
</branch>
<branch type="ELSE">
<kw name="DELETE On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:19.129026" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:19.128875" elapsed="0.000213"/>
</branch>
<status status="FAIL" start="2026-08-23T01:46:19.121124" elapsed="0.007987">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/</status>
</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-08-23T01:46:19.132907" level="FAIL">Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</msg>
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="FAIL" start="2026-08-23T01:46:19.130318" elapsed="0.002663">Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<status status="FAIL" start="2026-08-23T01:46:19.130101" elapsed="0.002947">Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</branch>
<status status="FAIL" start="2026-08-23T01:46:19.130083" elapsed="0.002997">Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</if>
<if>
<branch type="IF" condition="&quot;${log_response}&quot; == &quot;True&quot;">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:19.135922" level="FAIL">Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</msg>
<arg>${response.status_code}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="FAIL" start="2026-08-23T01:46:19.133368" elapsed="0.002589">Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</status>
</kw>
<status status="FAIL" start="2026-08-23T01:46:19.133150" elapsed="0.002877">Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</status>
</branch>
<status status="FAIL" start="2026-08-23T01:46:19.133133" elapsed="0.002925">Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</status>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T01:46:19.136617" 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-08-23T01:46:19.136235" elapsed="0.000409"/>
</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-08-23T01:46:19.136970" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:19.136712" elapsed="0.000317"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T01:46:19.137632" 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-08-23T01:46:19.137207" elapsed="0.000454"/>
</kw>
<status status="PASS" start="2026-08-23T01:46:19.137053" elapsed="0.000645"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:19.136695" elapsed="0.001024"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T01:46:19.138269" 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-08-23T01:46:19.137896" 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-08-23T01:46:19.138722" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:19.138366" elapsed="0.000435"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T01:46:19.139632" 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-08-23T01:46:19.139083" elapsed="0.000586"/>
</kw>
<status status="PASS" start="2026-08-23T01:46:19.138863" elapsed="0.000855"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:19.138347" elapsed="0.001400"/>
</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-08-23T01:46:19.139981" elapsed="0.000645"/>
</kw>
<kw name="Combine Lists" owner="Collections">
<msg time="2026-08-23T01:46:19.141386" 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-08-23T01:46:19.140885" elapsed="0.000543"/>
</kw>
<kw name="List Should Contain Value" owner="Collections">
<msg time="2026-08-23T01:46:19.149740" level="FAIL">Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</msg>
<arg>${final_allowd_list}</arg>
<arg>${response.status_code}</arg>
<doc>Fails if the ``value`` is not found from ``list``.</doc>
<status status="FAIL" start="2026-08-23T01:46:19.141654" elapsed="0.008134">Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</status>
</kw>
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_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="FAIL" start="2026-08-23T01:46:19.129617" elapsed="0.020389">Several failures occurred:

1) Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'

2) Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'

3) Resolving variable '${response.status_code}' failed: AttributeError: 'NoneType' object has no attribute 'status_code'</status>
</kw>
<return>
<value>${response.text}</value>
<status status="PASS" start="2026-08-23T01:46:19.150114" elapsed="0.000049"/>
</return>
<msg time="2026-08-23T01:46:19.152551" level="INFO">${response_text} = None</msg>
<msg time="2026-08-23T01:46:19.152581" level="FAIL">Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</msg>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>session=${session}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>DELETE resource at URI, check status_code and return response text..</doc>
<status status="FAIL" start="2026-08-23T01:46:19.120166" elapsed="0.032444">Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<return>
<value>${response_text}</value>
<status status="PASS" start="2026-08-23T01:46:19.152677" elapsed="0.000026"/>
</return>
<arg>${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>${mapping}</arg>
<arg>session=${session}</arg>
<arg>location=${location}</arg>
<doc>Resolve URI from folder, issue DELETE request.</doc>
<status status="FAIL" start="2026-08-23T01:46:19.021798" elapsed="0.131078">Several failures occurred:

1) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

2) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Tell Netconf to deconfigure the specified device</doc>
<status status="FAIL" start="2026-08-23T01:46:19.000166" elapsed="0.152875">Several failures occurred:

1) Dictionary does not contain key 'test-device'.

2) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

3) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<arg>${DEVICE_NAME}</arg>
<arg>${session}</arg>
<doc>Removes configured device</doc>
<status status="FAIL" start="2026-08-23T01:46:18.999704" elapsed="0.153466">Several failures occurred:

1) Dictionary does not contain key 'test-device'.

2) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

3) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<arg>${idx}</arg>
<doc>Netconf readines for a node is done by creating a netconf device connected to that node
and performing GET operation got from the device's mount point.</doc>
<status status="FAIL" start="2026-08-23T01:46:18.689501" elapsed="0.463751">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device

Also keyword teardown failed:
Several failures occurred:

1) Dictionary does not contain key 'test-device'.

2) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

3) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<var name="${idx}">1</var>
<status status="FAIL" start="2026-08-23T01:46:18.689115" elapsed="0.464199">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device

Also keyword teardown failed:
Several failures occurred:

1) Dictionary does not contain key 'test-device'.

2) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

3) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</iter>
<var>${idx}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="FAIL" start="2026-08-23T01:46:18.688746" elapsed="0.464629">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device

Also keyword teardown failed:
Several failures occurred:

1) Dictionary does not contain key 'test-device'.

2) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

3) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</for>
<doc>Verifies the netconf readiness for every odl node.</doc>
<status status="FAIL" start="2026-08-23T01:46:18.688303" elapsed="0.465175">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device

Also keyword teardown failed:
Several failures occurred:

1) Dictionary does not contain key 'test-device'.

2) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

3) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<msg time="2026-08-23T01:46:19.153586" level="FAIL">Keyword 'Check_Netconf_Topology_Ready' failed after retrying 10 times. The last error was: HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device

Also keyword teardown failed:
Several failures occurred:

1) Dictionary does not contain key 'test-device'.

2) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

3) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</msg>
<arg>10x</arg>
<arg>1s</arg>
<arg>Check_Netconf_Topology_Ready</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-08-23T01:46:05.117754" elapsed="14.035943">Keyword 'Check_Netconf_Topology_Ready' failed after retrying 10 times. The last error was: HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device

Also keyword teardown failed:
Several failures occurred:

1) Dictionary does not contain key 'test-device'.

2) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

3) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</kw>
<kw name="Teardown_Test_Show_Bugs_If_Test_Failed" owner="SetupUtils" type="TEARDOWN">
<kw name="SetupUtils__Report_Bugs_Causing_Failure" owner="SetupUtils">
<if>
<branch type="IF" condition="'${SetupUtils__Known_Bug_ID}' != ''">
<kw name="Report Failure Due To Bug" owner="Utils">
<arg>${SetupUtils__Known_Bug_ID}</arg>
<doc>Report that a test failed due to a known Bugzilla bug whose
number is provided as an argument.
Not FAILED (incl. SKIPPED) test are not reported.
This keyword must be used in the [Teardown] setting of the affected test
or as the first line of the test if FastFail module is not being
used. It reports the URL of the bug on console and also puts it
into the Robot log file.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:19.155060" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:19.154659" elapsed="0.000464"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:19.154641" elapsed="0.000506"/>
</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-08-23T01:46:19.155289" elapsed="0.000313"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T01:46:19.160948" 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-08-23T01:46:19.160167" elapsed="0.000809"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="NOT RUN" start="2026-08-23T01:46:19.161193" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T01:46:19.161050" elapsed="0.000185"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:19.161032" elapsed="0.000225"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T01:46:19.161758" level="INFO">${newline} = 
</msg>
<var>${newline}</var>
<arg>chr(10)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-23T01:46:19.161430" elapsed="0.000354"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:46:19.162270" level="INFO">${reference} = netconf_gate_userfeatures_txt_Ready_Netconfready_Check_Whether_Netconf_Topology_Is_Ready</msg>
<var>${reference}</var>
<arg>${SUITE_NAME}_${TEST_NAME}</arg>
<arg>[ /\.-]</arg>
<arg>_</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-23T01:46:19.161955" elapsed="0.000342"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<msg time="2026-08-23T01:46:19.162631" level="INFO">${reference} = netconf_gate_userfeatures_txt_ready_netconfready_check_whether_netconf_topology_is_ready</msg>
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="PASS" start="2026-08-23T01:46:19.162455" elapsed="0.000202"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T01:46:19.163172" level="INFO">${msg} = ... click for list of related bugs or create a new one if needed (with the
"netconf_gate_userfeatures_txt_ready_netconfready_check_whether_netconf_topology_is_ready"
reference somewhere inside)</msg>
<var>${msg}</var>
<arg>... click for list of related bugs or create a new one if needed (with the${newline}"${reference}"${newline}reference somewhere inside)</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T01:46:19.162807" elapsed="0.000392"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T01:46:19.163657" level="INFO">${bugs} = "https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=netconf_gate_userfeatures_txt_ready_netconfready_check_whether_netconf_topology_is_ready&amp;order=bug_status"</msg>
<var>${bugs}</var>
<arg>"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=${reference}&amp;order=bug_status"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T01:46:19.163352" elapsed="0.000333"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<msg time="2026-08-23T01:46:19.164291" level="INFO">Set test message to:
... click for list of related bugs or create a new one if needed (with the
"netconf_gate_userfeatures_txt_ready_netconfready_check_whether_netconf_topology_is_ready"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=netconf_gate_userfeatures_txt_ready_netconfready_check_whether_netconf_topology_is_ready&amp;order=bug_status"

Keyword 'Check_Netconf_Topology_Ready' failed after retrying 10 times. The last error was: HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device

Also keyword teardown failed:
Several failures occurred:

1) Dictionary does not contain key 'test-device'.

2) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

3) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</msg>
<arg>${msg}${newline}${bugs}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="PASS" start="2026-08-23T01:46:19.163852" elapsed="0.000494"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:19.164787" level="INFO">... click for list of related bugs or create a new one if needed (with the
"netconf_gate_userfeatures_txt_ready_netconfready_check_whether_netconf_topology_is_ready"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=netconf_gate_userfeatures_txt_ready_netconfready_check_whether_netconf_topology_is_ready&amp;order=bug_status"</msg>
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:19.164497" elapsed="0.000350"/>
</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-08-23T01:46:19.159867" elapsed="0.005038"/>
</kw>
<status status="PASS" start="2026-08-23T01:46:19.154453" elapsed="0.010500"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-08-23T01:46:19.154086" elapsed="0.010906"/>
</kw>
<doc>Checks netconf readiness.</doc>
<status status="FAIL" start="2026-08-23T01:46:05.002566" elapsed="14.162470">... click for list of related bugs or create a new one if needed (with the
"netconf_gate_userfeatures_txt_ready_netconfready_check_whether_netconf_topology_is_ready"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=netconf_gate_userfeatures_txt_ready_netconfready_check_whether_netconf_topology_is_ready&amp;order=bug_status"

Keyword 'Check_Netconf_Topology_Ready' failed after retrying 10 times. The last error was: HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device

Also keyword teardown failed:
Several failures occurred:

1) Dictionary does not contain key 'test-device'.

2) FileNotFoundError: [Errno 2] No such file or directory: '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/None/location.uri'

3) Replacing variables from keyword return value failed: Resolving variable '${response.text}' failed: AttributeError: 'NoneType' object has no attribute 'text'</status>
</test>
<test id="s1-s1-s1-t2" name="Wait_For_Netconf_Connector" line="97">
<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-08-23T01:46:19.168572" elapsed="0.000219"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T01:46:19.168184" elapsed="0.000678"/>
</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-08-23T01:46:19.169878" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T01:46:19.169751" elapsed="0.000174"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:19.169732" elapsed="0.000215"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T01:46:19.174994" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T01:46:19.174885" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:19.174867" elapsed="0.000195"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T01:46:19.176046" 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-08-23T01:46:19.175652" elapsed="0.000452"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T01:46:19.176565" 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-08-23T01:46:19.176269" elapsed="0.000322"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T01:46:19.176635" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T01:46:19.176789" 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-08-23T01:46:19.175282" elapsed="0.001532"/>
</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-08-23T01:46:19.182264" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T01:46:19.182157" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:19.182138" 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-08-23T01:46:19.183526" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T01:46:19.183420" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:19.183401" elapsed="0.000193"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T01:46:19.184115" level="INFO">${karaf_connection_index} = 7</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-08-23T01:46:19.183736" elapsed="0.000406"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T01:46:19.184551" level="INFO">${current_connection_index} = 11</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-08-23T01:46:19.184298" elapsed="0.000279"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T01:46:19.234244" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T01:46:19.185136" elapsed="0.049270"/>
</kw>
<msg time="2026-08-23T01:46:19.234610" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T01:46:19.234657" 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 "n "e "t "c "o "n "f "...</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-08-23T01:46:19.184734" elapsed="0.049960"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T01:46:19.267628" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "R "e "a "d "y ". "N "e "t "c "o "n "f "r "e "a "d "y ". "W "a "i "t "_ "F "o "r "_ "N "e "t "c "o "n "f "_ "C "o "n "n "e "c "t "o "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-08-23T01:46:19.235283" elapsed="0.032521"/>
</kw>
<msg time="2026-08-23T01:46:19.267995" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T01:46:19.268041" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "R "e "a "d "y ". "N "e "t "c "o "n "f "r "e "a "d "y ". "W "a "i "t "_ "F "o "r "_ "N ...</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-08-23T01:46:19.234885" elapsed="0.033194"/>
</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-08-23T01:46:19.268382" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:19.268157" elapsed="0.000300"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:19.268136" elapsed="0.000348"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:46:19.269025" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "R "e "a "d "y ". "N "e "t "c "o "n "f "r "e "a "d "y ". "W "a "i "t "_ "F "o "r "_ "N "e "t "c "o "n "f "_ "C "o "n "n "e "c "t "o "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:46:19.268623" elapsed="0.000474"/>
</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-08-23T01:46:19.269388" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:19.269163" elapsed="0.000300"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:19.269145" elapsed="0.000344"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T01:46:19.269525" 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-08-23T01:46:19.272564" elapsed="0.000148"/>
</kw>
<msg time="2026-08-23T01:46:19.272782" 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-08-23T01:46:19.271889" elapsed="0.001017"/>
</kw>
<kw name="Open 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-08-23T01:46:19.273824" elapsed="0.000056"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:19.274826" elapsed="0.000252"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T01:46:19.270410" elapsed="0.004752"/>
</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-08-23T01:46:19.269800" elapsed="0.005476"/>
</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-08-23T01:46:19.183121" elapsed="0.092254"/>
</kw>
<msg time="2026-08-23T01:46:19.275472" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T01:46:19.275516" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "R "e "a "d "y ". "N "e "t "c "o "n "f "r "e "a "d "y ". "W "a "i "t "_ "F "o "r "_ "N ...</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-08-23T01:46:19.182481" elapsed="0.093072"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T01:46:19.275737" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T01:46:19.275629" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:19.275610" 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-08-23T01:46:19.276231" 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-08-23T01:46:19.276561" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T01:46:19.276633" 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-08-23T01:46:19.181808" elapsed="0.094932"/>
</kw>
<msg time="2026-08-23T01:46:19.276831" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T01:46:19.276957" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "R "e "a "d "y ". "N "e "t "c "o "n "f "r "e "a "d "y ". "W "a "i "t "_ "F "o "r "_ "N ...</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-08-23T01:46:19.177190" elapsed="0.099804"/>
</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-08-23T01:46:19.277340" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:19.277070" elapsed="0.000326"/>
</branch>
<status status="PASS" start="2026-08-23T01:46:19.277052" elapsed="0.000368"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T01:46:19.177052" elapsed="0.100391"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T01:46:19.176884" elapsed="0.100589"/>
</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-08-23T01:46:19.174514" elapsed="0.103012"/>
</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-08-23T01:46:19.169439" elapsed="0.108148"/>
</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-08-23T01:46:19.169015" elapsed="0.108616"/>
</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-08-23T01:46:19.165874" elapsed="0.111812"/>
</kw>
<if>
<branch type="IF" condition="not ${netconf_is_ready}">
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:46:19.288592" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:19.288649" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:46:19.288748" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:46:19.280698" elapsed="0.008424">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:19.289316" elapsed="0.000032"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:19.289626" elapsed="0.000030"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:19.289992" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:19.289759" elapsed="0.000312"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:19.289734" elapsed="0.000372"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:19.290441" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:19.290180" elapsed="0.000341"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:19.290159" elapsed="0.000394"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:19.290739" elapsed="0.000029"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:46:19.278561" elapsed="0.012362">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:46:20.302066" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:20.302146" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:46:20.302306" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:46:20.296978" elapsed="0.005826">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:20.303091" elapsed="0.000033"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:20.303354" elapsed="0.000030"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:20.303700" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:20.303493" elapsed="0.000283"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:20.303463" elapsed="0.000349"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:20.304175" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:20.303911" elapsed="0.000346"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:20.303888" elapsed="0.000401"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:20.304477" elapsed="0.000030"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:46:20.291687" elapsed="0.012956">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:46:21.315644" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:21.315725" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:46:21.315915" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:46:21.310655" elapsed="0.005790">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:21.316788" elapsed="0.000033"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:21.317061" elapsed="0.000030"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:21.317425" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:21.317200" elapsed="0.000303"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:21.317171" elapsed="0.000369"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:21.317901" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:21.317614" elapsed="0.000370"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:21.317593" elapsed="0.000425"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:21.318202" elapsed="0.000029"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:46:21.305458" elapsed="0.012910">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:46:22.330892" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:22.330960" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:46:22.331093" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:46:22.324464" elapsed="0.007044">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:22.331727" elapsed="0.000024"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:22.331930" elapsed="0.000022"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:22.332194" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:22.332037" elapsed="0.000213"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:22.332013" elapsed="0.000265"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:22.332523" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:22.332332" elapsed="0.000250"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:22.332317" elapsed="0.000288"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:22.332740" elapsed="0.000021"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:46:22.319305" elapsed="0.013576">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:46:23.345394" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:23.345458" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:46:23.345639" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:46:23.339380" elapsed="0.006690">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:23.346280" elapsed="0.000023"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:23.346462" elapsed="0.000022"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:23.346724" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:23.346571" elapsed="0.000208"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:23.346547" elapsed="0.000259"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:23.347071" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:23.346878" elapsed="0.000253"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:23.346861" elapsed="0.000293"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:23.347286" elapsed="0.000021"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:46:23.333720" elapsed="0.013689">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:46:24.358810" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:24.358922" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:46:24.359086" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:46:24.353373" elapsed="0.006253">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:24.359919" elapsed="0.000034"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:24.360175" elapsed="0.000029"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:24.360531" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:24.360318" elapsed="0.000288"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:24.360288" elapsed="0.000357"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:24.361020" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:24.360719" elapsed="0.000401"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:24.360697" elapsed="0.000456"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:24.361341" elapsed="0.000029"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:46:24.348328" elapsed="0.013182">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:46:25.369373" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:25.369438" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:46:25.369640" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:46:25.364914" elapsed="0.005173">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:25.370285" elapsed="0.000023"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:25.370466" elapsed="0.000020"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:25.370731" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:25.370576" elapsed="0.000210"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:25.370551" elapsed="0.000265"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:25.371085" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:25.370889" elapsed="0.000254"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:25.370873" elapsed="0.000293"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:25.371298" elapsed="0.000021"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:46:25.362378" elapsed="0.009043">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:46:26.384970" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:26.385058" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:46:26.385237" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:46:26.378292" elapsed="0.007497">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:26.386086" elapsed="0.000033"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:26.386353" elapsed="0.000030"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:26.386721" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:26.386505" elapsed="0.000292"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:26.386469" elapsed="0.000399"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:26.387223" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:26.386947" elapsed="0.000357"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:26.386924" elapsed="0.000412"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:26.387523" elapsed="0.000028"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:46:26.372370" elapsed="0.015328">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:46:27.399537" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:27.399616" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:46:27.399855" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:46:27.393629" elapsed="0.006649">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:27.400480" elapsed="0.000023"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:27.400664" elapsed="0.000020"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:27.400948" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:27.400772" elapsed="0.000234"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:27.400747" elapsed="0.000288"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:27.401302" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:27.401089" elapsed="0.000273"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:27.401074" elapsed="0.000311"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:27.401522" elapsed="0.000021"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:46:27.388555" elapsed="0.013102">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:46:28.414424" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:28.414553" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:46:28.414785" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:46:28.407619" elapsed="0.007749">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:28.415651" elapsed="0.000033"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:28.415928" elapsed="0.000030"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:28.416315" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:28.416078" elapsed="0.000315"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:28.416045" elapsed="0.000389"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:28.416776" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:28.416508" elapsed="0.000369"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:28.416487" elapsed="0.000424"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:28.417096" elapsed="0.000029"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:46:28.402558" elapsed="0.014712">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:46:29.430235" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:29.430301" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:46:29.430507" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:46:29.423819" elapsed="0.007117">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:29.431137" elapsed="0.000024"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:29.431338" elapsed="0.000022"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:29.431597" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:29.431445" elapsed="0.000208"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:29.431421" elapsed="0.000261"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:29.431949" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:29.431735" elapsed="0.000274"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:29.431720" elapsed="0.000313"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:29.432166" elapsed="0.000021"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:46:29.418149" elapsed="0.014142">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:46:30.444767" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:30.444884" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:46:30.445052" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:46:30.438251" elapsed="0.007334">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:30.445876" elapsed="0.000034"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:30.446130" elapsed="0.000030"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:30.446501" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:30.446273" elapsed="0.000313"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:30.446243" elapsed="0.000380"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:30.446983" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:30.446697" elapsed="0.000366"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:30.446675" elapsed="0.000421"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:30.447280" elapsed="0.000029"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:46:30.433218" elapsed="0.014233">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:46:31.459993" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:31.460079" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:46:31.460316" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:46:31.453503" elapsed="0.007367">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:31.461206" elapsed="0.000038"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:31.461469" elapsed="0.000029"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:31.461871" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:31.461637" elapsed="0.000316"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:31.461605" elapsed="0.000385"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:31.462328" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:31.462063" elapsed="0.000345"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:31.462042" elapsed="0.000398"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:31.462624" elapsed="0.000029"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:46:31.448381" elapsed="0.014411">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:46:32.475666" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:32.475731" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:46:32.475877" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:46:32.469339" elapsed="0.006947">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:32.476485" elapsed="0.000023"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:32.476665" elapsed="0.000020"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:32.476958" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:32.476786" elapsed="0.000228"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:32.476760" elapsed="0.000280"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:32.477287" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:32.477094" elapsed="0.000250"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:32.477079" elapsed="0.000288"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:32.477497" elapsed="0.000020"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:46:32.463725" elapsed="0.013894">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:46:33.489622" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:33.489686" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:46:33.489896" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:46:33.483758" elapsed="0.006537">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:33.490502" elapsed="0.000023"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:33.490681" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:33.490950" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:33.490782" elapsed="0.000224"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:33.490761" elapsed="0.000271"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:33.491275" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:33.491085" elapsed="0.000249"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:33.491069" elapsed="0.000288"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:33.491490" elapsed="0.000021"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:46:33.478533" elapsed="0.013077">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:46:34.505045" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:34.505131" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:46:34.505299" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:46:34.497652" elapsed="0.008221">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:34.506202" elapsed="0.000048"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:34.506542" elapsed="0.000037"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:34.507007" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:34.506721" elapsed="0.000376"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:34.506682" elapsed="0.000462"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:34.507573" elapsed="0.000045"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:34.507231" elapsed="0.000435"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:34.507205" elapsed="0.000495"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:34.507911" elapsed="0.000030"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:46:34.492508" elapsed="0.015577">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:46:35.522014" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:35.522235" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:46:35.523307" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:46:35.514720" elapsed="0.009667">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:35.524980" elapsed="0.000066"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:35.525400" elapsed="0.000048"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:35.526049" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:35.525669" elapsed="0.000510"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:35.525609" elapsed="0.000633"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:35.526941" elapsed="0.000060"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:35.526374" elapsed="0.000707"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:35.526328" elapsed="0.000808"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:35.527435" elapsed="0.000047"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:46:35.509013" elapsed="0.018706">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:46:36.540031" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:36.540118" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:46:36.540273" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:46:36.533592" elapsed="0.007222">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:36.541106" elapsed="0.000033"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:36.541359" elapsed="0.000030"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:36.541711" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:36.541500" elapsed="0.000288"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:36.541470" elapsed="0.000354"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:36.542207" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:36.541923" elapsed="0.000364"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:36.541900" elapsed="0.000420"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:36.542506" elapsed="0.000030"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:46:36.528582" elapsed="0.014091">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:46:37.553624" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:37.553713" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:46:37.554020" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:46:37.548369" elapsed="0.006272">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:37.554940" elapsed="0.000034"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:37.555196" elapsed="0.000029"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:37.555559" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:37.555341" elapsed="0.000294"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:37.555307" elapsed="0.000368"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:37.556048" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:37.555748" elapsed="0.000383"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:37.555728" elapsed="0.000435"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:37.556349" elapsed="0.000029"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:46:37.543590" elapsed="0.012932">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:46:38.569669" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:38.569734" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:46:38.569889" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:46:38.563246" elapsed="0.007062">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:38.570517" elapsed="0.000023"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:38.570696" elapsed="0.000020"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:38.570974" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:38.570800" elapsed="0.000230"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:38.570776" elapsed="0.000282"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:38.571306" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:38.571112" elapsed="0.000252"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:38.571096" elapsed="0.000291"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:38.571518" elapsed="0.000021"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:46:38.557472" elapsed="0.014169">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:46:39.583732" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:39.583798" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:46:39.584011" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:46:39.577529" elapsed="0.006895">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:39.584626" elapsed="0.000024"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:39.584808" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:39.585086" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:39.584932" elapsed="0.000209"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:39.584907" elapsed="0.000261"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:39.585416" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:39.585222" elapsed="0.000258"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:39.585206" elapsed="0.000306"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:39.585650" elapsed="0.000021"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:46:39.572505" elapsed="0.013271">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:46:40.597435" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:40.597497" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:46:40.597615" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:46:40.591696" elapsed="0.006344">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:40.598239" elapsed="0.000024"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:40.598419" elapsed="0.000020"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:40.598673" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:40.598521" elapsed="0.000205"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:40.598499" elapsed="0.000254"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:40.599059" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:40.598805" elapsed="0.000314"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:40.598790" elapsed="0.000353"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:40.599275" elapsed="0.000020"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:46:40.586573" elapsed="0.012824">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:46:41.610302" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:41.610399" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:46:41.610642" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:46:41.605221" elapsed="0.006007">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:41.611518" elapsed="0.000034"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:41.611772" elapsed="0.000029"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:41.612149" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:41.611936" elapsed="0.000291"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:41.611905" elapsed="0.000360"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:41.612615" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:41.612339" elapsed="0.000357"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:41.612317" elapsed="0.000412"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:41.612937" elapsed="0.000034"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:46:41.600284" elapsed="0.012825">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:46:42.621363" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:42.621473" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:46:42.621677" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:46:42.616488" elapsed="0.005793">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:42.622483" elapsed="0.000023"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:42.622664" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:42.622955" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:42.622768" elapsed="0.000244"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:42.622745" elapsed="0.000316"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:42.623312" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:42.623116" elapsed="0.000253"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:42.623100" elapsed="0.000292"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:42.623525" elapsed="0.000021"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:46:42.613960" elapsed="0.009688">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:46:43.634186" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:43.634272" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:46:43.634524" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:46:43.629113" elapsed="0.005999">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:43.635387" elapsed="0.000032"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:43.635634" elapsed="0.000029"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:43.636013" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:43.635777" elapsed="0.000316"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:43.635747" elapsed="0.000384"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:43.636473" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:43.636206" elapsed="0.000347"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:43.636185" elapsed="0.000401"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:43.636769" elapsed="0.000030"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:46:43.624552" elapsed="0.012409">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:46:44.651378" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:44.651440" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:46:44.651567" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:46:44.645264" elapsed="0.006743">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:44.652203" elapsed="0.000024"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:44.652382" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:44.652638" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:44.652486" elapsed="0.000207"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:44.652463" elapsed="0.000256"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:44.652989" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:44.652773" elapsed="0.000276"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:44.652757" elapsed="0.000315"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:44.653205" elapsed="0.000021"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:46:44.637885" elapsed="0.015442">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:46:45.664995" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:45.665080" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:46:45.665322" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:46:45.659378" elapsed="0.006506">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:45.666160" elapsed="0.000033"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:45.666407" elapsed="0.000029"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:45.666758" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:45.666548" elapsed="0.000306"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:45.666517" elapsed="0.000377"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:45.667265" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:45.666968" elapsed="0.000378"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:45.666947" elapsed="0.000432"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:45.667565" elapsed="0.000030"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:46:45.654265" elapsed="0.013468">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:46:46.680149" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:46.680236" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:46:46.680403" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:46:46.673931" elapsed="0.007053">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:46.681259" elapsed="0.000032"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:46.681506" elapsed="0.000029"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:46.681887" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:46.681653" elapsed="0.000312"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:46.681619" elapsed="0.000384"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:46.682349" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:46.682078" elapsed="0.000359"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:46.682057" elapsed="0.000413"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:46.682656" elapsed="0.000028"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:46:46.668652" elapsed="0.014176">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:46:47.695628" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:47.695692" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:46:47.695903" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:46:47.689582" elapsed="0.006737">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:47.696514" elapsed="0.000023"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:47.696693" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:47.696968" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:47.696797" elapsed="0.000227"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:47.696774" elapsed="0.000277"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:47.697295" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:47.697105" elapsed="0.000248"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:47.697090" elapsed="0.000286"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:47.697509" elapsed="0.000021"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:46:47.683772" elapsed="0.013861">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:46:48.710375" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:48.710440" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:46:48.710573" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:46:48.703924" elapsed="0.007121">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:48.711294" elapsed="0.000026"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:48.711485" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:48.711789" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:48.711601" elapsed="0.000271"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:48.711576" elapsed="0.000326"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:48.712157" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:48.711958" elapsed="0.000257"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:48.711943" elapsed="0.000296"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:48.712371" elapsed="0.000021"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:46:48.698568" elapsed="0.013929">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:46:49.724432" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:49.724497" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:46:49.724700" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:46:49.718524" elapsed="0.006605">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:49.725325" elapsed="0.000024"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:49.725505" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:49.725763" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:49.725608" elapsed="0.000211"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:49.725585" elapsed="0.000276"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:49.726107" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:49.725916" elapsed="0.000249"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:49.725901" elapsed="0.000287"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:49.726323" elapsed="0.000021"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:46:49.713408" elapsed="0.013036">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:46:50.738178" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:50.738264" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:46:50.738442" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:46:50.732625" elapsed="0.006439">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:50.739335" elapsed="0.000032"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:50.739585" elapsed="0.000030"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:50.739967" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:50.739730" elapsed="0.000316"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:50.739699" elapsed="0.000384"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:50.740425" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:50.740160" elapsed="0.000345"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:50.740138" elapsed="0.000399"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:50.740726" elapsed="0.000029"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:46:50.727703" elapsed="0.013212">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:46:51.751652" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:51.751732" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:46:51.751975" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:46:51.746484" elapsed="0.005982">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:51.752728" elapsed="0.000032"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:51.752995" elapsed="0.000030"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:51.753341" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:51.753133" elapsed="0.000286"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:51.753104" elapsed="0.000351"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:51.753789" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:51.753529" elapsed="0.000361"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:51.753508" elapsed="0.000416"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:51.754114" elapsed="0.000032"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:46:51.741644" elapsed="0.012638">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:46:52.765028" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:52.765112" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:46:52.765273" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:46:52.760027" elapsed="0.005781">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:52.766111" elapsed="0.000033"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:52.766362" elapsed="0.000029"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:52.766748" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:52.766533" elapsed="0.000291"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:52.766498" elapsed="0.000385"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:52.767227" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:52.766960" elapsed="0.000346"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:52.766938" elapsed="0.000401"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:52.767524" elapsed="0.000029"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:46:52.755224" elapsed="0.012467">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:46:53.780308" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:53.780391" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:46:53.780634" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:46:53.773895" elapsed="0.007268">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:53.781429" elapsed="0.000033"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:53.781675" elapsed="0.000029"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:53.782049" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:53.781814" elapsed="0.000313"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:53.781784" elapsed="0.000379"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:53.782517" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:53.782239" elapsed="0.000360"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:53.782218" elapsed="0.000414"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:53.782819" elapsed="0.000048"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:46:53.768403" elapsed="0.014602">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:46:54.794918" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:54.794984" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:46:54.795095" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:46:54.788644" elapsed="0.006833">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:54.795674" elapsed="0.000023"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:54.795868" elapsed="0.000022"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:54.796123" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:54.795970" elapsed="0.000207"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:54.795948" elapsed="0.000255"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:54.796448" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:54.796257" elapsed="0.000249"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:54.796241" elapsed="0.000288"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:54.796663" elapsed="0.000021"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:46:54.783755" elapsed="0.013029">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:46:55.807400" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:55.807480" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:46:55.807701" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:46:55.802497" elapsed="0.005739">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:55.808503" elapsed="0.000032"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:55.808751" elapsed="0.000029"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:55.809126" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:55.808912" elapsed="0.000294"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:55.808882" elapsed="0.000360"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:55.809582" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:55.809317" elapsed="0.000347"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:55.809295" elapsed="0.000402"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:55.809906" elapsed="0.000066"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:46:55.797555" elapsed="0.012567">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:46:56.823037" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:56.823121" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:46:56.823300" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:46:56.816666" elapsed="0.007484">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:56.824595" elapsed="0.000054"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:56.825029" elapsed="0.000049"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:56.825587" elapsed="0.000045"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:56.825254" elapsed="0.000454"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:56.825209" elapsed="0.000581"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:56.826363" elapsed="0.000055"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:56.825941" elapsed="0.000550"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:56.825905" elapsed="0.000638"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:56.826867" elapsed="0.000049"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:46:56.811034" elapsed="0.016100">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:46:57.839403" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:57.839491" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:46:57.839740" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:46:57.833323" elapsed="0.006964">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:57.840572" elapsed="0.000033"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:57.840823" elapsed="0.000051"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:57.841201" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:57.840988" elapsed="0.000293"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:57.840958" elapsed="0.000359"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:57.841680" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:57.841393" elapsed="0.000370"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:57.841371" elapsed="0.000426"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:57.842007" elapsed="0.000031"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:46:57.828116" elapsed="0.014060">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:46:58.854315" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:58.854441" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:46:58.854600" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:46:58.848130" elapsed="0.007008">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:58.855415" elapsed="0.000033"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:58.855663" elapsed="0.000029"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:58.856037" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:58.855801" elapsed="0.000314"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:58.855772" elapsed="0.000378"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:58.856487" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:58.856224" elapsed="0.000345"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:58.856202" elapsed="0.000399"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:58.856788" elapsed="0.000030"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:46:58.843125" elapsed="0.013850">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:46:59.867819" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:46:59.867928" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:46:59.868177" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:46:59.862720" elapsed="0.005989">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:59.869003" elapsed="0.000060"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:59.869288" elapsed="0.000029"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:59.869637" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:59.869428" elapsed="0.000287"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:59.869398" elapsed="0.000353"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:59.870113" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:46:59.869824" elapsed="0.000371"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:46:59.869803" elapsed="0.000425"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:46:59.870414" elapsed="0.000030"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:46:59.857889" elapsed="0.012691">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:47:00.883140" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:47:00.883204" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:47:00.883327" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:47:00.876661" elapsed="0.007069">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:00.883942" elapsed="0.000025"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:00.884124" elapsed="0.000022"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:00.884381" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:47:00.884228" elapsed="0.000208"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:47:00.884206" elapsed="0.000256"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:00.884707" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:47:00.884516" elapsed="0.000262"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:47:00.884500" elapsed="0.000304"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:00.884957" elapsed="0.000022"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:47:00.871548" elapsed="0.013531">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:47:01.897536" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:47:01.897664" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:47:01.898034" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:47:01.890990" elapsed="0.007835">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:01.899290" elapsed="0.000054"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:01.899688" elapsed="0.000047"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:01.900285" elapsed="0.000047"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:47:01.899945" elapsed="0.000464"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:47:01.899897" elapsed="0.000568"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:01.901109" elapsed="0.000057"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:47:01.900639" elapsed="0.000603"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:47:01.900602" elapsed="0.000693"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:01.901563" elapsed="0.000029"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:47:01.885923" elapsed="0.015805">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:47:02.915171" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:47:02.915237" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:47:02.915369" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:47:02.908309" elapsed="0.007475">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:02.916015" elapsed="0.000025"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:02.916200" elapsed="0.000022"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:02.916477" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:47:02.916322" elapsed="0.000211"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:47:02.916298" elapsed="0.000261"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:02.916818" elapsed="0.000042"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:47:02.916613" elapsed="0.000281"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:47:02.916597" elapsed="0.000321"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:02.917056" elapsed="0.000021"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:47:02.902615" elapsed="0.014564">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:47:03.929460" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:47:03.929548" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:47:03.929996" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:47:03.923157" elapsed="0.007370">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:03.930793" elapsed="0.000033"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:03.931067" elapsed="0.000030"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:03.931436" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:47:03.931206" elapsed="0.000315"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:47:03.931177" elapsed="0.000380"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:03.931918" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:47:03.931632" elapsed="0.000384"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:47:03.931611" elapsed="0.000441"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:03.932240" elapsed="0.000030"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:47:03.918108" elapsed="0.014298">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:47:04.945046" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:47:04.945175" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:47:04.945411" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:47:04.938391" elapsed="0.007846">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:04.946656" elapsed="0.000053"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:04.947086" elapsed="0.000048"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:04.947641" elapsed="0.000097"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:47:04.947306" elapsed="0.000512"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:47:04.947262" elapsed="0.000648"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:04.948467" elapsed="0.000065"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:47:04.948036" elapsed="0.000581"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:47:04.948001" elapsed="0.000661"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:04.948869" elapsed="0.000031"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:47:04.933381" elapsed="0.015656">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:47:05.962661" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:47:05.962724" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:47:05.962938" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:47:05.957489" elapsed="0.005864">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:05.963595" elapsed="0.000024"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:05.963775" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:05.964049" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:47:05.963897" elapsed="0.000208"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:47:05.963872" elapsed="0.000259"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:05.964376" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:47:05.964184" elapsed="0.000250"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:47:05.964169" elapsed="0.000287"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:05.964587" elapsed="0.000020"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:47:05.950135" elapsed="0.014576">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:47:06.977315" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:47:06.977444" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:47:06.977668" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:47:06.970611" elapsed="0.007619">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:06.978499" elapsed="0.000032"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:06.978746" elapsed="0.000029"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:06.979143" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:47:06.978911" elapsed="0.000311"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:47:06.978880" elapsed="0.000377"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:06.979598" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:47:06.979331" elapsed="0.000347"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:47:06.979309" elapsed="0.000402"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:06.979916" elapsed="0.000030"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:47:06.965558" elapsed="0.014526">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:47:07.993081" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:47:07.993146" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:47:07.993348" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:47:07.986304" elapsed="0.007481">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:07.994014" elapsed="0.000024"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:07.994199" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:07.994468" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:47:07.994311" elapsed="0.000212"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:47:07.994283" elapsed="0.000271"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:07.994817" elapsed="0.000042"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:47:07.994609" elapsed="0.000286"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:47:07.994594" elapsed="0.000325"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:07.995053" elapsed="0.000021"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:47:07.981074" elapsed="0.014113">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:47:09.006613" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:47:09.006706" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:47:09.006915" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:47:09.001236" elapsed="0.006245">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:09.007760" elapsed="0.000033"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:09.008038" elapsed="0.000031"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:09.008399" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:47:09.008186" elapsed="0.000289"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:47:09.008153" elapsed="0.000359"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:09.008877" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:47:09.008592" elapsed="0.000368"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:47:09.008570" elapsed="0.000422"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:09.009177" elapsed="0.000030"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:47:08.996336" elapsed="0.013010">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:47:10.020298" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:47:10.020385" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:47:10.020639" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:47:10.015166" elapsed="0.006043">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:10.021483" elapsed="0.000032"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:10.021733" elapsed="0.000029"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:10.022205" elapsed="0.000041"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:47:10.021913" elapsed="0.000388"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:47:10.021880" elapsed="0.000459"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:10.022690" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:47:10.022416" elapsed="0.000354"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:47:10.022395" elapsed="0.000408"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:10.023017" elapsed="0.000031"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:47:10.010311" elapsed="0.012879">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:47:11.035731" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:47:11.035900" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:47:11.036159" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:47:11.029306" elapsed="0.007762">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:11.037505" elapsed="0.000052"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:11.037962" elapsed="0.000050"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:11.038548" elapsed="0.000052"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:47:11.038194" elapsed="0.000491"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:47:11.038147" elapsed="0.000603"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:11.039328" elapsed="0.000055"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:47:11.038902" elapsed="0.000554"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:47:11.038863" elapsed="0.000645"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:11.039801" elapsed="0.000087"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:47:11.024194" elapsed="0.015920">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:47:12.051740" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:47:12.051830" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:47:12.052112" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:47:12.046767" elapsed="0.005887">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:12.052949" elapsed="0.000034"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:12.053212" elapsed="0.000030"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:12.053599" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:47:12.053356" elapsed="0.000324"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:47:12.053324" elapsed="0.000395"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:12.054084" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:47:12.053794" elapsed="0.000372"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:47:12.053773" elapsed="0.000425"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:12.054385" elapsed="0.000030"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:47:12.041140" elapsed="0.013413">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:47:13.067400" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:47:13.067532" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:47:13.067768" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:47:13.060620" elapsed="0.007703">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:13.068592" elapsed="0.000033"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:13.068866" elapsed="0.000031"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:13.069254" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:47:13.069015" elapsed="0.000317"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:47:13.068984" elapsed="0.000386"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:13.069719" elapsed="0.000042"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:47:13.069444" elapsed="0.000374"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:47:13.069423" elapsed="0.000468"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:13.070085" elapsed="0.000029"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:47:13.055531" elapsed="0.014722">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:47:14.082050" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:47:14.082142" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:47:14.082410" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:47:14.076519" elapsed="0.006484">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:14.083315" elapsed="0.000035"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:14.083570" elapsed="0.000030"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:14.083961" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:47:14.083719" elapsed="0.000321"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:47:14.083686" elapsed="0.000395"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:14.084424" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:47:14.084156" elapsed="0.000349"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:47:14.084135" elapsed="0.000404"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:14.084723" elapsed="0.000059"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:47:14.071329" elapsed="0.013626">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:47:15.097478" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:47:15.097541" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:47:15.097666" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:47:15.091173" elapsed="0.006915">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:15.098284" elapsed="0.000023"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:15.098461" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:15.098716" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:47:15.098564" elapsed="0.000207"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:47:15.098542" elapsed="0.000258"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:15.099065" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:47:15.098872" elapsed="0.000251"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:47:15.098855" elapsed="0.000291"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:15.099283" elapsed="0.000021"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:47:15.085672" elapsed="0.013734">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:47:16.110045" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:47:16.110127" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:47:16.110352" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:47:16.104981" elapsed="0.005916">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:16.111172" elapsed="0.000033"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:16.111421" elapsed="0.000029"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:16.111773" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:47:16.111560" elapsed="0.000312"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:47:16.111530" elapsed="0.000382"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:16.112281" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:47:16.111989" elapsed="0.000373"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:47:16.111967" elapsed="0.000428"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:16.112580" elapsed="0.000029"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:47:16.100180" elapsed="0.012566">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:47:17.123127" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:47:17.123219" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:47:17.123380" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:47:17.118085" elapsed="0.005895">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:17.124249" elapsed="0.000032"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:17.124499" elapsed="0.000029"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:17.124875" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:47:17.124641" elapsed="0.000312"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:47:17.124611" elapsed="0.000380"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:17.125331" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:47:17.125066" elapsed="0.000345"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:47:17.125045" elapsed="0.000398"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:17.125626" elapsed="0.000029"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:47:17.113667" elapsed="0.012125">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:47:18.136712" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:47:18.136790" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:47:18.137074" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:47:18.132000" elapsed="0.005567">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:18.137825" elapsed="0.000060"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:18.138100" elapsed="0.000029"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:18.138440" elapsed="0.000038"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:47:18.138233" elapsed="0.000293"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:47:18.138206" elapsed="0.000356"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:18.138927" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:47:18.138637" elapsed="0.000372"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:47:18.138615" elapsed="0.000427"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:18.139241" elapsed="0.000032"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:47:18.126511" elapsed="0.012931">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:47:19.150918" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:47:19.151060" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:47:19.151276" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:47:19.145266" elapsed="0.006744">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:19.152311" elapsed="0.000032"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:19.152575" elapsed="0.000028"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:19.152986" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:47:19.152734" elapsed="0.000332"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:47:19.152695" elapsed="0.000422"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:19.153472" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:47:19.153194" elapsed="0.000360"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:47:19.153173" elapsed="0.000414"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:19.153776" elapsed="0.000028"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:47:19.140636" elapsed="0.013355">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:47:20.166130" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:47:20.166230" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:47:20.166568" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:47:20.160409" elapsed="0.006859">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:20.167555" elapsed="0.000033"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:20.167815" elapsed="0.000051"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:20.168222" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:47:20.167997" elapsed="0.000302"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:47:20.167959" elapsed="0.000384"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:20.168692" elapsed="0.000044"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:47:20.168418" elapsed="0.000379"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:47:20.168397" elapsed="0.000436"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:20.169053" elapsed="0.000030"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:47:20.155238" elapsed="0.014000">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<msg time="2026-08-23T01:47:20.169378" level="FAIL">Keyword 'Check_Netconf_Up_And_Running' failed after retrying for 1 minute. The last error was: HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<arg>${NETCONFREADY_WAIT}</arg>
<arg>1s</arg>
<arg>Check_Netconf_Up_And_Running</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-08-23T01:46:19.277998" elapsed="60.891518">Keyword 'Check_Netconf_Up_And_Running' failed after retrying for 1 minute. The last error was: HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<status status="FAIL" start="2026-08-23T01:46:19.277762" elapsed="60.891864">Keyword 'Check_Netconf_Up_And_Running' failed after retrying for 1 minute. The last error was: HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</branch>
<status status="FAIL" start="2026-08-23T01:46:19.277745" elapsed="60.891933">Keyword 'Check_Netconf_Up_And_Running' failed after retrying for 1 minute. The last error was: HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_is_ready}</arg>
<arg>True</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:20.169944" elapsed="0.000032"/>
</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-08-23T01:47:20.173757" elapsed="0.000039"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:47:20.171391" elapsed="0.002477"/>
</branch>
<status status="PASS" start="2026-08-23T01:47:20.171367" elapsed="0.002538"/>
</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-08-23T01:47:20.174112" elapsed="0.000622"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T01:47:20.181878" 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-08-23T01:47:20.181223" elapsed="0.000695"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="NOT RUN" start="2026-08-23T01:47:20.182235" elapsed="0.000029"/>
</return>
<status status="NOT RUN" start="2026-08-23T01:47:20.182022" elapsed="0.000284"/>
</branch>
<status status="PASS" start="2026-08-23T01:47:20.181996" elapsed="0.000341"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T01:47:20.183026" level="INFO">${newline} = 
</msg>
<var>${newline}</var>
<arg>chr(10)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-23T01:47:20.182540" elapsed="0.000524"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T01:47:20.185152" level="INFO">${reference} = netconf_gate_userfeatures_txt_Ready_Netconfready_Wait_For_Netconf_Connector</msg>
<var>${reference}</var>
<arg>${SUITE_NAME}_${TEST_NAME}</arg>
<arg>[ /\.-]</arg>
<arg>_</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-23T01:47:20.183289" elapsed="0.001986"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<msg time="2026-08-23T01:47:20.186427" level="INFO">${reference} = netconf_gate_userfeatures_txt_ready_netconfready_wait_for_netconf_connector</msg>
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="PASS" start="2026-08-23T01:47:20.185921" elapsed="0.000564"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T01:47:20.187825" level="INFO">${msg} = ... click for list of related bugs or create a new one if needed (with the
"netconf_gate_userfeatures_txt_ready_netconfready_wait_for_netconf_connector"
reference somewhere inside)</msg>
<var>${msg}</var>
<arg>... click for list of related bugs or create a new one if needed (with the${newline}"${reference}"${newline}reference somewhere inside)</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T01:47:20.186906" elapsed="0.001012"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T01:47:20.189179" level="INFO">${bugs} = "https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=netconf_gate_userfeatures_txt_ready_netconfready_wait_for_netconf_connector&amp;order=bug_status"</msg>
<var>${bugs}</var>
<arg>"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=${reference}&amp;order=bug_status"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T01:47:20.188430" elapsed="0.000812"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<msg time="2026-08-23T01:47:20.190664" level="INFO">Set test message to:
... click for list of related bugs or create a new one if needed (with the
"netconf_gate_userfeatures_txt_ready_netconfready_wait_for_netconf_connector"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=netconf_gate_userfeatures_txt_ready_netconfready_wait_for_netconf_connector&amp;order=bug_status"

Keyword 'Check_Netconf_Up_And_Running' failed after retrying for 1 minute. The last error was: HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<arg>${msg}${newline}${bugs}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="PASS" start="2026-08-23T01:47:20.189582" elapsed="0.001202"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:47:20.191827" level="INFO">... click for list of related bugs or create a new one if needed (with the
"netconf_gate_userfeatures_txt_ready_netconfready_wait_for_netconf_connector"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=netconf_gate_userfeatures_txt_ready_netconfready_wait_for_netconf_connector&amp;order=bug_status"</msg>
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:47:20.191165" elapsed="0.000817"/>
</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-08-23T01:47:20.180774" elapsed="0.011362"/>
</kw>
<status status="PASS" start="2026-08-23T01:47:20.171082" elapsed="0.021188"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-08-23T01:47:20.170459" elapsed="0.021918"/>
</kw>
<doc>Wait for the Netconf to go up for configurable time.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-08-23T01:46:19.165309" elapsed="61.027218">... click for list of related bugs or create a new one if needed (with the
"netconf_gate_userfeatures_txt_ready_netconfready_wait_for_netconf_connector"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=netconf_gate_userfeatures_txt_ready_netconfready_wait_for_netconf_connector&amp;order=bug_status"

Keyword 'Check_Netconf_Up_And_Running' failed after retrying for 1 minute. The last error was: HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</test>
<test id="s1-s1-s1-t3" name="Wait_Even_Longer" 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-08-23T01:47:20.200439" elapsed="0.000221"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T01:47:20.200123" elapsed="0.000592"/>
</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-08-23T01:47:20.202040" elapsed="0.000025"/>
</return>
<status status="NOT RUN" start="2026-08-23T01:47:20.201872" elapsed="0.000234"/>
</branch>
<status status="PASS" start="2026-08-23T01:47:20.201821" elapsed="0.000312"/>
</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-08-23T01:47:20.207222" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T01:47:20.207114" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-23T01:47:20.207095" elapsed="0.000195"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T01:47:20.208333" 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-08-23T01:47:20.207931" elapsed="0.000429"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T01:47:20.208817" 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-08-23T01:47:20.208520" elapsed="0.000338"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T01:47:20.208905" elapsed="0.000050"/>
</return>
<msg time="2026-08-23T01:47:20.209166" 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-08-23T01:47:20.207532" elapsed="0.001661"/>
</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-08-23T01:47:20.214983" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T01:47:20.214871" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-08-23T01:47:20.214850" 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-08-23T01:47:20.216317" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T01:47:20.216208" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-08-23T01:47:20.216190" elapsed="0.000197"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T01:47:20.216935" level="INFO">${karaf_connection_index} = 7</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-08-23T01:47:20.216536" elapsed="0.000426"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T01:47:20.217442" level="INFO">${current_connection_index} = 11</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-08-23T01:47:20.217173" elapsed="0.000295"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T01:47:20.260365" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T01:47:20.218053" elapsed="0.042488"/>
</kw>
<msg time="2026-08-23T01:47:20.260734" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T01:47:20.260780" 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 "n "e "t "c "o "n "f "...</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-08-23T01:47:20.217626" elapsed="0.043191"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T01:47:20.301878" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "R "e "a "d "y ". "N "e "t "c "o "n "f "r "e "a "d "y ". "W "a "i "t "_ "E "v "e "n "_ "L "o "n "g "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-08-23T01:47:20.261416" elapsed="0.040636"/>
</kw>
<msg time="2026-08-23T01:47:20.302218" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T01:47:20.302264" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "R "e "a "d "y ". "N "e "t "c "o "n "f "r "e "a "d "y ". "W "a "i "t "_ "E "v "e "n "_ ...</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-08-23T01:47:20.261013" elapsed="0.041288"/>
</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-08-23T01:47:20.302625" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:47:20.302377" elapsed="0.000325"/>
</branch>
<status status="PASS" start="2026-08-23T01:47:20.302357" elapsed="0.000370"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T01:47:20.303273" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "R "e "a "d "y ". "N "e "t "c "o "n "f "r "e "a "d "y ". "W "a "i "t "_ "E "v "e "n "_ "L "o "n "g "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T01:47:20.302901" elapsed="0.000439"/>
</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-08-23T01:47:20.303615" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:47:20.303405" elapsed="0.000285"/>
</branch>
<status status="PASS" start="2026-08-23T01:47:20.303388" elapsed="0.000327"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T01:47:20.303748" elapsed="0.000031"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-23T01:47:20.306900" elapsed="0.000155"/>
</kw>
<msg time="2026-08-23T01:47:20.307128" 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-08-23T01:47:20.306145" elapsed="0.001091"/>
</kw>
<kw name="Open 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-08-23T01:47:20.308195" elapsed="0.000037"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:20.309160" elapsed="0.000038"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T01:47:20.304652" elapsed="0.004623"/>
</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-08-23T01:47:20.304064" elapsed="0.005325"/>
</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-08-23T01:47:20.215904" elapsed="0.093584"/>
</kw>
<msg time="2026-08-23T01:47:20.309579" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T01:47:20.309625" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "R "e "a "d "y ". "N "e "t "c "o "n "f "r "e "a "d "y ". "W "a "i "t "_ "E "v "e "n "_ ...</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-08-23T01:47:20.215202" elapsed="0.094459"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T01:47:20.309868" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-23T01:47:20.309737" elapsed="0.000192"/>
</branch>
<status status="PASS" start="2026-08-23T01:47:20.309718" elapsed="0.000236"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 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-08-23T01:47:20.310363" 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-08-23T01:47:20.310710" elapsed="0.000026"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T01:47:20.310830" elapsed="0.000040"/>
</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-08-23T01:47:20.214505" elapsed="0.096462"/>
</kw>
<msg time="2026-08-23T01:47:20.311062" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T01:47:20.311106" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "R "e "a "d "y ". "N "e "t "c "o "n "f "r "e "a "d "y ". "W "a "i "t "_ "E "v "e "n "_ ...</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-08-23T01:47:20.209619" elapsed="0.101525"/>
</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-08-23T01:47:20.311465" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:47:20.311217" elapsed="0.000302"/>
</branch>
<status status="PASS" start="2026-08-23T01:47:20.311200" elapsed="0.000342"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T01:47:20.209468" elapsed="0.102097"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T01:47:20.209264" elapsed="0.102338"/>
</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-08-23T01:47:20.206732" elapsed="0.104926"/>
</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-08-23T01:47:20.201519" elapsed="0.110195"/>
</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-08-23T01:47:20.200897" elapsed="0.110861"/>
</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-08-23T01:47:20.195092" elapsed="0.116725"/>
</kw>
<kw name="Pass Execution If" owner="BuiltIn">
<arg>${netconf_is_ready}</arg>
<arg>Netconf was detected to be up and running so bug 5014 did not show up.</arg>
<doc>Conditionally skips rest of the current test, setup, or teardown with PASS status.</doc>
<status status="PASS" start="2026-08-23T01:47:20.312219" elapsed="0.000297"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:47:20.319722" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:47:20.319786" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:47:20.319943" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:47:20.315674" elapsed="0.004758">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:20.320615" elapsed="0.000023"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:20.320792" elapsed="0.000024"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:20.321062" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:47:20.320910" elapsed="0.000206"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:47:20.320890" elapsed="0.000250"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:20.321381" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:47:20.321192" elapsed="0.000245"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:47:20.321177" elapsed="0.000283"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:20.321595" elapsed="0.000020"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:47:20.313293" elapsed="0.008439">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:47:30.336790" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:47:30.336969" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:47:30.337121" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:47:30.329433" elapsed="0.008140">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:30.337787" elapsed="0.000024"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:30.337991" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:30.338280" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:47:30.338115" elapsed="0.000221"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:47:30.338086" elapsed="0.000279"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:30.338610" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:47:30.338419" elapsed="0.000250"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:47:30.338404" elapsed="0.000288"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:30.338827" elapsed="0.000047"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:47:30.323914" elapsed="0.015068">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:47:40.351819" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:47:40.351902" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:47:40.352027" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:47:40.345319" elapsed="0.007136">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:40.352651" elapsed="0.000024"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:40.352831" elapsed="0.000037"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:40.353107" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:47:40.352952" elapsed="0.000211"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:47:40.352930" elapsed="0.000259"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:40.353438" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:47:40.353241" elapsed="0.000255"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:47:40.353226" elapsed="0.000293"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:40.353651" elapsed="0.000021"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:47:40.340226" elapsed="0.013545">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:47:50.364599" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:47:50.364685" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:47:50.364881" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:47:50.360001" elapsed="0.005421">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:50.365727" elapsed="0.000034"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:50.366003" elapsed="0.000030"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:50.366363" elapsed="0.000038"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:47:50.366146" elapsed="0.000304"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:47:50.366117" elapsed="0.000369"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:50.366828" elapsed="0.000058"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:47:50.366563" elapsed="0.000371"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:47:50.366541" elapsed="0.000426"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:47:50.367158" elapsed="0.000029"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:47:50.354946" elapsed="0.012379">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:48:00.379948" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:48:00.380034" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:48:00.380189" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:48:00.373407" elapsed="0.007306">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:48:00.381002" elapsed="0.000034"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:48:00.381252" elapsed="0.000030"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:48:00.381603" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:48:00.381392" elapsed="0.000289"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:48:00.381363" elapsed="0.000355"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:48:00.382081" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:48:00.381797" elapsed="0.000366"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:48:00.381776" elapsed="0.000419"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:48:00.382382" elapsed="0.000136"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:48:00.368286" elapsed="0.014377">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:48:10.395070" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:48:10.395134" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:48:10.395254" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:48:10.388695" elapsed="0.006989">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:48:10.395898" elapsed="0.000024"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:48:10.396080" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:48:10.396337" elapsed="0.000041"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:48:10.396185" elapsed="0.000229"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:48:10.396162" elapsed="0.000278"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:48:10.396694" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:48:10.396501" elapsed="0.000251"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:48:10.396481" elapsed="0.000294"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:48:10.396927" elapsed="0.000024"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:48:10.383599" elapsed="0.013457">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:48:20.408376" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:48:20.408462" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:48:20.408631" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:48:20.403164" elapsed="0.006029">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:48:20.409463" elapsed="0.000032"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:48:20.409709" elapsed="0.000029"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:48:20.410116" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:48:20.409874" elapsed="0.000321"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:48:20.409819" elapsed="0.000414"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:48:20.410645" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:48:20.410379" elapsed="0.000347"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:48:20.410355" elapsed="0.000404"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:48:20.410967" elapsed="0.000031"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:48:20.397987" elapsed="0.013149">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:48:30.422703" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:48:30.422789" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:48:30.422974" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:48:30.417125" elapsed="0.006436">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:48:30.423878" elapsed="0.000034"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:48:30.424144" elapsed="0.000030"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:48:30.424501" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:48:30.424289" elapsed="0.000290"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:48:30.424259" elapsed="0.000358"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:48:30.424978" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:48:30.424691" elapsed="0.000370"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:48:30.424670" elapsed="0.000425"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:48:30.425319" elapsed="0.000031"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:48:30.412095" elapsed="0.013421">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:48:40.436700" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:48:40.436784" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:48:40.436963" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:48:40.431494" elapsed="0.005989">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:48:40.437763" elapsed="0.000034"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:48:40.438036" elapsed="0.000030"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:48:40.438497" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:48:40.438254" elapsed="0.000327"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:48:40.438225" elapsed="0.000395"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:48:40.439038" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:48:40.438700" elapsed="0.000424"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:48:40.438677" elapsed="0.000480"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:48:40.439349" elapsed="0.000029"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:48:40.426439" elapsed="0.013074">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:48:50.450516" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:48:50.450604" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:48:50.450771" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:48:50.445742" elapsed="0.005592">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:48:50.451602" elapsed="0.000033"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:48:50.451907" elapsed="0.000031"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:48:50.452265" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:48:50.452052" elapsed="0.000291"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:48:50.452021" elapsed="0.000357"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:48:50.452713" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:48:50.452452" elapsed="0.000341"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:48:50.452430" elapsed="0.000396"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:48:50.453041" elapsed="0.000029"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:48:50.440473" elapsed="0.012735">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:49:00.465775" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:49:00.465860" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:49:00.465983" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:49:00.459481" elapsed="0.006942">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:49:00.466698" elapsed="0.000024"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:49:00.466902" elapsed="0.000022"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:49:00.467168" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:49:00.467009" elapsed="0.000216"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:49:00.466986" elapsed="0.000265"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:49:00.467499" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:49:00.467305" elapsed="0.000253"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:49:00.467289" elapsed="0.000293"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:49:00.467717" elapsed="0.000021"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:49:00.454397" elapsed="0.013461">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:49:10.480385" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:49:10.480472" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:49:10.480636" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:49:10.474565" elapsed="0.006668">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:49:10.481510" elapsed="0.000033"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:49:10.481771" elapsed="0.000030"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:49:10.482172" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:49:10.481945" elapsed="0.000308"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:49:10.481911" elapsed="0.000378"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:49:10.482645" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:49:10.482369" elapsed="0.000360"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:49:10.482347" elapsed="0.000414"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:49:10.482976" elapsed="0.000039"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:49:10.469001" elapsed="0.014159">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:49:20.496970" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:49:20.497034" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:49:20.497171" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:49:20.490564" elapsed="0.007106">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:49:20.497887" elapsed="0.000025"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:49:20.498072" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:49:20.498331" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:49:20.498178" elapsed="0.000208"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:49:20.498155" elapsed="0.000261"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:49:20.498669" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:49:20.498470" elapsed="0.000257"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:49:20.498455" elapsed="0.000295"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:49:20.498901" elapsed="0.000022"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:49:20.484684" elapsed="0.014340">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:49:30.510366" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:49:30.510449" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:49:30.510603" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:49:30.504924" elapsed="0.006231">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:49:30.511427" elapsed="0.000032"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:49:30.511676" elapsed="0.000029"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:49:30.512084" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:49:30.511816" elapsed="0.000349"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:49:30.511786" elapsed="0.000416"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:49:30.512539" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:49:30.512275" elapsed="0.000345"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:49:30.512255" elapsed="0.000398"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:49:30.512864" elapsed="0.000031"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:49:30.499910" elapsed="0.013123">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:49:40.525735" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:49:40.525797" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:49:40.526010" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:49:40.520332" elapsed="0.006078">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:49:40.526627" elapsed="0.000025"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:49:40.526808" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:49:40.527080" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:49:40.526928" elapsed="0.000209"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:49:40.526905" elapsed="0.000259"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:49:40.527407" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:49:40.527216" elapsed="0.000248"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:49:40.527201" elapsed="0.000287"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:49:40.527622" elapsed="0.000021"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:49:40.513938" elapsed="0.013804">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:49:50.540023" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:49:50.540106" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:49:50.540270" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:49:50.534231" elapsed="0.006564">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:49:50.541087" elapsed="0.000033"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:49:50.541337" elapsed="0.000030"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:49:50.541688" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:49:50.541477" elapsed="0.000288"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:49:50.541448" elapsed="0.000353"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:49:50.542165" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:49:50.541901" elapsed="0.000343"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:49:50.541877" elapsed="0.000400"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:49:50.542462" elapsed="0.000029"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:49:50.528635" elapsed="0.013992">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:50:00.554924" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:50:00.555053" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:50:00.555406" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:50:00.548563" elapsed="0.007655">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:50:00.556636" elapsed="0.000050"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:50:00.557060" elapsed="0.000048"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:50:00.557637" elapsed="0.000048"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:50:00.557277" elapsed="0.000485"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:50:00.557234" elapsed="0.000658"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:50:00.558432" elapsed="0.000075"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:50:00.558017" elapsed="0.000563"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:50:00.557983" elapsed="0.000649"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:50:00.558960" elapsed="0.000048"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:50:00.543503" elapsed="0.015714">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:50:10.569514" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:50:10.569597" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:50:10.569751" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:50:10.564598" elapsed="0.005719">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:50:10.570585" elapsed="0.000031"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:50:10.570879" elapsed="0.000033"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:50:10.571290" elapsed="0.000054"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:50:10.571029" elapsed="0.000365"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:50:10.570999" elapsed="0.000434"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:50:10.571797" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:50:10.571521" elapsed="0.000383"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:50:10.571499" elapsed="0.000439"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:50:10.572128" elapsed="0.000029"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:50:10.560120" elapsed="0.012175">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:50:20.584043" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:50:20.584125" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:50:20.584367" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:50:20.578886" elapsed="0.006025">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:50:20.585176" elapsed="0.000033"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:50:20.585434" elapsed="0.000030"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:50:20.585788" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:50:20.585576" elapsed="0.000313"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:50:20.585546" elapsed="0.000381"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:50:20.586300" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:50:20.586002" elapsed="0.000380"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:50:20.585980" elapsed="0.000435"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:50:20.586601" elapsed="0.000030"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:50:20.573195" elapsed="0.013571">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:50:30.598899" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:50:30.598964" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:50:30.599082" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:50:30.592689" elapsed="0.006791">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:50:30.599695" elapsed="0.000024"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:50:30.599901" elapsed="0.000022"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:50:30.600161" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:50:30.600007" elapsed="0.000211"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:50:30.599985" elapsed="0.000261"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:50:30.600490" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:50:30.600299" elapsed="0.000249"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:50:30.600284" elapsed="0.000287"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:50:30.600706" elapsed="0.000021"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:50:30.587615" elapsed="0.013212">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:50:40.611192" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:50:40.611278" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:50:40.611564" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:50:40.605923" elapsed="0.006211">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:50:40.612415" elapsed="0.000031"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:50:40.612662" elapsed="0.000028"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:50:40.613045" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:50:40.612802" elapsed="0.000322"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:50:40.612772" elapsed="0.000390"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:50:40.613502" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:50:40.613236" elapsed="0.000346"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:50:40.613215" elapsed="0.000399"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:50:40.613798" elapsed="0.000029"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:50:40.601693" elapsed="0.012294">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:50:50.627456" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:50:50.627542" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:50:50.627712" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:50:50.620778" elapsed="0.007503">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:50:50.628564" elapsed="0.000035"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:50:50.628828" elapsed="0.000052"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:50:50.629241" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:50:50.629014" elapsed="0.000310"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:50:50.628983" elapsed="0.000380"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:50:50.629723" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:50:50.629442" elapsed="0.000365"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:50:50.629419" elapsed="0.000471"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:50:50.630101" elapsed="0.000031"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:50:50.615287" elapsed="0.014991">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:51:00.642281" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:51:00.642342" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:51:00.642534" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:51:00.636220" elapsed="0.006736">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:51:00.643149" elapsed="0.000024"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:51:00.643328" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:51:00.643584" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:51:00.643432" elapsed="0.000209"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:51:00.643410" elapsed="0.000258"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:51:00.643931" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:51:00.643721" elapsed="0.000269"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:51:00.643706" elapsed="0.000308"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:51:00.644166" elapsed="0.000021"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:51:00.631180" elapsed="0.013108">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:51:10.655105" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:51:10.655188" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:51:10.655363" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:51:10.650085" elapsed="0.005870">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:51:10.656230" elapsed="0.000033"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:51:10.656482" elapsed="0.000029"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:51:10.656856" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:51:10.656623" elapsed="0.000314"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:51:10.656593" elapsed="0.000381"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:51:10.657323" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:51:10.657049" elapsed="0.000355"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:51:10.657028" elapsed="0.000409"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:51:10.657624" elapsed="0.000030"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:51:10.645413" elapsed="0.012378">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:51:20.670469" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:51:20.670534" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:51:20.670716" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:51:20.664304" elapsed="0.006847">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:51:20.671345" elapsed="0.000023"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:51:20.671525" elapsed="0.000022"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:51:20.671781" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:51:20.671628" elapsed="0.000243"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:51:20.671606" elapsed="0.000297"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:51:20.672151" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:51:20.671959" elapsed="0.000254"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:51:20.671943" elapsed="0.000293"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:51:20.672368" elapsed="0.000021"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:51:20.658667" elapsed="0.013823">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:51:30.684702" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:51:30.684765" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:51:30.684908" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:51:30.678387" elapsed="0.006929">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:51:30.685516" elapsed="0.000025"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:51:30.685703" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:51:30.685982" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:51:30.685811" elapsed="0.000227"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:51:30.685787" elapsed="0.000278"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:51:30.686327" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:51:30.686118" elapsed="0.000266"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:51:30.686102" elapsed="0.000305"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:51:30.686543" elapsed="0.000020"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:51:30.673389" elapsed="0.013275">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:51:40.699112" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:51:40.699174" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:51:40.699364" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:51:40.692593" elapsed="0.007178">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:51:40.699995" elapsed="0.000024"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:51:40.700175" elapsed="0.000020"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:51:40.700428" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:51:40.700277" elapsed="0.000213"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:51:40.700255" elapsed="0.000260"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:51:40.700758" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:51:40.700569" elapsed="0.000247"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:51:40.700553" elapsed="0.000303"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:51:40.700994" elapsed="0.000021"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:51:40.687564" elapsed="0.013556">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:51:50.714270" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:51:50.714332" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:51:50.714464" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:51:50.708109" elapsed="0.006783">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:51:50.715089" elapsed="0.000024"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:51:50.715268" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:51:50.715523" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:51:50.715372" elapsed="0.000206"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:51:50.715349" elapsed="0.000256"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:51:50.715864" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:51:50.715658" elapsed="0.000265"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:51:50.715643" elapsed="0.000304"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:51:50.716079" elapsed="0.000021"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:51:50.702058" elapsed="0.014146">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:52:00.723520" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:52:00.723582" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:52:00.723767" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:52:00.719198" elapsed="0.004994">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:52:00.724402" elapsed="0.000024"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:52:00.724582" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:52:00.724932" elapsed="0.000044"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:52:00.724686" elapsed="0.000329"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:52:00.724664" elapsed="0.000378"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:52:00.725293" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:52:00.725097" elapsed="0.000269"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:52:00.725081" elapsed="0.000313"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:52:00.725555" elapsed="0.000020"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:52:00.716782" elapsed="0.008898">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:52:10.734271" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:52:10.734357" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:52:10.734509" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:52:10.729508" elapsed="0.005543">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:52:10.735328" elapsed="0.000033"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:52:10.735577" elapsed="0.000029"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:52:10.736007" elapsed="0.000044"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:52:10.735722" elapsed="0.000379"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:52:10.735687" elapsed="0.000449"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:52:10.736474" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:52:10.736211" elapsed="0.000342"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:52:10.736189" elapsed="0.000396"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:52:10.736936" elapsed="0.000036"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:52:10.726329" elapsed="0.010780">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:52:20.751433" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:52:20.751518" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:52:20.751791" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:52:20.745440" elapsed="0.006903">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:52:20.752609" elapsed="0.000033"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:52:20.752879" elapsed="0.000031"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:52:20.753239" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:52:20.753021" elapsed="0.000298"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:52:20.752992" elapsed="0.000362"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:52:20.753693" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:52:20.753428" elapsed="0.000345"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:52:20.753407" elapsed="0.000399"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:52:20.754015" elapsed="0.000030"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:52:20.738056" elapsed="0.016126">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:52:30.766770" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:52:30.766942" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:52:30.767170" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:52:30.760088" elapsed="0.007614">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:52:30.768000" elapsed="0.000035"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:52:30.768252" elapsed="0.000028"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:52:30.768607" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:52:30.768394" elapsed="0.000289"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:52:30.768364" elapsed="0.000355"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:52:30.769083" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:52:30.768795" elapsed="0.000369"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:52:30.768774" elapsed="0.000440"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:52:30.769405" elapsed="0.000029"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:52:30.755038" elapsed="0.014533">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:52:40.781218" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:52:40.781300" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:52:40.781532" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:52:40.775641" elapsed="0.006440">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:52:40.782348" elapsed="0.000032"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:52:40.782595" elapsed="0.000029"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:52:40.782972" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:52:40.782736" elapsed="0.000317"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:52:40.782705" elapsed="0.000384"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:52:40.783450" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:52:40.783180" elapsed="0.000351"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:52:40.783159" elapsed="0.000405"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:52:40.783759" elapsed="0.000030"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:52:40.770496" elapsed="0.013450">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:52:50.797506" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:52:50.797596" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:52:50.797776" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:52:50.790751" elapsed="0.007616">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:52:50.798657" elapsed="0.000034"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:52:50.798945" elapsed="0.000032"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:52:50.799325" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:52:50.799100" elapsed="0.000307"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:52:50.799068" elapsed="0.000377"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:52:50.799817" elapsed="0.000057"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:52:50.799525" elapsed="0.000399"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:52:50.799503" elapsed="0.000455"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:52:50.800170" elapsed="0.000031"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:52:50.784798" elapsed="0.015562">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:53:00.812940" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:53:00.813027" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:53:00.813278" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:53:00.806360" elapsed="0.007443">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:53:00.814100" elapsed="0.000033"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:53:00.814350" elapsed="0.000030"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:53:00.814704" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:53:00.814493" elapsed="0.000291"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:53:00.814463" elapsed="0.000357"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:53:00.815188" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:53:00.814920" elapsed="0.000349"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:53:00.814898" elapsed="0.000404"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:53:00.815489" elapsed="0.000030"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:53:00.801302" elapsed="0.014354">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:53:10.827342" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:53:10.827404" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:53:10.827520" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:53:10.821588" elapsed="0.006359">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:53:10.828146" elapsed="0.000023"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:53:10.828325" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:53:10.828596" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:53:10.828429" elapsed="0.000224"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:53:10.828406" elapsed="0.000273"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:53:10.828941" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:53:10.828733" elapsed="0.000268"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:53:10.828717" elapsed="0.000308"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:53:10.829163" elapsed="0.000021"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:53:10.816536" elapsed="0.012747">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:53:20.841825" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:53:20.841937" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:53:20.842195" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:53:20.836417" elapsed="0.006312">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:53:20.843032" elapsed="0.000033"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:53:20.843282" elapsed="0.000029"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:53:20.843636" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:53:20.843423" elapsed="0.000289"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:53:20.843392" elapsed="0.000357"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:53:20.844151" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:53:20.843824" elapsed="0.000410"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:53:20.843802" elapsed="0.000465"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:53:20.844454" elapsed="0.000029"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:53:20.830309" elapsed="0.014311">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:53:30.858495" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:53:30.858584" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:53:30.858746" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:53:30.851885" elapsed="0.007433">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:53:30.859637" elapsed="0.000035"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:53:30.859925" elapsed="0.000031"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:53:30.860297" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:53:30.860078" elapsed="0.000297"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:53:30.860045" elapsed="0.000365"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:53:30.860776" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:53:30.860485" elapsed="0.000397"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:53:30.860463" elapsed="0.000454"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:53:30.861110" elapsed="0.000029"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:53:30.845815" elapsed="0.015471">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:53:40.873765" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:53:40.873827" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:53:40.874053" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:53:40.867546" elapsed="0.006919">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:53:40.874660" elapsed="0.000024"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:53:40.874844" elapsed="0.000036"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:53:40.875118" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:53:40.874964" elapsed="0.000212"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:53:40.874942" elapsed="0.000259"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:53:40.875445" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:53:40.875254" elapsed="0.000253"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:53:40.875239" elapsed="0.000292"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:53:40.875666" elapsed="0.000021"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:53:40.862445" elapsed="0.013341">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:53:50.889070" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:53:50.889157" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:53:50.889326" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:53:50.882729" elapsed="0.007190">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:53:50.890228" elapsed="0.000035"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:53:50.890479" elapsed="0.000030"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:53:50.890829" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:53:50.890619" elapsed="0.000310"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:53:50.890590" elapsed="0.000375"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:53:50.891315" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:53:50.891042" elapsed="0.000354"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:53:50.891020" elapsed="0.000410"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:53:50.891618" elapsed="0.000030"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:53:50.876967" elapsed="0.014816">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:54:00.904453" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:54:00.904517" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:54:00.904745" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:54:00.898370" elapsed="0.006797">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:54:00.905366" elapsed="0.000025"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:54:00.905548" elapsed="0.000022"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:54:00.905804" elapsed="0.000046"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:54:00.905653" elapsed="0.000235"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:54:00.905630" elapsed="0.000285"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:54:00.906169" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:54:00.905969" elapsed="0.000258"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:54:00.905953" elapsed="0.000298"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:54:00.906387" elapsed="0.000021"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:54:00.892988" elapsed="0.013524">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:54:10.919043" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:54:10.919129" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:54:10.919292" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:54:10.912599" elapsed="0.007231">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:54:10.920161" elapsed="0.000033"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:54:10.920409" elapsed="0.000029"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:54:10.920760" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:54:10.920552" elapsed="0.000305"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:54:10.920521" elapsed="0.000376"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:54:10.921236" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:54:10.920973" elapsed="0.000342"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:54:10.920951" elapsed="0.000397"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:54:10.921531" elapsed="0.000028"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:54:10.907501" elapsed="0.014195">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:54:20.933180" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:54:20.933265" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:54:20.933510" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:54:20.928151" elapsed="0.005909">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:54:20.934329" elapsed="0.000033"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:54:20.934576" elapsed="0.000030"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:54:20.934955" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:54:20.934717" elapsed="0.000319"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:54:20.934687" elapsed="0.000384"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:54:20.935448" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:54:20.935147" elapsed="0.000386"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:54:20.935125" elapsed="0.000441"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:54:20.935752" elapsed="0.000030"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:54:20.922575" elapsed="0.013371">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:54:30.947526" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:54:30.947588" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:54:30.947705" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:54:30.941905" elapsed="0.006220">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:54:30.948327" elapsed="0.000023"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:54:30.948523" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:54:30.948782" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:54:30.948630" elapsed="0.000224"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:54:30.948607" elapsed="0.000274"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:54:30.949129" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:54:30.948936" elapsed="0.000251"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:54:30.948920" elapsed="0.000291"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:54:30.949346" elapsed="0.000021"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:54:30.936873" elapsed="0.012593">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:54:40.959872" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:54:40.959958" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:54:40.960206" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:54:40.955108" elapsed="0.005633">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:54:40.961043" elapsed="0.000034"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:54:40.961294" elapsed="0.000030"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:54:40.961649" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:54:40.961437" elapsed="0.000291"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:54:40.961407" elapsed="0.000372"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:54:40.962155" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:54:40.961888" elapsed="0.000350"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:54:40.961864" elapsed="0.000407"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:54:40.962459" elapsed="0.000030"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:54:40.950410" elapsed="0.012222">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:54:50.975944" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:54:50.976033" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:54:50.976207" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:54:50.969535" elapsed="0.007221">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:54:50.977067" elapsed="0.000057"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:54:50.977358" elapsed="0.000031"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:54:50.977737" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:54:50.977509" elapsed="0.000312"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:54:50.977478" elapsed="0.000410"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:54:50.978261" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:54:50.977971" elapsed="0.000376"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:54:50.977947" elapsed="0.000435"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:54:50.978581" elapsed="0.000030"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:54:50.963507" elapsed="0.015249">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:55:00.991519" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:55:00.991603" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:55:00.991868" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:55:00.984654" elapsed="0.007743">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:55:00.992665" elapsed="0.000032"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:55:00.992940" elapsed="0.000057"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:55:00.993341" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:55:00.993125" elapsed="0.000297"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:55:00.993094" elapsed="0.000364"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:55:00.993799" elapsed="0.000054"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:55:00.993534" elapsed="0.000369"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:55:00.993512" elapsed="0.000424"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:55:00.994125" elapsed="0.000030"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:55:00.979622" elapsed="0.014670">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:55:11.006014" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:55:11.006097" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:55:11.006251" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:55:11.000241" elapsed="0.006526">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:55:11.007066" elapsed="0.000032"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:55:11.007314" elapsed="0.000029"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:55:11.007666" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:55:11.007455" elapsed="0.000290"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:55:11.007425" elapsed="0.000355"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:55:11.008146" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:55:11.007880" elapsed="0.000347"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:55:11.007856" elapsed="0.000404"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:55:11.008448" elapsed="0.000028"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:55:10.995170" elapsed="0.013476">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:55:21.018315" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:55:21.018425" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:55:21.018755" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:55:21.012266" elapsed="0.006919">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:55:21.019389" elapsed="0.000023"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:55:21.019570" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:55:21.019828" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:55:21.019675" elapsed="0.000224"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:55:21.019652" elapsed="0.000275"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:55:21.020176" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:55:21.019981" elapsed="0.000252"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:55:21.019966" elapsed="0.000290"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:55:21.020388" elapsed="0.000021"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:55:21.009525" elapsed="0.010985">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:55:31.032824" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:55:31.032909" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:55:31.033034" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:55:31.026888" elapsed="0.006563">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:55:31.033664" elapsed="0.000024"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:55:31.033863" elapsed="0.000022"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:55:31.034149" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:55:31.033985" elapsed="0.000220"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:55:31.033959" elapsed="0.000274"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:55:31.034481" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:55:31.034288" elapsed="0.000251"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:55:31.034272" elapsed="0.000291"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:55:31.034698" elapsed="0.000021"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:55:31.021732" elapsed="0.013091">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:55:41.046455" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:55:41.046539" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:55:41.046779" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:55:41.040824" elapsed="0.006506">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:55:41.047597" elapsed="0.000033"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:55:41.047869" elapsed="0.000031"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:55:41.048255" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:55:41.048011" elapsed="0.000324"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:55:41.047982" elapsed="0.000390"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:55:41.048711" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:55:41.048447" elapsed="0.000344"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:55:41.048425" elapsed="0.000399"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:55:41.049036" elapsed="0.000031"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:55:41.035693" elapsed="0.013511">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:55:51.060354" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:55:51.060437" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:55:51.060599" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:55:51.055413" elapsed="0.005732">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:55:51.061410" elapsed="0.000032"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:55:51.061654" elapsed="0.000029"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:55:51.062039" elapsed="0.000061"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:55:51.061792" elapsed="0.000359"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:55:51.061763" elapsed="0.000423"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:55:51.062526" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:55:51.062263" elapsed="0.000344"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:55:51.062240" elapsed="0.000400"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:55:51.062826" elapsed="0.000052"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:55:51.050155" elapsed="0.012859">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:56:01.075885" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:56:01.075977" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:56:01.076211" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:56:01.069654" elapsed="0.007116">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:56:01.077075" elapsed="0.000034"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:56:01.077327" elapsed="0.000030"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:56:01.077679" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:56:01.077468" elapsed="0.000289"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:56:01.077439" elapsed="0.000353"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:56:01.078170" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:56:01.077888" elapsed="0.000364"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:56:01.077864" elapsed="0.000420"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:56:01.078473" elapsed="0.000061"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:56:01.064410" elapsed="0.014264">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:56:11.088656" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:56:11.088738" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:56:11.088916" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:56:11.084033" elapsed="0.005412">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:56:11.089713" elapsed="0.000033"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:56:11.090022" elapsed="0.000031"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:56:11.090379" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:56:11.090165" elapsed="0.000292"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:56:11.090137" elapsed="0.000356"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:56:11.090855" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:56:11.090568" elapsed="0.000371"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:56:11.090546" elapsed="0.000426"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:56:11.091163" elapsed="0.000030"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:56:11.079654" elapsed="0.011675">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:56:21.104136" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:56:21.104199" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:56:21.104383" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:56:21.097830" elapsed="0.006950">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:56:21.104998" elapsed="0.000024"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:56:21.105180" elapsed="0.000022"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:56:21.105455" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:56:21.105301" elapsed="0.000216"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:56:21.105278" elapsed="0.000264"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:56:21.105794" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:56:21.105596" elapsed="0.000274"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:56:21.105581" elapsed="0.000313"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:56:21.106032" elapsed="0.000021"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:56:21.092193" elapsed="0.013961">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:56:31.119593" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:56:31.119728" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:56:31.119974" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:56:31.112081" elapsed="0.008436">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:56:31.120804" elapsed="0.000058"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:56:31.121089" elapsed="0.000030"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:56:31.121447" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:56:31.121232" elapsed="0.000295"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:56:31.121202" elapsed="0.000384"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:56:31.121959" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:56:31.121667" elapsed="0.000376"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:56:31.121643" elapsed="0.000433"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:56:31.122267" elapsed="0.000029"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:56:31.107056" elapsed="0.015380">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:56:41.134112" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:56:41.134198" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:56:41.134438" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:56:41.128412" elapsed="0.006571">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:56:41.135255" elapsed="0.000034"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:56:41.135506" elapsed="0.000030"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:56:41.135880" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:56:41.135648" elapsed="0.000312"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:56:41.135618" elapsed="0.000409"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:56:41.136371" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:56:41.136107" elapsed="0.000345"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:56:41.136084" elapsed="0.000400"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:56:41.136671" elapsed="0.000031"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:56:41.123351" elapsed="0.013506">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:56:51.149504" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:56:51.149566" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:56:51.149692" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:56:51.143367" elapsed="0.006754">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:56:51.150317" elapsed="0.000023"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:56:51.150496" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:56:51.150749" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:56:51.150598" elapsed="0.000207"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:56:51.150576" elapsed="0.000254"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:56:51.151097" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:56:51.150901" elapsed="0.000254"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:56:51.150885" elapsed="0.000293"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:56:51.151312" elapsed="0.000020"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:56:51.137713" elapsed="0.013717">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:57:01.163040" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:57:01.163125" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:57:01.163362" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:57:01.157389" elapsed="0.006520">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:57:01.164179" elapsed="0.000032"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:57:01.164428" elapsed="0.000029"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:57:01.164797" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:57:01.164567" elapsed="0.000334"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:57:01.164537" elapsed="0.000401"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:57:01.165277" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:57:01.165013" elapsed="0.000346"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:57:01.164991" elapsed="0.000401"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:57:01.165580" elapsed="0.000030"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:57:01.152350" elapsed="0.013398">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:57:11.174431" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:57:11.174543" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:57:11.174743" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:57:11.169204" elapsed="0.006117">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:57:11.175519" elapsed="0.000023"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:57:11.175699" elapsed="0.000020"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:57:11.175979" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:57:11.175803" elapsed="0.000234"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:57:11.175781" elapsed="0.000283"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:57:11.176308" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:57:11.176117" elapsed="0.000249"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:57:11.176101" elapsed="0.000288"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:57:11.176523" elapsed="0.000020"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:57:11.166579" elapsed="0.010063">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:57:21.188337" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:57:21.188422" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:57:21.188661" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:57:21.183274" elapsed="0.005939">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:57:21.189482" elapsed="0.000033"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:57:21.189731" elapsed="0.000030"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:57:21.190115" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:57:21.189898" elapsed="0.000297"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:57:21.189847" elapsed="0.000385"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:57:21.190570" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:57:21.190307" elapsed="0.000344"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:57:21.190285" elapsed="0.000398"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:57:21.190893" elapsed="0.000031"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:57:21.177531" elapsed="0.013531">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:57:31.199810" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:57:31.199898" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:57:31.200032" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:57:31.194186" elapsed="0.006267">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:57:31.200653" elapsed="0.000022"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:57:31.200836" elapsed="0.000037"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:57:31.201114" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:57:31.200959" elapsed="0.000211"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:57:31.200936" elapsed="0.000261"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:57:31.201438" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:57:31.201250" elapsed="0.000247"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:57:31.201235" elapsed="0.000289"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:57:31.201659" elapsed="0.000020"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:57:31.191651" elapsed="0.010131">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:57:41.213659" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:57:41.213721" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:57:41.213926" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:57:41.207606" elapsed="0.006720">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:57:41.214524" elapsed="0.000023"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:57:41.214704" elapsed="0.000020"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:57:41.214993" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:57:41.214823" elapsed="0.000233"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:57:41.214800" elapsed="0.000282"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:57:41.215344" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:57:41.215136" elapsed="0.000267"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:57:41.215120" elapsed="0.000307"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:57:41.215562" elapsed="0.000021"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:57:41.202555" elapsed="0.013127">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:57:51.229148" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:57:51.229211" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:57:51.229334" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:57:51.222205" elapsed="0.007525">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:57:51.229945" elapsed="0.000024"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:57:51.230125" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:57:51.230380" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:57:51.230229" elapsed="0.000206"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:57:51.230206" elapsed="0.000255"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:57:51.230706" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:57:51.230514" elapsed="0.000249"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:57:51.230498" elapsed="0.000288"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:57:51.230935" elapsed="0.000021"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:57:51.216581" elapsed="0.014475">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:58:01.242502" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:58:01.242586" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:58:01.242825" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:58:01.237019" elapsed="0.006367">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:58:01.243653" elapsed="0.000033"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:58:01.243928" elapsed="0.000031"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:58:01.244286" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:58:01.244073" elapsed="0.000308"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:58:01.244043" elapsed="0.000376"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:58:01.244766" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:58:01.244494" elapsed="0.000378"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:58:01.244472" elapsed="0.000435"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:58:01.245097" elapsed="0.000030"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:58:01.231989" elapsed="0.013274">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:58:11.255965" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:58:11.256050" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:58:11.256206" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:58:11.250927" elapsed="0.005812">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:58:11.257032" elapsed="0.000033"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:58:11.257282" elapsed="0.000029"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:58:11.257651" elapsed="0.000054"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:58:11.257424" elapsed="0.000329"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:58:11.257394" elapsed="0.000397"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:58:11.258156" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:58:11.257888" elapsed="0.000348"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:58:11.257865" elapsed="0.000404"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:58:11.258452" elapsed="0.000028"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:58:11.246246" elapsed="0.012370">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:58:21.271018" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:58:21.271101" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:58:21.271336" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:58:21.265213" elapsed="0.006677">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:58:21.272161" elapsed="0.000032"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:58:21.272407" elapsed="0.000029"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:58:21.272759" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:58:21.272549" elapsed="0.000307"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:58:21.272519" elapsed="0.000378"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:58:21.273237" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:58:21.272972" elapsed="0.000344"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:58:21.272950" elapsed="0.000400"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:58:21.273539" elapsed="0.000029"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:58:21.259591" elapsed="0.014112">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:58:31.289106" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:58:31.289234" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:58:31.289463" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:58:31.279653" elapsed="0.010620">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:58:31.290694" elapsed="0.000052"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:58:31.291118" elapsed="0.000046"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:58:31.291669" elapsed="0.000047"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:58:31.291334" elapsed="0.000456"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:58:31.291291" elapsed="0.000587"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:58:31.292463" elapsed="0.000054"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:58:31.292000" elapsed="0.000590"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:58:31.291965" elapsed="0.000677"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:58:31.292968" elapsed="0.000047"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:58:31.274560" elapsed="0.018668">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:58:41.307085" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:58:41.307223" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:58:41.307599" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:58:41.299174" elapsed="0.009297">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:58:41.308955" elapsed="0.000056"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:58:41.309380" elapsed="0.000051"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:58:41.310008" elapsed="0.000052"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:58:41.309615" elapsed="0.000531"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:58:41.309568" elapsed="0.000638"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:58:41.310783" elapsed="0.000087"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:58:41.310334" elapsed="0.000620"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:58:41.310297" elapsed="0.000713"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:58:41.311358" elapsed="0.000051"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:58:41.294124" elapsed="0.017518">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:58:51.326683" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:58:51.326768" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:58:51.326964" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:58:51.318067" elapsed="0.009421">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:58:51.327756" elapsed="0.000032"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:58:51.328027" elapsed="0.000029"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:58:51.328378" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:58:51.328168" elapsed="0.000288"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:58:51.328138" elapsed="0.000354"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:58:51.328829" elapsed="0.000054"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:58:51.328567" elapsed="0.000364"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:58:51.328545" elapsed="0.000418"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:58:51.329151" elapsed="0.000028"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:58:51.312542" elapsed="0.016773">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:59:01.342161" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:59:01.342245" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:59:01.342493" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:59:01.335318" elapsed="0.007724">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:59:01.343315" elapsed="0.000032"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:59:01.343564" elapsed="0.000029"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:59:01.343939" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:59:01.343705" elapsed="0.000314"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:59:01.343676" elapsed="0.000379"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:59:01.344394" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:59:01.344130" elapsed="0.000346"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:59:01.344108" elapsed="0.000401"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:59:01.344715" elapsed="0.000034"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:59:01.330252" elapsed="0.014692">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:59:11.356600" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:59:11.356682" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:59:11.356856" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:59:11.350821" elapsed="0.006568">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:59:11.357657" elapsed="0.000032"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:59:11.357928" elapsed="0.000031"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:59:11.358285" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:59:11.358072" elapsed="0.000291"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:59:11.358043" elapsed="0.000357"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:59:11.358758" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:59:11.358475" elapsed="0.000385"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:59:11.358453" elapsed="0.000442"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:59:11.359083" elapsed="0.000029"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:59:11.345809" elapsed="0.013464">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:59:21.373232" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:59:21.373293" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:59:21.373487" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:59:21.365776" elapsed="0.008142">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:59:21.374114" elapsed="0.000023"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:59:21.374294" elapsed="0.000020"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:59:21.374556" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:59:21.374404" elapsed="0.000208"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:59:21.374381" elapsed="0.000259"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:59:21.374904" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:59:21.374696" elapsed="0.000268"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:59:21.374680" elapsed="0.000308"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:59:21.375121" elapsed="0.000021"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:59:21.360181" elapsed="0.015062">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:59:31.388628" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:59:31.388690" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:59:31.388813" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:59:31.381704" elapsed="0.007557">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:59:31.389457" elapsed="0.000023"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:59:31.389637" elapsed="0.000022"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:59:31.389960" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:59:31.389783" elapsed="0.000234"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:59:31.389760" elapsed="0.000284"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:59:31.390288" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:59:31.390098" elapsed="0.000248"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:59:31.390082" elapsed="0.000287"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:59:31.390502" elapsed="0.000020"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:59:31.376240" elapsed="0.014396">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:59:41.403607" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:59:41.403669" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:59:41.403888" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:59:41.396796" elapsed="0.007499">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:59:41.404497" elapsed="0.000023"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:59:41.404676" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:59:41.404952" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:59:41.404780" elapsed="0.000230"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:59:41.404757" elapsed="0.000280"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:59:41.405297" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:59:41.405091" elapsed="0.000265"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:59:41.405075" elapsed="0.000304"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:59:41.405514" elapsed="0.000022"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:59:41.391697" elapsed="0.013941">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T01:59:51.418296" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T01:59:51.418379" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T01:59:51.418542" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T01:59:51.412093" elapsed="0.007004">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T01:59:51.419365" elapsed="0.000032"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T01:59:51.419612" elapsed="0.000029"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T01:59:51.420013" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:59:51.419752" elapsed="0.000343"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:59:51.419722" elapsed="0.000411"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T01:59:51.420481" elapsed="0.000056"/>
</kw>
<status status="NOT RUN" start="2026-08-23T01:59:51.420210" elapsed="0.000377"/>
</branch>
<status status="NOT RUN" start="2026-08-23T01:59:51.420187" elapsed="0.000433"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T01:59:51.420809" elapsed="0.000049"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T01:59:51.406512" elapsed="0.014486">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:00:01.434060" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:00:01.434145" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:00:01.434380" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:00:01.427056" elapsed="0.007912">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:00:01.435241" elapsed="0.000033"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T02:00:01.435490" elapsed="0.000029"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T02:00:01.435864" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:00:01.435631" elapsed="0.000316"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:00:01.435602" elapsed="0.000382"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T02:00:01.436319" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:00:01.436057" elapsed="0.000344"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:00:01.436036" elapsed="0.000398"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:00:01.436622" elapsed="0.000030"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T02:00:01.421927" elapsed="0.014862">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:00:11.450447" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:00:11.450511" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:00:11.450636" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:00:11.442766" elapsed="0.008296">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:00:11.451260" elapsed="0.000023"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T02:00:11.451440" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T02:00:11.451700" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:00:11.451547" elapsed="0.000208"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:00:11.451523" elapsed="0.000260"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T02:00:11.452047" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:00:11.451854" elapsed="0.000252"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:00:11.451822" elapsed="0.000307"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:00:11.452264" elapsed="0.000021"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T02:00:11.437710" elapsed="0.014675">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:00:21.466777" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:00:21.466891" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:00:21.467138" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:00:21.458921" elapsed="0.008760">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:00:21.467972" elapsed="0.000034"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T02:00:21.468224" elapsed="0.000030"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T02:00:21.468577" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:00:21.468364" elapsed="0.000293"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:00:21.468335" elapsed="0.000360"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T02:00:21.469072" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:00:21.468771" elapsed="0.000384"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:00:21.468749" elapsed="0.000440"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:00:21.469377" elapsed="0.000029"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T02:00:21.453477" elapsed="0.016066">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:00:31.482621" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:00:31.482683" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:00:31.482799" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:00:31.475476" elapsed="0.007734">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:00:31.483406" elapsed="0.000024"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T02:00:31.483588" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T02:00:31.483863" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:00:31.483692" elapsed="0.000229"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:00:31.483670" elapsed="0.000279"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T02:00:31.484197" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:00:31.484006" elapsed="0.000248"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:00:31.483990" elapsed="0.000288"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:00:31.484414" elapsed="0.000021"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T02:00:31.470502" elapsed="0.014032">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:00:41.496814" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:00:41.496926" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:00:41.497172" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:00:41.490580" elapsed="0.007106">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:00:41.497982" elapsed="0.000034"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T02:00:41.498235" elapsed="0.000029"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T02:00:41.498589" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:00:41.498376" elapsed="0.000292"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:00:41.498347" elapsed="0.000357"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T02:00:41.499099" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:00:41.498779" elapsed="0.000403"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:00:41.498757" elapsed="0.000459"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:00:41.499404" elapsed="0.000030"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T02:00:41.485520" elapsed="0.014050">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:00:51.511357" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:00:51.511440" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:00:51.511607" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:00:51.506042" elapsed="0.006112">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:00:51.512426" elapsed="0.000062"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T02:00:51.512716" elapsed="0.000029"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T02:00:51.513094" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:00:51.512879" elapsed="0.000294"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:00:51.512827" elapsed="0.000382"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T02:00:51.513550" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:00:51.513285" elapsed="0.000345"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:00:51.513263" elapsed="0.000400"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:00:51.513871" elapsed="0.000031"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T02:00:51.500511" elapsed="0.013528">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:01:01.525808" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:01:01.525920" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:01:01.526153" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:01:01.520411" elapsed="0.006260">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:01:01.526964" elapsed="0.000033"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T02:01:01.527217" elapsed="0.000029"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T02:01:01.527568" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:01:01.527358" elapsed="0.000290"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:01:01.527329" elapsed="0.000355"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T02:01:01.528067" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:01:01.527759" elapsed="0.000397"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:01:01.527737" elapsed="0.000453"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:01:01.528378" elapsed="0.000029"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T02:01:01.514909" elapsed="0.013633">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:01:11.541469" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:01:11.541557" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:01:11.541722" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:01:11.534937" elapsed="0.007397">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:01:11.542658" elapsed="0.000038"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T02:01:11.542956" elapsed="0.000032"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T02:01:11.543333" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:01:11.543109" elapsed="0.000321"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:01:11.543078" elapsed="0.000392"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T02:01:11.543826" elapsed="0.000056"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:01:11.543548" elapsed="0.000383"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:01:11.543525" elapsed="0.000441"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:01:11.544164" elapsed="0.000030"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T02:01:11.529659" elapsed="0.014681">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:01:21.556517" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:01:21.556602" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:01:21.556890" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:01:21.550493" elapsed="0.006930">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:01:21.557702" elapsed="0.000032"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T02:01:21.557977" elapsed="0.000031"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T02:01:21.558333" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:01:21.558121" elapsed="0.000290"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:01:21.558091" elapsed="0.000357"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T02:01:21.558827" elapsed="0.000053"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:01:21.558522" elapsed="0.000406"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:01:21.558501" elapsed="0.000460"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:01:21.559151" elapsed="0.000029"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T02:01:21.545304" elapsed="0.014013">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:01:31.566469" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:01:31.566532" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:01:31.566647" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:01:31.562263" elapsed="0.004811">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:01:31.567272" elapsed="0.000024"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T02:01:31.567451" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T02:01:31.567723" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:01:31.567554" elapsed="0.000225"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:01:31.567531" elapsed="0.000274"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T02:01:31.568114" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:01:31.567918" elapsed="0.000254"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:01:31.567898" elapsed="0.000298"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:01:31.568332" elapsed="0.000020"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T02:01:31.559888" elapsed="0.008564">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:01:41.582136" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:01:41.582266" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:01:41.582636" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:01:41.574591" elapsed="0.008866">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:01:41.583909" elapsed="0.000053"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T02:01:41.584305" elapsed="0.000046"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T02:01:41.584880" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:01:41.584522" elapsed="0.000484"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:01:41.584479" elapsed="0.000582"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T02:01:41.585598" elapsed="0.000053"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:01:41.585179" elapsed="0.000545"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:01:41.585146" elapsed="0.000630"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:01:41.586102" elapsed="0.000047"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T02:01:41.569492" elapsed="0.016867">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:01:51.599469" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:01:51.599599" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:01:51.599883" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:01:51.592899" elapsed="0.007765">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:01:51.601118" elapsed="0.000052"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T02:01:51.601512" elapsed="0.000045"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T02:01:51.602121" elapsed="0.000046"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:01:51.601727" elapsed="0.000517"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:01:51.601684" elapsed="0.000615"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T02:01:51.602832" elapsed="0.000081"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:01:51.602417" elapsed="0.000569"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:01:51.602382" elapsed="0.000656"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:01:51.603336" elapsed="0.000045"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T02:01:51.587293" elapsed="0.016299">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:02:01.611881" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:02:01.611960" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:02:01.612162" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:02:01.606936" elapsed="0.005638">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:02:01.612777" elapsed="0.000025"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T02:02:01.613032" elapsed="0.000025"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T02:02:01.613304" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:02:01.613145" elapsed="0.000218"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:02:01.613122" elapsed="0.000268"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T02:02:01.613645" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:02:01.613446" elapsed="0.000259"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:02:01.613430" elapsed="0.000299"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:02:01.613884" elapsed="0.000022"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T02:02:01.604422" elapsed="0.009632">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:02:11.626701" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:02:11.626765" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:02:11.626906" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:02:11.620062" elapsed="0.007246">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:02:11.627506" elapsed="0.000023"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T02:02:11.627686" elapsed="0.000020"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T02:02:11.627960" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:02:11.627790" elapsed="0.000227"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:02:11.627767" elapsed="0.000276"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T02:02:11.628299" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:02:11.628096" elapsed="0.000266"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:02:11.628081" elapsed="0.000304"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:02:11.628519" elapsed="0.000021"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T02:02:11.614959" elapsed="0.013680">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:02:21.642050" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:02:21.642132" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:02:21.642366" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:02:21.635115" elapsed="0.007797">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:02:21.643180" elapsed="0.000033"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T02:02:21.643461" elapsed="0.000032"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T02:02:21.643813" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:02:21.643604" elapsed="0.000310"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:02:21.643575" elapsed="0.000376"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T02:02:21.644289" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:02:21.644026" elapsed="0.000344"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:02:21.644004" elapsed="0.000399"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:02:21.644590" elapsed="0.000029"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T02:02:21.629515" elapsed="0.015239">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:02:31.656665" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:02:31.656728" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:02:31.656870" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:02:31.650638" elapsed="0.006636">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:02:31.657471" elapsed="0.000024"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T02:02:31.657652" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T02:02:31.657928" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:02:31.657756" elapsed="0.000232"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:02:31.657734" elapsed="0.000280"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T02:02:31.658257" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:02:31.658068" elapsed="0.000246"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:02:31.658052" elapsed="0.000286"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:02:31.658472" elapsed="0.000021"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T02:02:31.645609" elapsed="0.012983">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:02:41.670891" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:02:41.670954" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:02:41.671143" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:02:41.664440" elapsed="0.007107">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:02:41.671747" elapsed="0.000023"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T02:02:41.671948" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T02:02:41.672209" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:02:41.672055" elapsed="0.000211"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:02:41.672032" elapsed="0.000260"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T02:02:41.672542" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:02:41.672345" elapsed="0.000255"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:02:41.672330" elapsed="0.000294"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:02:41.672759" elapsed="0.000020"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T02:02:41.659475" elapsed="0.013429">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:02:51.686774" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:02:51.686857" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:02:51.686991" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:02:51.679304" elapsed="0.008086">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:02:51.687584" elapsed="0.000023"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T02:02:51.687761" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T02:02:51.688037" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:02:51.687883" elapsed="0.000242"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:02:51.687859" elapsed="0.000293"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T02:02:51.688402" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:02:51.688211" elapsed="0.000249"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:02:51.688195" elapsed="0.000289"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:02:51.688617" elapsed="0.000020"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T02:02:51.673732" elapsed="0.015005">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:03:01.700948" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:03:01.701034" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:03:01.701272" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:03:01.694573" elapsed="0.007215">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:03:01.702082" elapsed="0.000034"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T02:03:01.702333" elapsed="0.000029"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T02:03:01.702735" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:03:01.702509" elapsed="0.000305"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:03:01.702446" elapsed="0.000427"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T02:03:01.703224" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:03:01.702950" elapsed="0.000354"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:03:01.702929" elapsed="0.000408"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:03:01.703522" elapsed="0.000029"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T02:03:01.689552" elapsed="0.014143">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:03:11.716132" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:03:11.716197" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:03:11.716320" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:03:11.709511" elapsed="0.007216">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:03:11.716943" elapsed="0.000024"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T02:03:11.717128" elapsed="0.000022"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T02:03:11.717393" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:03:11.717234" elapsed="0.000216"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:03:11.717211" elapsed="0.000266"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T02:03:11.717724" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:03:11.717531" elapsed="0.000252"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:03:11.717515" elapsed="0.000292"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:03:11.717963" elapsed="0.000022"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T02:03:11.704521" elapsed="0.013565">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:03:21.731360" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:03:21.731445" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:03:21.731688" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:03:21.724571" elapsed="0.007677">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:03:21.732515" elapsed="0.000032"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T02:03:21.732761" elapsed="0.000029"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T02:03:21.733136" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:03:21.732926" elapsed="0.000288"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:03:21.732896" elapsed="0.000354"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T02:03:21.733583" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:03:21.733323" elapsed="0.000341"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:03:21.733302" elapsed="0.000394"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:03:21.733904" elapsed="0.000061"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T02:03:21.718932" elapsed="0.015172">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:03:31.746975" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:03:31.747039" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:03:31.747160" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:03:31.740243" elapsed="0.007322">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:03:31.747761" elapsed="0.000023"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T02:03:31.747959" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T02:03:31.748221" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:03:31.748067" elapsed="0.000209"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:03:31.748042" elapsed="0.000262"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T02:03:31.748561" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:03:31.748356" elapsed="0.000263"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:03:31.748341" elapsed="0.000302"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:03:31.748776" elapsed="0.000021"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T02:03:31.735051" elapsed="0.013867">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:03:41.761602" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:03:41.761685" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:03:41.761964" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:03:41.754942" elapsed="0.007565">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:03:41.762782" elapsed="0.000033"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T02:03:41.763077" elapsed="0.000029"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T02:03:41.763427" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:03:41.763216" elapsed="0.000289"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:03:41.763187" elapsed="0.000354"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T02:03:41.763899" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:03:41.763615" elapsed="0.000365"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:03:41.763593" elapsed="0.000420"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:03:41.764202" elapsed="0.000036"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T02:03:41.749792" elapsed="0.014585">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:03:51.777611" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:03:51.777675" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:03:51.777799" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:03:51.771807" elapsed="0.006439">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:03:51.778443" elapsed="0.000023"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T02:03:51.778624" elapsed="0.000020"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T02:03:51.778906" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:03:51.778725" elapsed="0.000237"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:03:51.778703" elapsed="0.000285"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T02:03:51.779242" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:03:51.779044" elapsed="0.000255"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:03:51.779028" elapsed="0.000295"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:03:51.779456" elapsed="0.000020"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T02:03:51.765988" elapsed="0.013589">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:04:01.791059" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:04:01.791141" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:04:01.791375" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:04:01.785557" elapsed="0.006367">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:04:01.792200" elapsed="0.000033"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T02:04:01.792449" elapsed="0.000029"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T02:04:01.792801" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:04:01.792589" elapsed="0.000315"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:04:01.792559" elapsed="0.000382"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T02:04:01.793282" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:04:01.793018" elapsed="0.000345"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:04:01.792996" elapsed="0.000433"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:04:01.793621" elapsed="0.000029"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T02:04:01.780498" elapsed="0.013303">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:04:11.806045" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:04:11.806128" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:04:11.806282" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:04:11.799912" elapsed="0.006885">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:04:11.807096" elapsed="0.000032"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T02:04:11.807342" elapsed="0.000029"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T02:04:11.807729" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:04:11.807517" elapsed="0.000289"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:04:11.807487" elapsed="0.000375"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T02:04:11.808203" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:04:11.807941" elapsed="0.000348"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:04:11.807919" elapsed="0.000402"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:04:11.808508" elapsed="0.000028"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T02:04:11.794721" elapsed="0.013950">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:04:21.823558" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:04:21.823648" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:04:21.823928" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:04:21.816735" elapsed="0.007769">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:04:21.824804" elapsed="0.000056"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T02:04:21.825082" elapsed="0.000029"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T02:04:21.825466" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:04:21.825230" elapsed="0.000330"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:04:21.825196" elapsed="0.000411"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T02:04:21.825996" elapsed="0.000038"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:04:21.825687" elapsed="0.000395"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:04:21.825666" elapsed="0.000448"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:04:21.826301" elapsed="0.000035"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T02:04:21.809562" elapsed="0.016918">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:04:31.839542" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:04:31.839604" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:04:31.839721" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:04:31.833465" elapsed="0.006707">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:04:31.840374" elapsed="0.000030"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T02:04:31.840566" elapsed="0.000022"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T02:04:31.840829" elapsed="0.000038"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:04:31.840671" elapsed="0.000231"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:04:31.840649" elapsed="0.000279"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T02:04:31.841180" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:04:31.840982" elapsed="0.000257"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:04:31.840966" elapsed="0.000296"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:04:31.841397" elapsed="0.000021"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T02:04:31.828127" elapsed="0.013390">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:04:41.855207" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:04:41.855295" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:04:41.855554" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:04:41.847352" elapsed="0.008749">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:04:41.856373" elapsed="0.000032"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T02:04:41.856639" elapsed="0.000030"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T02:04:41.857015" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:04:41.856780" elapsed="0.000314"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:04:41.856751" elapsed="0.000379"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T02:04:41.857471" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:04:41.857206" elapsed="0.000347"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:04:41.857184" elapsed="0.000401"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:04:41.857775" elapsed="0.000030"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T02:04:41.842413" elapsed="0.015547">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:04:51.917242" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:04:51.917311" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:04:51.917449" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:04:51.910461" elapsed="0.007413">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:04:51.918096" elapsed="0.000027"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T02:04:51.918285" elapsed="0.000022"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T02:04:51.918561" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:04:51.918400" elapsed="0.000218"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:04:51.918376" elapsed="0.000268"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T02:04:51.919659" elapsed="0.000038"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:04:51.918700" elapsed="0.001043"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:04:51.918684" elapsed="0.001094"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:04:51.919963" elapsed="0.000025"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T02:04:51.858819" elapsed="0.061277">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:05:01.931364" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:05:01.931451" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:05:01.931701" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:05:01.925729" elapsed="0.006526">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:05:01.932580" elapsed="0.000036"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T02:05:01.932857" elapsed="0.000031"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T02:05:01.933219" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:05:01.933005" elapsed="0.000293"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:05:01.932973" elapsed="0.000361"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T02:05:01.933683" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:05:01.933408" elapsed="0.000356"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:05:01.933388" elapsed="0.000409"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:05:01.934024" elapsed="0.000031"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T02:05:01.921247" elapsed="0.012951">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:05:11.946343" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:05:11.946427" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:05:11.946593" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:05:11.940463" elapsed="0.006684">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:05:11.947422" elapsed="0.000032"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T02:05:11.947672" elapsed="0.000029"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T02:05:11.948049" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:05:11.947813" elapsed="0.000332"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:05:11.947784" elapsed="0.000396"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T02:05:11.948520" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:05:11.948256" elapsed="0.000345"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:05:11.948233" elapsed="0.000401"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:05:11.948868" elapsed="0.000033"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T02:05:11.935106" elapsed="0.013937">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:05:21.961956" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:05:21.962043" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:05:21.962263" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:05:21.955061" elapsed="0.007719">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:05:21.963074" elapsed="0.000032"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T02:05:21.963324" elapsed="0.000029"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T02:05:21.963676" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:05:21.963464" elapsed="0.000292"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:05:21.963435" elapsed="0.000356"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T02:05:21.964154" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:05:21.963887" elapsed="0.000349"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:05:21.963863" elapsed="0.000406"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:05:21.964458" elapsed="0.000031"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T02:05:21.950033" elapsed="0.014592">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:05:31.977582" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:05:31.977670" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:05:31.977897" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:05:31.971225" elapsed="0.007226">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:05:31.978727" elapsed="0.000033"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T02:05:31.979007" elapsed="0.000031"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T02:05:31.979365" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:05:31.979153" elapsed="0.000291"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:05:31.979124" elapsed="0.000355"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T02:05:31.979830" elapsed="0.000055"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:05:31.979554" elapsed="0.000379"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:05:31.979532" elapsed="0.000435"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:05:31.980154" elapsed="0.000030"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T02:05:31.966271" elapsed="0.014049">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:05:41.993207" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:05:41.993269" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:05:41.993480" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:05:41.987194" elapsed="0.006725">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:05:41.994125" elapsed="0.000023"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T02:05:41.994303" elapsed="0.000022"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T02:05:41.994592" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:05:41.994410" elapsed="0.000252"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:05:41.994386" elapsed="0.000304"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T02:05:41.994958" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:05:41.994744" elapsed="0.000275"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:05:41.994729" elapsed="0.000314"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:05:41.995176" elapsed="0.000022"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T02:05:41.981413" elapsed="0.013887">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:05:52.006552" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:05:52.006635" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:05:52.006794" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:05:52.000751" elapsed="0.006628">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:05:52.007652" elapsed="0.000032"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T02:05:52.007925" elapsed="0.000029"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T02:05:52.008287" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:05:52.008070" elapsed="0.000294"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:05:52.008039" elapsed="0.000361"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T02:05:52.008735" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:05:52.008475" elapsed="0.000341"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:05:52.008453" elapsed="0.000415"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:05:52.009057" elapsed="0.000028"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T02:05:51.996374" elapsed="0.012852">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:06:02.021221" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:06:02.021302" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:06:02.021556" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:06:02.015375" elapsed="0.006749">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:06:02.022392" elapsed="0.000033"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T02:06:02.022641" elapsed="0.000029"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T02:06:02.023014" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:06:02.022781" elapsed="0.000314"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:06:02.022752" elapsed="0.000394"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T02:06:02.023496" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:06:02.023222" elapsed="0.000359"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:06:02.023200" elapsed="0.000414"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:06:02.023802" elapsed="0.000055"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T02:06:02.010268" elapsed="0.013730">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:06:12.036910" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:06:12.036995" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:06:12.037167" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:06:12.030806" elapsed="0.006896">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:06:12.037997" elapsed="0.000034"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T02:06:12.038248" elapsed="0.000029"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T02:06:12.038600" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:06:12.038389" elapsed="0.000289"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:06:12.038359" elapsed="0.000354"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T02:06:12.039076" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:06:12.038788" elapsed="0.000369"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:06:12.038765" elapsed="0.000425"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:06:12.039377" elapsed="0.000029"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T02:06:12.025134" elapsed="0.014409">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:06:22.051714" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:06:22.051799" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:06:22.052080" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:06:22.045506" elapsed="0.007142">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:06:22.052948" elapsed="0.000033"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T02:06:22.053198" elapsed="0.000029"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T02:06:22.053549" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:06:22.053339" elapsed="0.000288"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:06:22.053309" elapsed="0.000354"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T02:06:22.054045" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:06:22.053737" elapsed="0.000391"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:06:22.053716" elapsed="0.000445"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:06:22.054353" elapsed="0.000030"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T02:06:22.040475" elapsed="0.014046">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:06:32.062819" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:06:32.062901" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:06:32.063036" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:06:32.057571" elapsed="0.005880">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:06:32.063654" elapsed="0.000024"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T02:06:32.063860" elapsed="0.000023"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T02:06:32.064127" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:06:32.063971" elapsed="0.000210"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:06:32.063947" elapsed="0.000261"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T02:06:32.064466" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:06:32.064262" elapsed="0.000262"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:06:32.064247" elapsed="0.000301"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:06:32.064682" elapsed="0.000020"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T02:06:32.055160" elapsed="0.009644">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:06:42.076710" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:06:42.076795" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:06:42.077131" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:06:42.071488" elapsed="0.006213">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:06:42.077997" elapsed="0.000033"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T02:06:42.078246" elapsed="0.000029"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T02:06:42.078599" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:06:42.078388" elapsed="0.000289"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:06:42.078357" elapsed="0.000359"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T02:06:42.079084" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:06:42.078791" elapsed="0.000374"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:06:42.078770" elapsed="0.000428"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:06:42.079382" elapsed="0.000029"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T02:06:42.066506" elapsed="0.013043">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:06:52.091866" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:06:52.091936" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:06:52.092060" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:06:52.085693" elapsed="0.006792">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:06:52.092689" elapsed="0.000024"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T02:06:52.092885" elapsed="0.000022"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T02:06:52.093144" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:06:52.092990" elapsed="0.000209"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:06:52.092968" elapsed="0.000257"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T02:06:52.093479" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:06:52.093278" elapsed="0.000259"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:06:52.093262" elapsed="0.000299"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:06:52.093695" elapsed="0.000021"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T02:06:52.080578" elapsed="0.013240">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:07:02.103164" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:07:02.103257" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:07:02.103570" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:07:02.098022" elapsed="0.006123">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:02.104443" elapsed="0.000040"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:02.104713" elapsed="0.000029"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:02.105094" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:02.104880" elapsed="0.000294"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:07:02.104826" elapsed="0.000386"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:02.105558" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:02.105287" elapsed="0.000351"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:07:02.105266" elapsed="0.000405"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:02.105876" elapsed="0.000032"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T02:07:02.094636" elapsed="0.011446">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:07:12.119193" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:07:12.119255" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:07:12.119379" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:07:12.112932" elapsed="0.006875">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:12.120026" elapsed="0.000023"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:12.120205" elapsed="0.000021"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:12.120461" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:12.120308" elapsed="0.000209"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:07:12.120285" elapsed="0.000257"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:12.120793" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:12.120596" elapsed="0.000273"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:07:12.120580" elapsed="0.000313"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:12.121029" elapsed="0.000020"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T02:07:12.107205" elapsed="0.013946">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:07:22.135902" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:07:22.135986" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '433'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:07:22.136230" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<var>${response}</var>
<arg>ses</arg>
<arg>url=${RESTCONF_ROOT}/data/network-topology:network-topology/topology=topology-netconf${netconf_connector}</arg>
<arg>params=${pretty_print}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:07:22.127492" elapsed="0.009259">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${response.text}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:22.137048" elapsed="0.000033"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${status}</var>
<arg>BuiltIn.Should_Contain</arg>
<arg>${response.text}</arg>
<arg>data model content does not exist</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:22.137295" elapsed="0.000030"/>
</kw>
<if>
<branch type="IF" condition="${status}">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_not_ready_cause}</arg>
<arg>5832</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:22.137647" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:22.137436" elapsed="0.000290"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:07:22.137407" elapsed="0.000354"/>
</if>
<if>
<branch type="IF" condition="${status}">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<arg>5832</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:22.138155" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:22.137854" elapsed="0.000382"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:07:22.137814" elapsed="0.000456"/>
</if>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${response.status_code}</arg>
<arg>200</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:22.138457" elapsed="0.000030"/>
</kw>
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="FAIL" start="2026-08-23T02:07:22.122330" elapsed="0.016293">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<msg time="2026-08-23T02:07:22.138742" level="FAIL">Keyword 'Check_Netconf_Up_And_Running' failed after retrying for 20 minutes. The last error was: HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<arg>${NETCONFREADY_FALLBACK_WAIT}</arg>
<arg>10s</arg>
<arg>Check_Netconf_Up_And_Running</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-08-23T01:47:20.312683" elapsed="1201.826217">Keyword 'Check_Netconf_Up_And_Running' failed after retrying for 20 minutes. The last error was: HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_is_ready}</arg>
<arg>True</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:22.139144" elapsed="0.000030"/>
</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-08-23T02:07:22.140977" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:22.140416" elapsed="0.000648"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:22.140393" elapsed="0.000705"/>
</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-08-23T02:07:22.141294" elapsed="0.000509"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:07:22.149136" 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-08-23T02:07:22.148523" elapsed="0.000652"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="NOT RUN" start="2026-08-23T02:07:22.149482" elapsed="0.000024"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:22.149280" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:22.149254" elapsed="0.000322"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:07:22.150248" level="INFO">${newline} = 
</msg>
<var>${newline}</var>
<arg>chr(10)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-23T02:07:22.149777" elapsed="0.000509"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:07:22.150903" level="INFO">${reference} = netconf_gate_userfeatures_txt_Ready_Netconfready_Wait_Even_Longer</msg>
<var>${reference}</var>
<arg>${SUITE_NAME}_${TEST_NAME}</arg>
<arg>[ /\.-]</arg>
<arg>_</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-23T02:07:22.150503" elapsed="0.000427"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<msg time="2026-08-23T02:07:22.151261" level="INFO">${reference} = netconf_gate_userfeatures_txt_ready_netconfready_wait_even_longer</msg>
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="PASS" start="2026-08-23T02:07:22.151086" elapsed="0.000201"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:07:22.151780" level="INFO">${msg} = ... click for list of related bugs or create a new one if needed (with the
"netconf_gate_userfeatures_txt_ready_netconfready_wait_even_longer"
reference somewhere inside)</msg>
<var>${msg}</var>
<arg>... click for list of related bugs or create a new one if needed (with the${newline}"${reference}"${newline}reference somewhere inside)</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:07:22.151437" elapsed="0.000370"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:07:22.152292" level="INFO">${bugs} = "https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=netconf_gate_userfeatures_txt_ready_netconfready_wait_even_longer&amp;order=bug_status"</msg>
<var>${bugs}</var>
<arg>"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=${reference}&amp;order=bug_status"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:07:22.151971" elapsed="0.000349"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<msg time="2026-08-23T02:07:22.152962" level="INFO">Set test message to:
... click for list of related bugs or create a new one if needed (with the
"netconf_gate_userfeatures_txt_ready_netconfready_wait_even_longer"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=netconf_gate_userfeatures_txt_ready_netconfready_wait_even_longer&amp;order=bug_status"

Keyword 'Check_Netconf_Up_And_Running' failed after retrying for 20 minutes. The last error was: HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</msg>
<arg>${msg}${newline}${bugs}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="PASS" start="2026-08-23T02:07:22.152505" elapsed="0.000509"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:22.153477" level="INFO">... click for list of related bugs or create a new one if needed (with the
"netconf_gate_userfeatures_txt_ready_netconfready_wait_even_longer"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=netconf_gate_userfeatures_txt_ready_netconfready_wait_even_longer&amp;order=bug_status"</msg>
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:07:22.153180" elapsed="0.000344"/>
</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-08-23T02:07:22.148095" elapsed="0.005484"/>
</kw>
<status status="PASS" start="2026-08-23T02:07:22.140127" elapsed="0.013501"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-08-23T02:07:22.139586" elapsed="0.014084"/>
</kw>
<doc>Bugs such as 7175 may require to wait longer till netconf-connector works.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-08-23T01:47:20.193461" elapsed="1201.960251">... click for list of related bugs or create a new one if needed (with the
"netconf_gate_userfeatures_txt_ready_netconfready_wait_even_longer"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=netconf_gate_userfeatures_txt_ready_netconfready_wait_even_longer&amp;order=bug_status"

Keyword 'Check_Netconf_Up_And_Running' failed after retrying for 20 minutes. The last error was: HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf</status>
</test>
<test id="s1-s1-s1-t4" name="Check_For_Bug_5014" line="114">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-08-23T02:07:22.157883" elapsed="0.000221"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:07:22.157589" elapsed="0.000570"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:22.159143" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:22.159029" elapsed="0.000161"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:22.159009" elapsed="0.000204"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:22.164177" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:22.164071" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:22.164053" elapsed="0.000192"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:22.165236" 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-08-23T02:07:22.164850" elapsed="0.000412"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:07:22.165712" 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-08-23T02:07:22.165418" elapsed="0.000320"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:07:22.165783" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T02:07:22.165978" 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-08-23T02:07:22.164467" elapsed="0.001535"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:22.171585" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:22.171476" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:22.171456" 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-08-23T02:07:22.172912" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:22.172778" elapsed="0.000181"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:22.172759" elapsed="0.000221"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:07:22.173491" level="INFO">${karaf_connection_index} = 7</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-08-23T02:07:22.173126" elapsed="0.000391"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:22.173986" level="INFO">${current_connection_index} = 11</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-08-23T02:07:22.173675" elapsed="0.000338"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:22.221164" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:22.174556" elapsed="0.046769"/>
</kw>
<msg time="2026-08-23T02:07:22.221497" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:07:22.221561" 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 "n "e "t "c "o "n "f "...</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-08-23T02:07:22.174170" elapsed="0.047431"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:07:22.268134" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "R "e "a "d "y ". "N "e "t "c "o "n "f "r "e "a "d "y ". "C "h "e "c "k "_ "F "o "r "_ "B "u "g "_ "5 "0 "1 "4 "[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-08-23T02:07:22.222242" elapsed="0.046109"/>
</kw>
<msg time="2026-08-23T02:07:22.268545" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:07:22.268593" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "R "e "a "d "y ". "N "e "t "c "o "n "f "r "e "a "d "y ". "C "h "e "c "k "_ "F "o "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-08-23T02:07:22.221770" elapsed="0.046861"/>
</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-08-23T02:07:22.269018" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:22.268725" elapsed="0.000373"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:22.268697" elapsed="0.000430"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:22.269696" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "R "e "a "d "y ". "N "e "t "c "o "n "f "r "e "a "d "y ". "C "h "e "c "k "_ "F "o "r "_ "B "u "g "_ "5 "0 "1 "4 "[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-08-23T02:07:22.269270" elapsed="0.000497"/>
</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-08-23T02:07:22.270102" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:22.269881" elapsed="0.000299"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:22.269861" elapsed="0.000345"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:07:22.270241" elapsed="0.000038"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-23T02:07:22.273535" elapsed="0.000154"/>
</kw>
<msg time="2026-08-23T02:07:22.273763" 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-08-23T02:07:22.272765" elapsed="0.001153"/>
</kw>
<kw name="Open 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-08-23T02:07:22.274869" elapsed="0.000041"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:22.275827" elapsed="0.000204"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:07:22.271194" elapsed="0.004920"/>
</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-08-23T02:07:22.270557" elapsed="0.005674"/>
</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-08-23T02:07:22.172477" elapsed="0.103857"/>
</kw>
<msg time="2026-08-23T02:07:22.276434" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:22.276483" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "R "e "a "d "y ". "N "e "t "c "o "n "f "r "e "a "d "y ". "C "h "e "c "k "_ "F "o "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-08-23T02:07:22.171805" elapsed="0.104717"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:07:22.276712" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:07:22.276601" elapsed="0.000170"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:22.276582" 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-08-23T02:07:22.277220" 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-08-23T02:07:22.277565" elapsed="0.000026"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:07:22.277637" 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-08-23T02:07:22.171139" elapsed="0.106611"/>
</kw>
<msg time="2026-08-23T02:07:22.277949" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:22.277998" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "R "e "a "d "y ". "N "e "t "c "o "n "f "r "e "a "d "y ". "C "h "e "c "k "_ "F "o "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-08-23T02:07:22.166381" elapsed="0.111702"/>
</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-08-23T02:07:22.278419" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:22.278164" elapsed="0.000316"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:22.278146" elapsed="0.000360"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:07:22.166242" elapsed="0.112289"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:07:22.166063" elapsed="0.112503"/>
</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-08-23T02:07:22.163700" elapsed="0.114924"/>
</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-08-23T02:07:22.158721" elapsed="0.119959"/>
</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-08-23T02:07:22.158305" elapsed="0.120422"/>
</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-08-23T02:07:22.155431" elapsed="0.123348"/>
</kw>
<kw name="Pass Execution If" owner="BuiltIn">
<arg>${netconf_is_ready}</arg>
<arg>Netconf was detected to be up and running so bug 5014 did not show up.</arg>
<doc>Conditionally skips rest of the current test, setup, or teardown with PASS status.</doc>
<status status="PASS" start="2026-08-23T02:07:22.278968" elapsed="0.000297"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_Netconf_Usable">
<kw name="Configure_Device_In_Netconf" owner="NetconfKeywords">
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T02:07:22.301370" elapsed="0.000448"/>
</kw>
<msg time="2026-08-23T02:07:22.301891" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:07:22.301008" elapsed="0.000936"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return scandium if vanadium is at least ${lower_bound},
return calcium otherwise.</doc>
<status status="PASS" start="2026-08-23T02:07:22.300589" elapsed="0.001432"/>
</kw>
<msg time="2026-08-23T02:07:22.302062" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:07:22.291817" elapsed="0.010289"/>
</kw>
<msg time="2026-08-23T02:07:22.302210" level="INFO">${version} = scandium</msg>
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-08-23T02:07:22.291475" elapsed="0.010760"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:07:22.303148" level="INFO">${mapping} = {'DEVICE_IP': '10.30.170.120', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '17830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'topsecret', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schem...</msg>
<var>${mapping}</var>
<arg>DEVICE_IP=${device_address}</arg>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>DEVICE_PORT=${device_port}</arg>
<arg>DEVICE_USER=${device_user}</arg>
<arg>DEVICE_PASSWORD=${device_password}</arg>
<arg>DEVICE_KEY=${device_key}</arg>
<arg>SCHEMA_DIRECTORY=${schema_directory}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-23T02:07:22.302398" elapsed="0.000780"/>
</kw>
<if>
<branch type="IF" condition="'${http_method}'=='post'">
<kw name="Post_As_Xml_Templated" owner="TemplatedRequests">
<arg>folder=${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</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="NOT RUN" start="2026-08-23T02:07:22.303579" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:22.303266" elapsed="0.000381"/>
</branch>
<branch type="ELSE">
<kw name="Put_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Put_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-08-23T02:07:22.339213" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/configure-via-topology.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:07:22.337420" elapsed="0.001828"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T02:07:22.340785" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/configure-via-topology.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-23T02:07:22.339794" elapsed="0.001154">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/configure-via-topology.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-23T02:07:22.341177" 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-08-23T02:07:22.339437" elapsed="0.001766"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:22.341985" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/configure-via-topology/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-08-23T02:07:22.341371" elapsed="0.000645"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:22.342374" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/configure-via-topology/location.uri"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/configure-via-topology/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:22.342551" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:22.342182" elapsed="0.000396"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:22.343063" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:07:22.342737" elapsed="0.000375"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:22.344758" level="INFO">mapping: {'DEVICE_IP': '10.30.170.120', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '17830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'topsecret', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:07:22.344108" elapsed="0.000816"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:07:22.346036" 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-08-23T02:07:22.345244" elapsed="0.000874"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:07:22.347634" level="INFO">${value} = 10.30.170.120</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:07:22.347101" elapsed="0.000583"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:07:22.349121" level="INFO">${encoded} = 10.30.170.120</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-08-23T02:07:22.348745" elapsed="0.000403"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:07:22.349203" elapsed="0.000037"/>
</return>
<msg time="2026-08-23T02:07:22.349510" level="INFO">${encoded_value} = 10.30.170.120</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-08-23T02:07:22.348223" elapsed="0.001334"/>
</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-08-23T02:07:22.349968" elapsed="0.000419"/>
</kw>
<var name="${key}">DEVICE_IP</var>
<var name="${value}">10.30.170.120</var>
<status status="PASS" start="2026-08-23T02:07:22.346739" elapsed="0.003723"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:07:22.351720" level="INFO">${value} = test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:07:22.351192" elapsed="0.000575"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:07:22.353008" level="INFO">${encoded} = test-device</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-08-23T02:07:22.352759" elapsed="0.000276"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:07:22.353085" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T02:07:22.353380" level="INFO">${encoded_value} = test-device</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-08-23T02:07:22.352250" elapsed="0.001175"/>
</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-08-23T02:07:22.353794" elapsed="0.000477"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">test-device</var>
<status status="PASS" start="2026-08-23T02:07:22.350820" elapsed="0.003527"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:07:22.355643" level="INFO">${value} = 17830</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:07:22.355128" elapsed="0.000560"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:07:22.356965" level="INFO">${encoded} = 17830</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-08-23T02:07:22.356668" elapsed="0.000329"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:07:22.357050" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T02:07:22.357508" level="INFO">${encoded_value} = 17830</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-08-23T02:07:22.356166" elapsed="0.001388"/>
</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-08-23T02:07:22.357980" elapsed="0.000391"/>
</kw>
<var name="${key}">DEVICE_PORT</var>
<var name="${value}">17830</var>
<status status="PASS" start="2026-08-23T02:07:22.354687" elapsed="0.003760"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:07:22.359739" level="INFO">${value} = admin</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:07:22.359226" elapsed="0.000562"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:07:22.361072" level="INFO">${encoded} = admin</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-08-23T02:07:22.360752" elapsed="0.000346"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:07:22.361788" elapsed="0.000037"/>
</return>
<msg time="2026-08-23T02:07:22.362122" level="INFO">${encoded_value} = admin</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-08-23T02:07:22.360258" elapsed="0.001910"/>
</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-08-23T02:07:22.362497" elapsed="0.000479"/>
</kw>
<var name="${key}">DEVICE_USER</var>
<var name="${value}">admin</var>
<status status="PASS" start="2026-08-23T02:07:22.358781" elapsed="0.004272"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:07:22.364237" level="INFO">${value} = topsecret</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:07:22.363696" elapsed="0.000586"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:07:22.365522" level="INFO">${encoded} = topsecret</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-08-23T02:07:22.365301" elapsed="0.000248"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:07:22.365599" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:07:22.365948" level="INFO">${encoded_value} = topsecret</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-08-23T02:07:22.364727" elapsed="0.001270"/>
</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-08-23T02:07:22.366325" elapsed="0.000382"/>
</kw>
<var name="${key}">DEVICE_PASSWORD</var>
<var name="${value}">topsecret</var>
<status status="PASS" start="2026-08-23T02:07:22.363379" elapsed="0.003403"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:07:22.368102" level="INFO">${value} = device-key</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:07:22.367563" elapsed="0.000586"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:07:22.369398" level="INFO">${encoded} = device-key</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-08-23T02:07:22.369179" elapsed="0.000245"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:07:22.369474" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:22.369781" level="INFO">${encoded_value} = device-key</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-08-23T02:07:22.368597" elapsed="0.001233"/>
</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-08-23T02:07:22.370187" elapsed="0.000384"/>
</kw>
<var name="${key}">DEVICE_KEY</var>
<var name="${value}">device-key</var>
<status status="PASS" start="2026-08-23T02:07:22.367247" elapsed="0.003400"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:07:22.371934" level="INFO">${value} = /tmp/schema</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:07:22.371404" elapsed="0.000577"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:07:22.373312" level="INFO">${encoded} = /tmp/schema</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-08-23T02:07:22.373084" elapsed="0.000255"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:07:22.373391" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T02:07:22.373689" level="INFO">${encoded_value} = /tmp/schema</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-08-23T02:07:22.372492" elapsed="0.001243"/>
</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-08-23T02:07:22.374110" elapsed="0.000387"/>
</kw>
<var name="${key}">SCHEMA_DIRECTORY</var>
<var name="${value}">/tmp/schema</var>
<status status="PASS" start="2026-08-23T02:07:22.371086" elapsed="0.003487"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:07:22.375859" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:07:22.375326" elapsed="0.000583"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:07:22.377195" level="INFO">${encoded} = /rests</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-08-23T02:07:22.376961" elapsed="0.000262"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:07:22.377274" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:07:22.377568" level="INFO">${encoded_value} = /rests</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-08-23T02:07:22.376383" elapsed="0.001231"/>
</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-08-23T02:07:22.377999" elapsed="0.000402"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-23T02:07:22.374997" elapsed="0.003484"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-23T02:07:22.346258" elapsed="0.032304"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-23T02:07:22.378738" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T02:07:22.379117" level="INFO">${mapping_to_use} = {'DEVICE_IP': '10.30.170.120', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '17830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'topsecret', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schem...</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-23T02:07:22.343615" elapsed="0.035537"/>
</kw>
<status status="PASS" start="2026-08-23T02:07:22.343194" elapsed="0.035992"/>
</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-08-23T02:07:22.379401" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:22.379247" elapsed="0.000211"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:22.343169" elapsed="0.036310"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:07:22.380634" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</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-08-23T02:07:22.379620" elapsed="0.001043"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T02:07:22.380714" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/configure-via-topology.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/configure-via-topology.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/configure-via-topology/${file_name}.</doc>
<status status="PASS" start="2026-08-23T02:07:22.336765" elapsed="0.044152"/>
</kw>
<msg time="2026-08-23T02:07:22.380978" 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-08-23T02:07:22.322195" elapsed="0.058838"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/configure-via-topology.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/configure-via-topology.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/configure-via-topology/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:22.393620" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/configure-via-topology.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/configure-via-topology.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/configure-via-topology/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:22.406117" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/configure-via-topology.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/configure-via-topology.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/configure-via-topology/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:22.418614" 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-08-23T02:07:22.418820" 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-08-23T02:07:22.419015" 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-08-23T02:07:22.419383" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:22.419243" elapsed="0.000196"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:07:22.419227" 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-08-23T02:07:22.419599" 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-08-23T02:07:22.419773" 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-08-23T02:07:22.419957" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T02:07:22.419198" elapsed="0.000813"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T02:07:22.419095" 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-08-23T02:07:22.420179" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T02:07:22.420261" elapsed="0.000015"/>
</return>
<msg time="2026-08-23T02:07:22.420385" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</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-08-23T02:07:22.317590" elapsed="0.102821"/>
</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-08-23T02:07:22.447353" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/configure-via-topology.vanadium/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-08-23T02:07:22.446791" elapsed="0.000591"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T02:07:22.448226" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/configure-via-topology.vanadium/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-08-23T02:07:22.447904" elapsed="0.000450">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/configure-via-topology.vanadium/data.xml' does not exist.</status>
</kw>
<msg time="2026-08-23T02:07:22.448576" 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-08-23T02:07:22.447544" elapsed="0.001058"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:22.449360" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/configure-via-topology/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-08-23T02:07:22.448765" elapsed="0.000636"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:22.449813" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/configure-via-topology/data.xml"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/configure-via-topology/data.xml&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:22.450016" level="INFO">${template} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;$DEVICE_NAME&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;$DEVICE_IP&lt;/host&gt;
    &lt;port&gt;$DEVI...</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:22.449595" elapsed="0.000451"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:22.450517" level="INFO">&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;$DEVICE_NAME&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;$DEVICE_IP&lt;/host&gt;
    &lt;port&gt;$DEVICE_PORT&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;$DEVICE_USER&lt;/username&gt;
      &lt;password&gt;$DEVICE_PASSWORD&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt;
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:07:22.450207" elapsed="0.000366"/>
</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-08-23T02:07:22.451042" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:22.450645" elapsed="0.000461"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:07:22.451697" level="INFO">${mapping_to_use} = {'DEVICE_IP': '10.30.170.120', 'DEVICE_NAME': 'test-device', 'DEVICE_PORT': '17830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'topsecret', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schem...</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-08-23T02:07:22.451278" elapsed="0.000447"/>
</kw>
<status status="PASS" start="2026-08-23T02:07:22.451133" elapsed="0.000628"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:22.450624" elapsed="0.001159"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:07:22.452784" level="INFO">${final_text} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.120&lt;/host&gt;
    &lt;port&gt;178...</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-08-23T02:07:22.451952" elapsed="0.000864"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T02:07:22.452914" elapsed="0.000034"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/configure-via-topology.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/configure-via-topology.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/configure-via-topology/${file_name}.</doc>
<status status="PASS" start="2026-08-23T02:07:22.446175" elapsed="0.006872"/>
</kw>
<msg time="2026-08-23T02:07:22.453104" 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-08-23T02:07:22.433372" elapsed="0.019782"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/configure-via-topology.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/configure-via-topology.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/configure-via-topology/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:22.466931" elapsed="0.000065"/>
</kw>
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<var>${epilog}</var>
<arg>folder=${folder}</arg>
<arg>file_name=${name_prefix}${base_name}.epilog.${extension}</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=${percent_encode}</arg>
<doc>Check if /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/configure-via-topology.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/configure-via-topology.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/configure-via-topology/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:22.479570" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/configure-via-topology.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/configure-via-topology.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/configure-via-topology/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:22.492012" 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-08-23T02:07:22.492213" 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-08-23T02:07:22.492388" 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-08-23T02:07:22.492757" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:22.492616" elapsed="0.000197"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:07:22.492601" 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-08-23T02:07:22.492992" 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-08-23T02:07:22.493171" 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-08-23T02:07:22.493339" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T02:07:22.492571" elapsed="0.000821"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T02:07:22.492468" 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-08-23T02:07:22.493562" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T02:07:22.493636" elapsed="0.000016"/>
</return>
<msg time="2026-08-23T02:07:22.493789" level="INFO">${data} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.120&lt;/host&gt;
    &lt;port&gt;178...</msg>
<var>${data}</var>
<arg>folder=${folder}</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-08-23T02:07:22.430634" elapsed="0.063185"/>
</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-08-23T02:07:22.495144" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/configure-via-topology/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-08-23T02:07:22.494873" elapsed="0.000357">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/configure-via-topology/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-23T02:07:22.495326" 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-08-23T02:07:22.494519" elapsed="0.000831"/>
</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-08-23T02:07:22.495665" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:22.495420" elapsed="0.000333"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:07:22.496288" 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-08-23T02:07:22.495975" elapsed="0.000340"/>
</kw>
<status status="PASS" start="2026-08-23T02:07:22.495780" elapsed="0.000571"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:22.495401" elapsed="0.000972"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:22.498741" 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-08-23T02:07:22.496523" elapsed="0.002245"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-23T02:07:22.498820" elapsed="0.000044"/>
</return>
<msg time="2026-08-23T02:07:22.498992" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/configure-via-topology/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-23T02:07:22.494175" elapsed="0.004843"/>
</kw>
<kw name="Put_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:22.500422" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:07:22.500159" elapsed="0.000311"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:22.500884" level="INFO">&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.120&lt;/host&gt;
    &lt;port&gt;17830&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;admin&lt;/username&gt;
      &lt;password&gt;topsecret&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt;</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:07:22.500621" elapsed="0.000315"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:22.501348" 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-08-23T02:07:22.501093" elapsed="0.000299"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:22.501812" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:07:22.501542" elapsed="0.000332"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-08-23T02:07:22.502695" 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-08-23T02:07:22.502494" elapsed="0.000227"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-08-23T02:07:22.503062" 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-08-23T02:07:22.502887" 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-08-23T02:07:22.503236" elapsed="0.000221"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:22.503874" 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-08-23T02:07:22.503611" elapsed="0.000308"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-08-23T02:07:22.503961" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T02:07:22.504117" 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-08-23T02:07:22.502079" elapsed="0.002064"/>
</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-08-23T02:07:22.513825" level="INFO">PUT Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Content-Length': '444', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.120&lt;/host&gt;
    &lt;port&gt;17830&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;admin&lt;/username&gt;
      &lt;password&gt;topsecret&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt; 
 </msg>
<msg time="2026-08-23T02:07:22.513906" level="INFO">PUT Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device 
 status=404, reason=Not Found 
 headers={'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:07:22.514014" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</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-08-23T02:07:22.506513" elapsed="0.008050">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</kw>
<status status="FAIL" start="2026-08-23T02:07:22.504212" elapsed="0.010473">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</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-08-23T02:07:22.514971" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:22.514733" elapsed="0.000335"/>
</branch>
<status status="FAIL" start="2026-08-23T02:07:22.504193" elapsed="0.010972">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</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-08-23T02:07:22.515696" elapsed="0.000037"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:07:22.515907" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:22.515829" elapsed="0.000137"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:07:22.515804" elapsed="0.000192"/>
</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-08-23T02:07:22.516195" elapsed="0.000031"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:07:22.516289" elapsed="0.000021"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>content_type=${content_type}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</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-08-23T02:07:22.499357" elapsed="0.017084">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:07:22.516561" elapsed="0.000023"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>extension=xml</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>content_type=${HEADERS_XML}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>endline=${\n}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve URI and data from folder, call Put_To_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-23T02:07:22.306577" elapsed="0.210122">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=response</arg>
<arg>mapping=${mapping}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:22.517119" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:22.516873" elapsed="0.000341"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:07:22.516827" elapsed="0.000420"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:07:22.517293" elapsed="0.000020"/>
</return>
<arg>folder=${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Add arguments sensible for XML data, return Put_Templated response text.
Optionally, verification against response.xml (no iteration) is called.</doc>
<status status="FAIL" start="2026-08-23T02:07:22.303929" elapsed="0.213499">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</kw>
<status status="FAIL" start="2026-08-23T02:07:22.303672" elapsed="0.213860">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</branch>
<status status="FAIL" start="2026-08-23T02:07:22.303247" elapsed="0.214330">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</if>
<kw name="Set To Dictionary" owner="Collections">
<arg>${NetconfKeywords__mounted_device_types}</arg>
<arg>${device_name}</arg>
<arg>${device_type}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:22.517809" elapsed="0.000052"/>
</kw>
<arg>test-device</arg>
<arg>device_type=configure-via-topology</arg>
<doc>Tell Netconf about the specified device so it can add it into its configuration.</doc>
<status status="FAIL" start="2026-08-23T02:07:22.280162" elapsed="0.237832">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</kw>
<kw name="Remove_Device_From_Netconf" owner="NetconfKeywords">
<arg>test-device</arg>
<doc>Tell Netconf to deconfigure the specified device</doc>
<status status="NOT RUN" start="2026-08-23T02:07:22.518304" elapsed="0.000034"/>
</kw>
<kw name="Check_Netconf_Up_And_Running">
<doc>Make a request to netconf connector's list of mounted devices and check that the request was successful.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:22.518637" elapsed="0.000032"/>
</kw>
<status status="FAIL" start="2026-08-23T02:07:22.279752" elapsed="0.239036">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</status>
</kw>
<msg time="2026-08-23T02:07:22.518951" level="INFO">${status} = FAIL</msg>
<msg time="2026-08-23T02:07:22.519012" level="INFO">${error} = HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=test-device</msg>
<var>${status}</var>
<var>${error}</var>
<arg>Check_Netconf_Usable</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:07:22.279431" elapsed="0.239614"/>
</kw>
<if>
<branch type="IF" condition="'${status}'=='PASS'">
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${netconf_is_ready}</arg>
<arg>True</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:22.519463" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:22.519148" elapsed="0.000397"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:22.519123" elapsed="0.000466"/>
</if>
<kw name="Should Be Equal" owner="BuiltIn">
<arg>'${status}'</arg>
<arg>'FAIL'</arg>
<doc>Fails if the given objects are unequal.</doc>
<status status="PASS" start="2026-08-23T02:07:22.519789" 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-08-23T02:07:22.522107" elapsed="0.000044"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:22.521477" elapsed="0.000760"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:22.521453" elapsed="0.000811"/>
</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-08-23T02:07:22.522410" elapsed="0.000325"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:07:22.527929" 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-08-23T02:07:22.527490" elapsed="0.000467"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-08-23T02:07:22.528182" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-23T02:07:22.528034" elapsed="0.000205"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:22.528013" elapsed="0.000251"/>
</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-08-23T02:07:22.528410" 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-08-23T02:07:22.528579" 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-08-23T02:07:22.528756" elapsed="0.000026"/>
</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-08-23T02:07:22.528950" 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-08-23T02:07:22.529116" 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-08-23T02:07:22.529278" 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-08-23T02:07:22.529436" 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-08-23T02:07:22.527180" elapsed="0.002332"/>
</kw>
<status status="PASS" start="2026-08-23T02:07:22.521187" elapsed="0.008374"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-08-23T02:07:22.520660" elapsed="0.008941"/>
</kw>
<doc>If Netconf appears to be down, it may be due to bug 5014. Check if it is so and fail if yes.
Bug 5014 is about Netconf playing dead on boot until a device
configuration request is sent to it. To uncover this attempt to
configure and then deconfigure a device and then check if Netconf
is now up and running. If that turns out to be true, fail the case
as this signifies the bug 5014 to be present. Skip this testcase
if Netconf is detected to be up and running.</doc>
<tag>critical</tag>
<status status="PASS" start="2026-08-23T02:07:22.154197" elapsed="0.375446"/>
</test>
<test id="s1-s1-s1-t5" name="Check_Whether_Netconf_Can_Pretty_Print" line="132">
<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-08-23T02:07:22.533136" elapsed="0.000210"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:07:22.532862" elapsed="0.000538"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:22.534593" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:22.534482" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:22.534462" elapsed="0.000200"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:22.539643" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:22.539536" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:22.539518" elapsed="0.000193"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:22.540724" 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-08-23T02:07:22.540339" elapsed="0.000412"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:07:22.541236" 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-08-23T02:07:22.540929" elapsed="0.000333"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:07:22.541307" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:22.541461" 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-08-23T02:07:22.539956" elapsed="0.001531"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:22.547216" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:22.547106" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:22.547086" elapsed="0.000232"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:22.548545" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:22.548437" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:22.548418" elapsed="0.000196"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:07:22.549155" level="INFO">${karaf_connection_index} = 7</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-08-23T02:07:22.548756" elapsed="0.000426"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:22.549595" level="INFO">${current_connection_index} = 11</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-08-23T02:07:22.549338" elapsed="0.000283"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:22.591462" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:22.550211" elapsed="0.041420"/>
</kw>
<msg time="2026-08-23T02:07:22.591812" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:07:22.591883" 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 "n "e "t "c "o "n "f "...</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-08-23T02:07:22.549794" elapsed="0.042129"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:07:22.637093" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "R "e "a "d "y ". "N "e "t "c "o "n "f "r "e "a "d "y ". "C "h "e "c "k "_ "W "h "e "t "h "e "r "_ "N "e "t "c "o "n "f "_ "C "a "n "_ "P "r "e "t "t "y "_ "P "r "i "n "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-08-23T02:07:22.592493" elapsed="0.044785"/>
</kw>
<msg time="2026-08-23T02:07:22.637454" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:07:22.637502" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "R "e "a "d "y ". "N "e "t "c "o "n "f "r "e "a "d "y ". "C "h "e "c "k "_ "W "h "e "t ...</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-08-23T02:07:22.592095" elapsed="0.045444"/>
</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-08-23T02:07:22.637886" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:22.637617" elapsed="0.000349"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:22.637597" elapsed="0.000395"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:22.638521" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "R "e "a "d "y ". "N "e "t "c "o "n "f "r "e "a "d "y ". "C "h "e "c "k "_ "W "h "e "t "h "e "r "_ "N "e "t "c "o "n "f "_ "C "a "n "_ "P "r "e "t "t "y "_ "P "r "i "n "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-08-23T02:07:22.638138" elapsed="0.000459"/>
</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-08-23T02:07:22.638904" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:22.638665" elapsed="0.000317"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:22.638647" elapsed="0.000360"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:07:22.639041" 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-08-23T02:07:22.642174" elapsed="0.000149"/>
</kw>
<msg time="2026-08-23T02:07:22.642395" 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-08-23T02:07:22.641426" elapsed="0.001072"/>
</kw>
<kw name="Open 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-08-23T02:07:22.643448" elapsed="0.000038"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:22.644440" elapsed="0.000036"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:07:22.639928" elapsed="0.004634"/>
</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-08-23T02:07:22.639306" elapsed="0.005377"/>
</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-08-23T02:07:22.548132" elapsed="0.096657"/>
</kw>
<msg time="2026-08-23T02:07:22.645067" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:22.645113" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "R "e "a "d "y ". "N "e "t "c "o "n "f "r "e "a "d "y ". "C "h "e "c "k "_ "W "h "e "t ...</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-08-23T02:07:22.547473" elapsed="0.097678"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:07:22.645337" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:07:22.645229" elapsed="0.000204"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:22.645209" 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-08-23T02:07:22.645907" 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-08-23T02:07:22.646240" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:07:22.646312" 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-08-23T02:07:22.546725" elapsed="0.099695"/>
</kw>
<msg time="2026-08-23T02:07:22.646512" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:22.646558" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "R "e "a "d "y ". "N "e "t "c "o "n "f "r "e "a "d "y ". "C "h "e "c "k "_ "W "h "e "t ...</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-08-23T02:07:22.541904" elapsed="0.104702"/>
</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-08-23T02:07:22.647006" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:22.646685" elapsed="0.000378"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:22.646667" elapsed="0.000420"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:07:22.541730" elapsed="0.105380"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:07:22.541539" elapsed="0.105602"/>
</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-08-23T02:07:22.539177" elapsed="0.108017"/>
</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-08-23T02:07:22.534170" elapsed="0.113078"/>
</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-08-23T02:07:22.533546" elapsed="0.113746"/>
</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-08-23T02:07:22.530687" elapsed="0.116656"/>
</kw>
<if>
<branch type="IF" condition="not ${netconf_is_ready}">
<kw name="Fail" owner="BuiltIn">
<msg time="2026-08-23T02:07:22.647963" level="FAIL">Netconf is not ready so it can't pretty-print now.</msg>
<arg>Netconf is not ready so it can't pretty-print now.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="FAIL" start="2026-08-23T02:07:22.647658" elapsed="0.000369">Netconf is not ready so it can't pretty-print now.</status>
</kw>
<status status="FAIL" start="2026-08-23T02:07:22.647415" elapsed="0.000675">Netconf is not ready so it can't pretty-print now.</status>
</branch>
<status status="FAIL" start="2026-08-23T02:07:22.647399" elapsed="0.000724">Netconf is not ready so it can't pretty-print now.</status>
</if>
<kw name="Run_Keyword_If_At_Least_Phosphorus" owner="CompareStream">
<arg>Check_Netconf_Up_And_Running</arg>
<arg>pretty_print=odl-pretty-print=true</arg>
<doc>Compare phosphorus to vanadium and in case vanadium is at least phosphorus,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:22.657973" elapsed="0.000038"/>
</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-08-23T02:07:22.659382" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:22.658978" elapsed="0.000469"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:22.658957" elapsed="0.000515"/>
</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-08-23T02:07:22.659621" elapsed="0.000394"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:07:22.665116" 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-08-23T02:07:22.664668" elapsed="0.000477"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="NOT RUN" start="2026-08-23T02:07:22.665365" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:22.665219" elapsed="0.000188"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:22.665201" elapsed="0.000228"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:07:22.665930" level="INFO">${newline} = 
</msg>
<var>${newline}</var>
<arg>chr(10)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-23T02:07:22.665573" elapsed="0.000386"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:07:22.666389" level="INFO">${reference} = netconf_gate_userfeatures_txt_Ready_Netconfready_Check_Whether_Netconf_Can_Pretty_Print</msg>
<var>${reference}</var>
<arg>${SUITE_NAME}_${TEST_NAME}</arg>
<arg>[ /\.-]</arg>
<arg>_</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-23T02:07:22.666122" elapsed="0.000294"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<msg time="2026-08-23T02:07:22.666749" level="INFO">${reference} = netconf_gate_userfeatures_txt_ready_netconfready_check_whether_netconf_can_pretty_print</msg>
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="PASS" start="2026-08-23T02:07:22.666574" elapsed="0.000253"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:07:22.667365" level="INFO">${msg} = ... click for list of related bugs or create a new one if needed (with the
"netconf_gate_userfeatures_txt_ready_netconfready_check_whether_netconf_can_pretty_print"
reference somewhere inside)</msg>
<var>${msg}</var>
<arg>... click for list of related bugs or create a new one if needed (with the${newline}"${reference}"${newline}reference somewhere inside)</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:07:22.667009" elapsed="0.000384"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:07:22.667877" level="INFO">${bugs} = "https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=netconf_gate_userfeatures_txt_ready_netconfready_check_whether_netconf_can_pretty_print&amp;order=bug_status"</msg>
<var>${bugs}</var>
<arg>"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=${reference}&amp;order=bug_status"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:07:22.667546" elapsed="0.000365"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<msg time="2026-08-23T02:07:22.668524" level="INFO">Set test message to:
... click for list of related bugs or create a new one if needed (with the
"netconf_gate_userfeatures_txt_ready_netconfready_check_whether_netconf_can_pretty_print"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=netconf_gate_userfeatures_txt_ready_netconfready_check_whether_netconf_can_pretty_print&amp;order=bug_status"

Netconf is not ready so it can't pretty-print now.</msg>
<arg>${msg}${newline}${bugs}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="PASS" start="2026-08-23T02:07:22.668079" elapsed="0.000496"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:22.669060" level="INFO">... click for list of related bugs or create a new one if needed (with the
"netconf_gate_userfeatures_txt_ready_netconfready_check_whether_netconf_can_pretty_print"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=netconf_gate_userfeatures_txt_ready_netconfready_check_whether_netconf_can_pretty_print&amp;order=bug_status"</msg>
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:07:22.668728" elapsed="0.000381"/>
</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-08-23T02:07:22.664359" elapsed="0.004806"/>
</kw>
<status status="PASS" start="2026-08-23T02:07:22.658726" elapsed="0.010488"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-08-23T02:07:22.658346" elapsed="0.010908"/>
</kw>
<doc>Make one request to netconf-connector and see if it works.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-08-23T02:07:22.530068" elapsed="0.139229">... click for list of related bugs or create a new one if needed (with the
"netconf_gate_userfeatures_txt_ready_netconfready_check_whether_netconf_can_pretty_print"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=netconf_gate_userfeatures_txt_ready_netconfready_check_whether_netconf_can_pretty_print&amp;order=bug_status"

Netconf is not ready so it can't pretty-print now.</status>
</test>
<test id="s1-s1-s1-t6" name="Wait_For_MDSAL" line="141">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-08-23T02:07:22.672619" elapsed="0.000207"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:07:22.672355" elapsed="0.000545"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:22.673941" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:22.673809" elapsed="0.000179"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:22.673782" elapsed="0.000234"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:22.679026" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:22.678917" elapsed="0.000161"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:22.678898" elapsed="0.000211"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:22.680124" 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-08-23T02:07:22.679716" elapsed="0.000437"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:07:22.680608" 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-08-23T02:07:22.680311" elapsed="0.000324"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:07:22.680678" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T02:07:22.680854" 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-08-23T02:07:22.679338" elapsed="0.001542"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:22.686583" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:22.686473" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:22.686453" elapsed="0.000200"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:22.687904" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:22.687769" elapsed="0.000182"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:22.687751" elapsed="0.000252"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:07:22.688533" level="INFO">${karaf_connection_index} = 7</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-08-23T02:07:22.688156" elapsed="0.000404"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:22.688989" level="INFO">${current_connection_index} = 11</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-08-23T02:07:22.688718" elapsed="0.000297"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:22.730269" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:22.689581" elapsed="0.040865"/>
</kw>
<msg time="2026-08-23T02:07:22.730620" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:07:22.730667" 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 "n "e "t "c "o "n "f "...</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-08-23T02:07:22.689174" elapsed="0.041530"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:07:22.757059" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "R "e "a "d "y ". "N "e "t "c "o "n "f "r "e "a "d "y ". "W "a "i "t "_ "F "o "r "_ "M "D "S "A "L "[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-08-23T02:07:22.731308" elapsed="0.025929"/>
</kw>
<msg time="2026-08-23T02:07:22.757407" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:07:22.757452" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "R "e "a "d "y ". "N "e "t "c "o "n "f "r "e "a "d "y ". "W "a "i "t "_ "F "o "r "_ "M ...</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-08-23T02:07:22.730900" elapsed="0.026589"/>
</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-08-23T02:07:22.757823" elapsed="0.000045"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:22.757592" elapsed="0.000333"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:22.757546" elapsed="0.000404"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:22.758463" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "R "e "a "d "y ". "N "e "t "c "o "n "f "r "e "a "d "y ". "W "a "i "t "_ "F "o "r "_ "M "D "S "A "L "[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-08-23T02:07:22.758091" elapsed="0.000439"/>
</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-08-23T02:07:22.758809" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:22.758596" elapsed="0.000310"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:22.758578" elapsed="0.000353"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:07:22.758965" 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-08-23T02:07:22.762035" elapsed="0.000148"/>
</kw>
<msg time="2026-08-23T02:07:22.762254" 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-08-23T02:07:22.761329" elapsed="0.001026"/>
</kw>
<kw name="Open 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-08-23T02:07:22.763289" elapsed="0.000037"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:22.764250" elapsed="0.000036"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:07:22.759812" elapsed="0.004553"/>
</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-08-23T02:07:22.759236" elapsed="0.005244"/>
</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-08-23T02:07:22.687465" elapsed="0.077112"/>
</kw>
<msg time="2026-08-23T02:07:22.764677" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:22.764721" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "R "e "a "d "y ". "N "e "t "c "o "n "f "r "e "a "d "y ". "W "a "i "t "_ "F "o "r "_ "M ...</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-08-23T02:07:22.686802" elapsed="0.077956"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:07:22.764985" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-08-23T02:07:22.764875" elapsed="0.000169"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:22.764814" elapsed="0.000254"/>
</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-08-23T02:07:22.765462" 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-08-23T02:07:22.766042" elapsed="0.000027"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:07:22.766118" 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-08-23T02:07:22.686122" elapsed="0.080104"/>
</kw>
<msg time="2026-08-23T02:07:22.766320" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:22.766364" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "R "e "a "d "y ". "N "e "t "c "o "n "f "r "e "a "d "y ". "W "a "i "t "_ "F "o "r "_ "M ...</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-08-23T02:07:22.681264" elapsed="0.085136"/>
</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-08-23T02:07:22.766721" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:22.766475" elapsed="0.000299"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:22.766458" elapsed="0.000340"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:07:22.681115" elapsed="0.085705"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:07:22.680937" elapsed="0.085931"/>
</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-08-23T02:07:22.678539" elapsed="0.088384"/>
</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-08-23T02:07:22.673487" elapsed="0.093489"/>
</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-08-23T02:07:22.673064" elapsed="0.093955"/>
</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-08-23T02:07:22.670149" elapsed="0.096922"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Verify_Feature_Is_Installed" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:22.772345" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:22.772238" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:22.772220" elapsed="0.000193"/>
</if>
<kw name="Issue_Command_On_Karaf_Console" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:22.776372" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:22.776268" elapsed="0.000150"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:22.776250" elapsed="0.000189"/>
</if>
<kw name="Open Connection" owner="SSHLibrary">
<arg>${controller}</arg>
<arg>port=${karaf_port}</arg>
<arg>prompt=${KARAF_PROMPT_LOGIN}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-08-23T02:07:22.776581" elapsed="0.000454"/>
</kw>
<kw name="Login" owner="SSHLibrary">
<msg time="2026-08-23T02:07:22.777459" level="INFO">Logging into '10.30.170.114:8101' as 'karaf'.</msg>
<msg time="2026-08-23T02:07:22.976571" 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-08-23T02:07:22.777197" elapsed="0.199533"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:23.031586" level="INFO">@root&gt;feature:list -i | 0[C 0g[Krep odl-netconf-mdsal</msg>
<arg>${cmd}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:22.977018" elapsed="0.054634"/>
</kw>
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:07:23.074248" level="INFO">[?1l&gt;[?2004l[31;1modl-netconf-mdsal[0m-common                                        x 12.0.0.SNAPSHOT  x          x Started x odl-netconf-12.0.0-SNAPSHOT                                     x [31;1modl-netconf-mdsal[0m-common
[31;1modl-netconf-mdsal[0m                                               x 12.0.0.SNAPSHOT  x x        x Started x [31;1modl-netconf-mdsal[0m                                               x OpenDaylight :: Netconf :: Mdsal
[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<msg time="2026-08-23T02:07:23.074366" level="INFO">${output} = [?1l&gt;[?2004l[31;1modl-netconf-mdsal[0m-common                                        x 12.0.0.SNAPSHOT  x          x Started x odl-netconf-12.0.0-SNAPSHOT                                 ...</msg>
<var>${output}</var>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-08-23T02:07:23.031819" elapsed="0.042576"/>
</kw>
<kw name="Write Bare" owner="SSHLibrary">
<arg>logout\n</arg>
<doc>Writes the given ``text`` on the remote machine without appending a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:23.074550" elapsed="0.000192"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-08-23T02:07:23.074920" elapsed="0.000201"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:23.075599" level="INFO">[?1l&gt;[?2004l[31;1modl-netconf-mdsal[0m-common                                        x 12.0.0.SNAPSHOT  x          x Started x odl-netconf-12.0.0-SNAPSHOT                                     x [31;1modl-netconf-mdsal[0m-common
[31;1modl-netconf-mdsal[0m                                               x 12.0.0.SNAPSHOT  x x        x Started x [31;1modl-netconf-mdsal[0m                                               x OpenDaylight :: Netconf :: Mdsal
[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:07:23.075278" elapsed="0.000461"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-23T02:07:23.075791" elapsed="0.000069"/>
</return>
<msg time="2026-08-23T02:07:23.076006" level="INFO">${output} = [?1l&gt;[?2004l[31;1modl-netconf-mdsal[0m-common                                        x 12.0.0.SNAPSHOT  x          x Started x odl-netconf-12.0.0-SNAPSHOT                                 ...</msg>
<var>${output}</var>
<arg>feature:list -i | grep ${feature_name}</arg>
<arg>${controller}</arg>
<arg>${karaf_port}</arg>
<doc>Will execute the given ${cmd} by ssh'ing to the karaf console running on 10.30.170.114
Note that this keyword will open&amp;close new SSH connection, without switching back to previously current session.</doc>
<status status="PASS" start="2026-08-23T02:07:22.775882" elapsed="0.300156"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${output}</arg>
<arg>${feature_name}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:23.076199" elapsed="0.000576"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-23T02:07:23.076888" elapsed="0.000035"/>
</return>
<arg>odl-netconf-mdsal</arg>
<doc>Will Succeed if the given ${feature_name} is found in the output of "feature:list -i"</doc>
<status status="PASS" start="2026-08-23T02:07:22.771931" elapsed="0.305097"/>
</kw>
<msg time="2026-08-23T02:07:23.077127" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:23.077173" level="INFO">${message} = [?1l&gt;[?2004l[31;1modl-netconf-mdsal[0m-common                                        x 12.0.0.SNAPSHOT  x          x Started x odl-netconf-12.0.0-SNAPSHOT                                 ...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>KarafKeywords.Verify_Feature_Is_Installed</arg>
<arg>odl-netconf-mdsal</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:07:22.767233" elapsed="0.309969"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'FAIL'">
<kw name="Pass Execution" owner="BuiltIn">
<arg>The 'odl-netconf-mdsal' feature is not installed so no need to wait for it.</arg>
<doc>Skips rest of the current test, setup, or teardown with PASS status.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:23.077553" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:23.077294" elapsed="0.000313"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:23.077272" elapsed="0.000362"/>
</if>
<kw name="Open_Connection_To_ODL_System" owner="SSHKeywords">
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:23.083175" level="INFO">${odl_connection} = 13</msg>
<var>${odl_connection}</var>
<arg>${ip_address}</arg>
<arg>prompt=${ODL_SYSTEM_PROMPT}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-08-23T02:07:23.082761" elapsed="0.000442"/>
</kw>
<kw name="Flexible_Controller_Login" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-08-23T02:07:23.084949" level="INFO">Length is 0.</msg>
<msg time="2026-08-23T02:07:23.085025" 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-08-23T02:07:23.084663" elapsed="0.000386"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:07:23.085205" elapsed="0.000328"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-08-23T02:07:23.086387" level="INFO">Logging into '10.30.170.114:22' as 'jenkins'.</msg>
<msg time="2026-08-23T02:07:23.730516" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-186-generic x86_64)

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

 System information as of Sun Aug 23 02:07:23 UTC 2026

  System load:  0.0                Processes:             118
  Usage of /:   13.8% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.114
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Sun Aug 23 01:46:04 2026 from 10.30.171.240
[?2004h[jenkins@releng-19126-54-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-08-23T02:07:23.086076" elapsed="0.644575"/>
</kw>
<msg time="2026-08-23T02:07:23.730729" 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-08-23T02:07:23.085698" elapsed="0.645108"/>
</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-08-23T02:07:23.084187" elapsed="0.646744"/>
</kw>
<msg time="2026-08-23T02:07:23.730984" 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-08-23T02:07:23.083770" elapsed="0.647260"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-08-23T02:07:23.083395" elapsed="0.647712"/>
</kw>
<return>
<value>${odl_connection}</value>
<status status="PASS" start="2026-08-23T02:07:23.731157" elapsed="0.000039"/>
</return>
<doc>Open a connection to the ODL system at ${ip_address} and return its identifier.</doc>
<status status="PASS" start="2026-08-23T02:07:23.082389" elapsed="0.648932"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Netconf_MDSAL_Up_And_Running">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-23T02:07:23.733929" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-23T02:07:23.746967" level="INFO">Command exited with return code 127.</msg>
<msg time="2026-08-23T02:07:23.747189" level="INFO">${netstat_installed} = </msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-23T02:07:23.733811" elapsed="0.013434"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-23T02:07:23.749425" level="INFO">Executing command 'sudo apt-get update'.</msg>
<msg time="2026-08-23T02:07:34.189024" level="INFO">Command exited with return code 0.</msg>
<arg>sudo apt-get update</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-23T02:07:23.749020" elapsed="10.440261"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-23T02:07:34.190086" level="INFO">Executing command 'sudo apt-get install -y net-tools'.</msg>
<msg time="2026-08-23T02:07:38.839663" level="INFO">Command exited with return code 0.</msg>
<arg>sudo apt-get install -y net-tools</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-23T02:07:34.189776" elapsed="4.650222"/>
</kw>
<doc>Install netstat if it is not already installed.</doc>
<status status="PASS" start="2026-08-23T02:07:23.748379" elapsed="15.091842"/>
</kw>
<status status="PASS" start="2026-08-23T02:07:23.747418" elapsed="15.092877"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:23.747370" elapsed="15.093003"/>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="PASS" start="2026-08-23T02:07:23.733328" elapsed="15.107160"/>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:07:23.732890" elapsed="15.107701"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-23T02:07:38.841760" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":2830 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-23T02:07:38.885469" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-23T02:07:38.885725" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-23T02:07:38.841143" elapsed="0.044643"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-23T02:07:38.885946" elapsed="0.000120"/>
</return>
<msg time="2026-08-23T02:07:38.886368" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${ODL_NETCONF_MDSAL_PORT}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-23T02:07:23.732511" elapsed="15.153915"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-23T02:07:38.886820" elapsed="0.000862"/>
</kw>
<status status="PASS" start="2026-08-23T02:07:23.732142" elapsed="15.155683"/>
</kw>
<arg>${NETCONFREADY_WAIT_MDSAL}</arg>
<arg>1s</arg>
<arg>Check_Netconf_MDSAL_Up_And_Running</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-23T02:07:23.731537" elapsed="15.156425"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-08-23T02:07:38.888314" elapsed="0.000549"/>
</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-08-23T02:07:38.892052" elapsed="0.000061"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:38.891116" elapsed="0.001098"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:38.891070" elapsed="0.001205"/>
</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-08-23T02:07:38.892604" elapsed="0.000763"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:07:38.899463" 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-08-23T02:07:38.899009" elapsed="0.000482"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-08-23T02:07:38.899710" elapsed="0.000033"/>
</return>
<status status="PASS" start="2026-08-23T02:07:38.899564" elapsed="0.000214"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:38.899546" elapsed="0.000256"/>
</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-08-23T02:07:38.899973" 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-08-23T02:07:38.900153" 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-08-23T02:07:38.900324" elapsed="0.000019"/>
</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-08-23T02:07:38.900486" 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-08-23T02:07:38.900676" elapsed="0.000024"/>
</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-08-23T02:07:38.900882" elapsed="0.000023"/>
</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-08-23T02:07:38.901054" 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-08-23T02:07:38.898670" elapsed="0.002461"/>
</kw>
<status status="PASS" start="2026-08-23T02:07:38.890574" elapsed="0.010614"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-08-23T02:07:38.889569" elapsed="0.011753"/>
</kw>
<doc>Wait for the MDSAL feature to become online</doc>
<status status="PASS" start="2026-08-23T02:07:22.669633" elapsed="16.231740"/>
</test>
<kw name="Teardown_Everything" type="TEARDOWN">
<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-08-23T02:07:38.909206" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:38.909093" elapsed="0.000161"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:38.909074" elapsed="0.000203"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:38.910295" 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-08-23T02:07:38.909905" elapsed="0.000417"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:07:38.910787" 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-08-23T02:07:38.910480" elapsed="0.000332"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:07:38.910874" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T02:07:38.911032" 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-08-23T02:07:38.909539" elapsed="0.001517"/>
</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-08-23T02:07:38.916491" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:38.916383" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:38.916365" 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-08-23T02:07:38.917628" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:38.917522" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:38.917504" elapsed="0.000193"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:07:38.918105" level="INFO">${karaf_connection_index} = 7</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-08-23T02:07:38.917869" elapsed="0.000263"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:38.918465" 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-08-23T02:07:38.918291" elapsed="0.000199"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:38.968562" level="INFO">log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "E "n "d "i "n "g "[C "N "e "t "c "o "n "f "[C "r "e "a "d "i "n "e "s "s "[C "t "e "s "t "[C "s "[78Cu "[A[78Ci</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:38.918997" elapsed="0.049652"/>
</kw>
<msg time="2026-08-23T02:07:38.968760" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:07:38.968805" level="INFO">${message_write} = log:log " "R "O "B "O "T "[C "M "E "S "S "A "G "E ": "[C "E "n "d "i "n "g "[C "N "e "t "c "o "n "f "[C "r "e "a "d "i "n "...</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-08-23T02:07:38.918646" elapsed="0.050215"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:07:38.979061" level="INFO">"t "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-08-23T02:07:38.969405" elapsed="0.009717"/>
</kw>
<msg time="2026-08-23T02:07:38.979219" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:07:38.979264" level="INFO">${message_wait} =  "t "e "[K"
[?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-08-23T02:07:38.969041" elapsed="0.010251"/>
</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-08-23T02:07:38.979591" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:38.979368" elapsed="0.000300"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:38.979347" elapsed="0.000346"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:38.980120" level="INFO"> "t "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-08-23T02:07:38.979863" elapsed="0.000307"/>
</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-08-23T02:07:38.980447" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:38.980235" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:38.980217" elapsed="0.000308"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:07:38.980558" 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">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:07:38.981670" elapsed="0.000397"/>
</kw>
<kw name="Open 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-08-23T02:07:38.982272" elapsed="0.000170"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-08-23T02:07:38.982592" elapsed="0.000100"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:07:38.981356" elapsed="0.001387"/>
</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-08-23T02:07:38.980852" elapsed="0.001936"/>
</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-08-23T02:07:38.917270" elapsed="0.065639"/>
</kw>
<msg time="2026-08-23T02:07:38.983002" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:38.983044" level="INFO">${message} =  "t "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</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-08-23T02:07:38.916711" elapsed="0.066361"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:07:38.983254" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-08-23T02:07:38.983147" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:38.983129" 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-08-23T02:07:38.983753" 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-08-23T02:07:38.984305" elapsed="0.000026"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:07:38.984379" 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-08-23T02:07:38.916093" elapsed="0.068396"/>
</kw>
<msg time="2026-08-23T02:07:38.984582" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:38.984624" level="INFO">${output} =  "t "e "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</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-08-23T02:07:38.911445" elapsed="0.073207"/>
</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-08-23T02:07:38.985000" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:38.984729" elapsed="0.000325"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:38.984712" elapsed="0.000366"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:07:38.911301" elapsed="0.073799"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:07:38.911117" elapsed="0.074016"/>
</for>
<arg>Ending Netconf readiness test suite</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-08-23T02:07:38.906850" elapsed="0.078337"/>
</kw>
<kw name="Delete All Sessions" owner="RequestsLibrary">
<msg time="2026-08-23T02:07:38.985412" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects</doc>
<status status="PASS" start="2026-08-23T02:07:38.985331" elapsed="0.000328"/>
</kw>
<doc>Destroy all sessions in the requests library and log into karaf.log that the netconf readiness wait is over.</doc>
<status status="PASS" start="2026-08-23T02:07:38.902236" elapsed="0.083480"/>
</kw>
<doc>netconf-connector readiness test suite.

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

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


Try to detect whether Netconf is up and running and wait for
it for a configurable time if it is not yet up and running.

This is achieved by the test Check_Whether_Netconf_Topology_Is_Ready. This test case
does not use controller-config device. This test case is skipped (Pass Execution) if
the usage of controller-config device is indicated.
Testing itself is done by creating a netconf test device configured
to all odl nodes one by one and check if GET works from mounted
device. GET is done from all the odl nodes and it works for both, 1 or 3 nodes
setup.

The next test cases are basically dedicated to test readiness of the netconf using
controller-config device. This device is created when odl-netconf-connector-ssh|all
feature is installed. Robot variable USE_NETCONF_CONNECTOR should be set to True.
Connector test cases change behavior depending on False. If True,
they check data mounted behind controller-config is readable, if False they only check
topology-netconf is readable.

Some testsuites expect netconf-connector to be ready as soon as possible and will
fail if it is not. We want to see a failure if this is the cause of the failure.


The usage of netconf-connector happens in other suites than netconf,
especially bgpcep to configure odl's bgp peers. Testing the readiness
of the netconf-connector must be invoked by the Robot invocation
argument USE_NETCONF_CONNECTOR. By default it is set to False and
test jobs should be responsible to set it to True if needed. In the
default configuration the affected test cases waits for the netconf
topology to appear only.

If the netconf-connector is not ready upon startup and it's usage is set
to True (as seen by the second test case failing), the next case starts
to repeat the query for a minute to see whether it is going "to fix itself"
within the minute. If yes, then the testcase will pass, which
indicates that the "ODL cooldown" of 1 minute is not long enough
to allow for netconf-connector to initialize properly.
If this fails, one more check with even longer timeout is run.
If the Check_Whether_Netconf_Is_Up_And_Running pass, then the next test
case does nothing.

The other test case then checks whether Netconf can pretty print
data. This sometimes makes problems, most likely due to too
new Robot Requests library with an interface incompatible with
this test suite.</doc>
<status status="FAIL" start="2026-08-23T01:46:01.593407" elapsed="1297.392341"/>
</suite>
<status status="FAIL" start="2026-08-23T01:46:01.592039" elapsed="1297.394766"/>
</suite>
<suite id="s1-s2" name="Apidocs" source="/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/apidocs">
<suite id="s1-s2-s1" name="Apidocs" source="/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/apidocs/apidocs.robot">
<kw name="Create_Default_Session" owner="TemplatedRequests" type="SETUP">
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:07:39.035493" level="INFO">Creating Session using : alias=default, url=http://10.30.170.114:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x72b0ed0a0d10&gt;, timeout=30, proxies=None, verify=False,                     debug=0 </msg>
<arg>default</arg>
<arg>url=${url}</arg>
<arg>auth=${auth}</arg>
<arg>timeout=${timeout}</arg>
<arg>max_retries=${max_retries}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="PASS" start="2026-08-23T02:07:39.035084" elapsed="0.000568"/>
</kw>
<arg>timeout=30</arg>
<doc>Create "default" session to ${url} with authentication and connection parameters.
This Keyword is in this Resource only so that user do not need to call RequestsLibrary directly.</doc>
<status status="PASS" start="2026-08-23T02:07:39.034667" elapsed="0.001055"/>
</kw>
<test id="s1-s2-s1-t1" name="Get Apidoc Apis" line="17">
<kw name="Run_Keyword_If_Less_Than_Titanium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_Less_Than" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &lt; ${Stream_dict}[${lower_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:07:39.050129" elapsed="0.000404"/>
</kw>
<arg>titanium</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${lower_bound} to vanadium and in case vanadium is less than ${lower_bound},
run Skip_Netty_Test_Case ['Skipping test: Not valid for Netty-based RESTCONF on ODL versions Scandium and earlier.'] {} and return its value.</doc>
<status status="PASS" start="2026-08-23T02:07:39.049688" elapsed="0.000914"/>
</kw>
<msg time="2026-08-23T02:07:39.050648" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_Less_Than</arg>
<arg>titanium</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:07:39.043070" elapsed="0.007627"/>
</kw>
<arg>Skip_Netty_Test_Case</arg>
<arg>Skipping test: Not valid for Netty-based RESTCONF on ODL versions Scandium and earlier.</arg>
<doc>Compare titanium to vanadium and in case vanadium is less than titanium,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-08-23T02:07:39.042721" elapsed="0.008051"/>
</kw>
<kw name="Set_Variable_If_At_Least_Aluminium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T02:07:39.064956" elapsed="0.000419"/>
</kw>
<msg time="2026-08-23T02:07:39.065426" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:07:39.064625" elapsed="0.000860"/>
</kw>
<arg>aluminium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return openapi_18 if vanadium is at least ${lower_bound},
return apis otherwise.</doc>
<status status="PASS" start="2026-08-23T02:07:39.064278" elapsed="0.001285"/>
</kw>
<msg time="2026-08-23T02:07:39.065606" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>aluminium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:07:39.057757" elapsed="0.007891"/>
</kw>
<msg time="2026-08-23T02:07:39.065749" level="INFO">${path} = openapi_18</msg>
<var>${path}</var>
<arg>openapi_18</arg>
<arg>apis</arg>
<doc>Compare aluminium to vanadium and return ${value_if_true} if vanadium is at least aluminium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-08-23T02:07:39.057448" elapsed="0.008325"/>
</kw>
<kw name="Set_Variable_If_At_Least_Chlorine" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T02:07:39.079550" elapsed="0.000430"/>
</kw>
<msg time="2026-08-23T02:07:39.080031" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:07:39.079237" elapsed="0.000841"/>
</kw>
<arg>chlorine</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return openapi if vanadium is at least ${lower_bound},
return openapi_18 otherwise.</doc>
<status status="PASS" start="2026-08-23T02:07:39.078895" elapsed="0.001257"/>
</kw>
<msg time="2026-08-23T02:07:39.080193" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>chlorine</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:07:39.072250" elapsed="0.007984"/>
</kw>
<msg time="2026-08-23T02:07:39.080333" level="INFO">${path} = openapi</msg>
<var>${path}</var>
<arg>openapi</arg>
<arg>${path}</arg>
<doc>Compare chlorine to vanadium and return ${value_if_true} if vanadium is at least chlorine, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-08-23T02:07:39.071948" elapsed="0.008408"/>
</kw>
<kw name="Set_Variable_If_At_Least_Potassium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T02:07:39.094249" elapsed="0.000411"/>
</kw>
<msg time="2026-08-23T02:07:39.094711" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:07:39.093931" elapsed="0.000827"/>
</kw>
<arg>potassium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return openapi_v3 if vanadium is at least ${lower_bound},
return openapi otherwise.</doc>
<status status="PASS" start="2026-08-23T02:07:39.093577" elapsed="0.001319"/>
</kw>
<msg time="2026-08-23T02:07:39.094939" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>potassium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:07:39.087054" elapsed="0.007928"/>
</kw>
<msg time="2026-08-23T02:07:39.095082" level="INFO">${path} = openapi_v3</msg>
<var>${path}</var>
<arg>openapi_v3</arg>
<arg>${path}</arg>
<doc>Compare potassium to vanadium and return ${value_if_true} if vanadium is at least potassium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-08-23T02:07:39.086735" elapsed="0.008371"/>
</kw>
<kw name="Get_As_Json_Templated" owner="TemplatedRequests">
<kw name="Get_Templated" owner="TemplatedRequests">
<kw name="Resolve_Text_From_Template_Folder" owner="TemplatedRequests">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Resolve_Text_From_Template_File" owner="TemplatedRequests">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:07:39.132310" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/apidocs/../../../variables/apidoc/openapi_v3.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:07:39.131913" elapsed="0.000426"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T02:07:39.133043" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/apidoc/openapi_v3.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-23T02:07:39.132766" elapsed="0.000361">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/apidoc/openapi_v3.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-23T02:07:39.133223" 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-08-23T02:07:39.132467" elapsed="0.000780"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:39.133755" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/apidocs/../../../variables/apidoc/openapi_v3/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-08-23T02:07:39.133371" elapsed="0.000410"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:39.134055" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/apidoc/openapi_v3/location.uri"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/apidoc/openapi_v3/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:39.134216" level="INFO">${template} = /openapi/api/v3/single
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:39.133918" elapsed="0.000322"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:39.134597" level="INFO">/openapi/api/v3/single
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:07:39.134355" 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-08-23T02:07:39.135523" level="INFO">mapping: {}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:07:39.135271" elapsed="0.000296"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:07:39.136133" 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-08-23T02:07:39.135686" elapsed="0.000473"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:39.136455" elapsed="0.000021"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<var>${encoded_value}</var>
<arg>${value}</arg>
<doc>Percent encodes reserved characters in the given string so it can be used as part of url.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:39.136630" elapsed="0.000024"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${encoded_mapping}</arg>
<arg>${key}</arg>
<arg>${encoded_value}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:39.136763" elapsed="0.000020"/>
</kw>
<var name="${key}"/>
<var name="${value}"/>
<status status="NOT RUN" start="2026-08-23T02:07:39.136358" elapsed="0.000460"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="NOT RUN" start="2026-08-23T02:07:39.136213" elapsed="0.000652"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-23T02:07:39.136913" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T02:07:39.137075" level="INFO">${mapping_to_use} = {}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-23T02:07:39.134992" elapsed="0.002108"/>
</kw>
<status status="PASS" start="2026-08-23T02:07:39.134712" elapsed="0.002420"/>
</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-08-23T02:07:39.137263" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:39.137158" elapsed="0.000160"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:39.134691" elapsed="0.002648"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:07:39.137902" level="INFO">${final_text} = /openapi/api/v3/single</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-08-23T02:07:39.137438" elapsed="0.000492"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T02:07:39.137978" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/apidocs/../../../variables/apidoc/openapi_v3.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/apidocs/../../../variables/apidoc/openapi_v3.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/apidocs/../../../variables/apidoc/openapi_v3/${file_name}.</doc>
<status status="PASS" start="2026-08-23T02:07:39.131290" elapsed="0.006811"/>
</kw>
<msg time="2026-08-23T02:07:39.138186" 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-08-23T02:07:39.121558" elapsed="0.016677"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/apidocs/../../../variables/apidoc/openapi_v3.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/apidocs/../../../variables/apidoc/openapi_v3.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/apidocs/../../../variables/apidoc/openapi_v3/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:39.147735" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/apidocs/../../../variables/apidoc/openapi_v3.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/apidocs/../../../variables/apidoc/openapi_v3.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/apidocs/../../../variables/apidoc/openapi_v3/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:39.157298" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/apidocs/../../../variables/apidoc/openapi_v3.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/apidocs/../../../variables/apidoc/openapi_v3.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/apidocs/../../../variables/apidoc/openapi_v3/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:39.166852" 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-08-23T02:07:39.167021" 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-08-23T02:07:39.167163" 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-08-23T02:07:39.167506" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:39.167400" elapsed="0.000162"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:07:39.167385" elapsed="0.000200"/>
</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-08-23T02:07:39.167683" 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-08-23T02:07:39.167807" 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-08-23T02:07:39.167950" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T02:07:39.167351" elapsed="0.000651"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T02:07:39.167241" elapsed="0.000787"/>
</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-08-23T02:07:39.168131" elapsed="0.000019"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T02:07:39.168205" elapsed="0.000015"/>
</return>
<msg time="2026-08-23T02:07:39.168314" level="INFO">${uri} = /openapi/api/v3/single</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=location</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-23T02:07:39.118235" elapsed="0.050104"/>
</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-08-23T02:07:39.169488" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/apidoc/openapi_v3/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-08-23T02:07:39.169242" elapsed="0.000313">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/apidoc/openapi_v3/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-23T02:07:39.169648" 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-08-23T02:07:39.168942" elapsed="0.000730"/>
</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-08-23T02:07:39.169965" elapsed="0.000054"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:39.169743" elapsed="0.000315"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:07:39.170493" 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-08-23T02:07:39.170196" elapsed="0.000322"/>
</kw>
<status status="PASS" start="2026-08-23T02:07:39.170083" elapsed="0.000478"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:39.169725" elapsed="0.000862"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:39.172462" 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-08-23T02:07:39.170701" elapsed="0.001787"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-23T02:07:39.172540" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:07:39.172697" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/apidocs/../../../variables/apidoc/openapi_v3/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-23T02:07:39.168642" elapsed="0.004087"/>
</kw>
<kw name="Resolve_Volatiles_Path" owner="TemplatedRequests">
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T02:07:39.173877" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/apidoc/openapi_v3/volatiles.list' does not exist.</msg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-23T02:07:39.173602" elapsed="0.000348">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/apidoc/openapi_v3/volatiles.list' does not exist.</status>
</kw>
<msg time="2026-08-23T02:07:39.174047" level="INFO">${read_volatiles_file} = False</msg>
<var>${read_volatiles_file}</var>
<arg>OperatingSystem.File Should Exist</arg>
<arg>${folder}${/}volatiles.list</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-23T02:07:39.173309" elapsed="0.000762"/>
</kw>
<if>
<branch type="IF" condition="${read_volatiles_file} == ${false}">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-23T02:07:39.174278" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-08-23T02:07:39.174143" elapsed="0.000194"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:39.174124" elapsed="0.000237"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${volatiles}</var>
<arg>${folder}${/}volatiles.list</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:39.174467" elapsed="0.000021"/>
</kw>
<kw name="Split String" owner="String">
<var>${volatiles_list}</var>
<arg>${volatiles}</arg>
<arg>${\n}</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:39.174599" elapsed="0.000019"/>
</kw>
<return>
<value>${volatiles_list}</value>
<status status="NOT RUN" start="2026-08-23T02:07:39.174662" elapsed="0.000015"/>
</return>
<msg time="2026-08-23T02:07:39.176385" level="INFO">${volatiles_list} = </msg>
<var>${volatiles_list}</var>
<arg>${folder}</arg>
<doc>Reads Volatiles List from file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/apidocs/../../../variables/apidoc/openapi_v3/volatiles.list if the file exists and
returns the Volatiles List. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-23T02:07:39.173024" elapsed="0.003388"/>
</kw>
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:39.177736" level="INFO">/openapi/api/v3/single</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:07:39.177485" elapsed="0.000296"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:39.178159" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:07:39.177910" elapsed="0.000295"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:39.179881" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:39.178271" elapsed="0.001675"/>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:07:39.187226" level="INFO">GET Request : url=http://10.30.170.114:8181/openapi/api/v3/single 
 path_url=/openapi/api/v3/single 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:07:39.187285" level="INFO">GET Response : url=http://10.30.170.114:8181/openapi/api/v3/single 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '384'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/openapi/api/v3/single&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:07:39.187390" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/openapi/api/v3/single</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:07:39.180070" elapsed="0.007737">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/openapi/api/v3/single</status>
</kw>
<status status="FAIL" start="2026-08-23T02:07:39.179971" elapsed="0.007950">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/openapi/api/v3/single</status>
</branch>
<status status="FAIL" start="2026-08-23T02:07:39.178253" elapsed="0.009702">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/openapi/api/v3/single</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:39.188312" elapsed="0.000028"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:07:39.188489" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:39.188447" elapsed="0.000086"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:07:39.188429" elapsed="0.000125"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:39.188659" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:07:39.188729" elapsed="0.000014"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>keys_with_volatiles=${volatiles_list}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:07:39.176689" elapsed="0.012158">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/openapi/api/v3/single</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:07:39.188936" elapsed="0.000017"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>mapping=${mapping}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>Resolve URI from folder, call Get_From_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-23T02:07:39.101287" elapsed="0.087746">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/openapi/api/v3/single</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Json_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>mapping=${mapping}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected JSON data, should be equal to provided ${response}.
JSON normalization is used, endlines enabled for readability.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:39.189267" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:39.189123" elapsed="0.000217"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:07:39.189107" elapsed="0.000256"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:07:39.189395" elapsed="0.000014"/>
</return>
<var>${resp}</var>
<arg>folder=${VAR_DIR}/${path}</arg>
<arg>http_timeout=90</arg>
<doc>Add arguments sensible for JSON data, return Get_Templated response text.
Optionally, verification against JSON data (may be iterated) is called.
Only subset of JSON data is verified and returned if JMES path is specified in
file ${folder}/jmespath.expr.</doc>
<status status="FAIL" start="2026-08-23T02:07:39.098009" elapsed="0.091485">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/openapi/api/v3/single</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${resp}</arg>
<arg>api</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:39.189621" elapsed="0.000021"/>
</kw>
<doc>Get the Apidoc Apis list, check 200 status and apis string presence.</doc>
<status status="FAIL" start="2026-08-23T02:07:39.035779" elapsed="0.154013">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/openapi/api/v3/single</status>
</test>
<kw name="Delete All Sessions" owner="RequestsLibrary" type="TEARDOWN">
<msg time="2026-08-23T02:07:39.190442" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects</doc>
<status status="PASS" start="2026-08-23T02:07:39.190352" elapsed="0.000160"/>
</kw>
<doc>Test suite to verify Apidocs is OK.</doc>
<status status="FAIL" start="2026-08-23T02:07:38.988778" elapsed="0.201769"/>
</suite>
<status status="FAIL" start="2026-08-23T02:07:38.987407" elapsed="0.203963"/>
</suite>
<suite id="s1-s3" name="MDSAL" source="/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/MDSAL">
<suite id="s1-s3-s1" name="Northbound" source="/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/MDSAL/northbound.robot">
<kw name="Setup_Everything" 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-08-23T02:07:39.268202" 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-08-23T02:07:39.264429" elapsed="0.003822"/>
</kw>
<doc>Set suite to not fail fast.</doc>
<status status="PASS" start="2026-08-23T02:07:39.264219" elapsed="0.004094"/>
</kw>
<kw name="Setup_Karaf_Keywords" owner="KarafKeywords">
<kw name="ClusterManagement_Setup" owner="ClusterManagement">
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-08-23T02:07:39.272701" 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-08-23T02:07:39.269394" elapsed="0.003335"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-08-23T02:07:39.272937" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:39.272807" elapsed="0.000174"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:39.272786" elapsed="0.000218"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T02:07:39.273499" 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-08-23T02:07:39.273146" elapsed="0.000395"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-08-23T02:07:39.274021" 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-08-23T02:07:39.273695" elapsed="0.000352"/>
</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-08-23T02:07:39.274522" elapsed="0.000284"/>
</kw>
<msg time="2026-08-23T02:07:39.274922" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:39.274968" 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-08-23T02:07:39.274199" elapsed="0.000792"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:39.275513" 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-08-23T02:07:39.275147" elapsed="0.000392"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:07:39.276554" level="INFO">@{member_index_list} = [ ]</msg>
<var>@{member_index_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-08-23T02:07:39.276290" elapsed="0.000291"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:07:39.276997" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-08-23T02:07:39.276716" elapsed="0.000308"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:07:39.277455" 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-08-23T02:07:39.277170" elapsed="0.000311"/>
</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-08-23T02:07:39.280462" elapsed="0.000213"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:07:39.281171" level="INFO">${member_ip} = 10.30.170.114</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-08-23T02:07:39.280822" elapsed="0.000375"/>
</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-08-23T02:07:39.281339" elapsed="0.000230"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:07:39.282343" 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-08-23T02:07:39.282048" elapsed="0.000321"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-08-23T02:07:39.282415" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T02:07:39.282568" 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-08-23T02:07:39.281751" elapsed="0.000842"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:07:39.283181" level="INFO">Creating Session using : alias=ClusterManagement__session_1, url=http://10.30.170.114:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x72b0ed06c910&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-08-23T02:07:39.282735" elapsed="0.000587"/>
</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-08-23T02:07:39.283474" elapsed="0.000190"/>
</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-08-23T02:07:39.279887" elapsed="0.003837"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:07:39.279694" elapsed="0.004074"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="PASS" start="2026-08-23T02:07:39.277536" elapsed="0.006263"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T02:07:39.284376" 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-08-23T02:07:39.283975" elapsed="0.000443"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T02:07:39.284986" level="INFO">${ClusterManagement__index_to_ip_mapping} = {1: '10.30.170.114'}</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-08-23T02:07:39.284569" elapsed="0.000460"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T02:07:39.285559" 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-08-23T02:07:39.285177" elapsed="0.000423"/>
</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-08-23T02:07:39.275827" elapsed="0.009831"/>
</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-08-23T02:07:39.269065" elapsed="0.016647"/>
</kw>
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:39.285907" elapsed="0.000101"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:39.285776" elapsed="0.000271"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:39.285757" elapsed="0.000313"/>
</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-08-23T02:07:39.288972" 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-08-23T02:07:39.288574" elapsed="0.000424"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:07:39.289437" 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-08-23T02:07:39.289144" elapsed="0.000322"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:07:39.289521" elapsed="0.000033"/>
</return>
<msg time="2026-08-23T02:07:39.289679" 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-08-23T02:07:39.288232" elapsed="0.001471"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:07:39.290706" level="INFO">${member_ip} = 10.30.170.114</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-08-23T02:07:39.290443" elapsed="0.000288"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:39.291476" 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-08-23T02:07:39.291583" 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-08-23T02:07:39.291299" elapsed="0.000309"/>
</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-08-23T02:07:39.295274" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:39.294619" elapsed="0.000764"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:39.294576" elapsed="0.000876"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:39.296150" 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-08-23T02:07:39.296428" 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-08-23T02:07:39.295723" elapsed="0.000806"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:39.297432" level="INFO">Attempting to execute command "iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save" on remote system "10.30.170.114" 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-08-23T02:07:39.296789" elapsed="0.000804"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:39.298611" level="INFO">${conn_id} = 15</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-08-23T02:07:39.297874" elapsed="0.000838"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-08-23T02:07:39.300247" level="INFO">Length is 0.</msg>
<msg time="2026-08-23T02:07:39.300324" 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-08-23T02:07:39.299969" elapsed="0.000379"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:07:39.300543" elapsed="0.000386"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-08-23T02:07:39.301794" level="INFO">Logging into '10.30.170.114:22' as 'jenkins'.</msg>
<msg time="2026-08-23T02:07:39.625051" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-186-generic x86_64)

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

 System information as of Sun Aug 23 02:07:23 UTC 2026

  System load:  0.0                Processes:             118
  Usage of /:   13.8% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.114
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

41 updates can be applied immediately.
35 of these updates are standard security updates.
To see these additional updates run: apt list --upgradable

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

New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sun Aug 23 02:07:23 2026 from 10.30.171.240
[?2004h[jenkins@releng-19126-54-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-08-23T02:07:39.301474" elapsed="0.323795"/>
</kw>
<msg time="2026-08-23T02:07:39.625372" 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-08-23T02:07:39.301130" elapsed="0.324351"/>
</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-08-23T02:07:39.299224" elapsed="0.326544"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-23T02:07:39.626720" level="INFO">Executing command 'iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save'.</msg>
<msg time="2026-08-23T02:07:39.639464" level="INFO">Command exited with return code 4.</msg>
<msg time="2026-08-23T02:07:39.639934" level="INFO">${stdout} = </msg>
<msg time="2026-08-23T02:07:39.640149" 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-08-23T02:07:39.626197" elapsed="0.014099"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-08-23T02:07:39.640730" elapsed="0.000840"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:39.643296" 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-08-23T02:07:39.642412" elapsed="0.001288"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-08-23T02:07:39.644726" elapsed="0.000067"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:39.644081" elapsed="0.001065"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:39.643971" elapsed="0.001330"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-08-23T02:07:39.646334" elapsed="0.000147"/>
</return>
<status status="PASS" start="2026-08-23T02:07:39.645597" elapsed="0.000996"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:39.645508" elapsed="0.001238"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-08-23T02:07:39.647062" elapsed="0.000039"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:07:39.654556" elapsed="0.000966"/>
</kw>
<kw name="Open 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-08-23T02:07:39.655809" elapsed="0.000271"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-08-23T02:07:39.656311" elapsed="0.000167"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:07:39.648338" elapsed="0.008224"/>
</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-08-23T02:07:39.293581" elapsed="0.363240"/>
</kw>
<msg time="2026-08-23T02:07:39.656963" 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-08-23T02:07:39.292754" elapsed="0.364273"/>
</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-08-23T02:07:39.292290" elapsed="0.364819"/>
</kw>
<msg time="2026-08-23T02:07:39.657150" 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-08-23T02:07:39.291752" elapsed="0.365443"/>
</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-08-23T02:07:39.659676" elapsed="0.000353"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-08-23T02:07:39.660182" elapsed="0.000147"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-08-23T02:07:39.660467" 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-08-23T02:07:39.657476" elapsed="0.003136"/>
</kw>
<msg time="2026-08-23T02:07:39.660707" 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-08-23T02:07:39.290953" elapsed="0.369779"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:39.661360" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:07:39.661101" elapsed="0.000301"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-23T02:07:39.661445" elapsed="0.000030"/>
</return>
<arg>command=${command}</arg>
<arg>member_index=${index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-08-23T02:07:39.290103" elapsed="0.371467"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:07:39.289939" elapsed="0.371670"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:07:39.289792" elapsed="0.371858"/>
</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-08-23T02:07:39.286281" elapsed="0.375427"/>
</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-08-23T02:07:39.661868" elapsed="0.000213"/>
</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-08-23T02:07:39.674736" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:39.674617" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:39.674594" elapsed="0.000214"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:39.675137" 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-08-23T02:07:39.675243" 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-08-23T02:07:39.674983" elapsed="0.000286"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:39.675674" level="INFO">{}</msg>
<arg>${connection_index_dict}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:07:39.675410" elapsed="0.000309"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:39.676199" level="INFO">1</msg>
<arg>${member_index}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:07:39.675951" elapsed="0.000293"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:07:39.677072" 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-08-23T02:07:39.676816" elapsed="0.000378">Dictionary does not contain key '1'.</status>
</kw>
<msg time="2026-08-23T02:07:39.677326" level="INFO">${status} = FAIL</msg>
<msg time="2026-08-23T02:07:39.677387" 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-08-23T02:07:39.676390" elapsed="0.001026"/>
</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-08-23T02:07:39.677778" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:39.677508" elapsed="0.000393"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:39.677486" elapsed="0.000451"/>
</if>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:07:39.678770" level="INFO">${ip_address} = 10.30.170.114</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-08-23T02:07:39.678492" elapsed="0.000309"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-08-23T02:07:39.678875" elapsed="0.000032"/>
</return>
<msg time="2026-08-23T02:07:39.679030" level="INFO">${odl_ip} = 10.30.170.114</msg>
<var>${odl_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-08-23T02:07:39.678220" elapsed="0.000834"/>
</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-08-23T02:07:39.679199" elapsed="0.000417"/>
</kw>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:39.679917" level="INFO">index=18
host=10.30.170.114
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-08-23T02:07:39.680040" level="INFO">${karaf_connection_object} = index=18
host=10.30.170.114
alias=None
port=8101
timeout=10 seconds
newline=

prompt=opendaylight-user
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_err...</msg>
<var>${karaf_connection_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-08-23T02:07:39.679772" elapsed="0.000295"/>
</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-08-23T02:07:39.680209" elapsed="0.002268"/>
</kw>
<kw name="Login" owner="SSHLibrary">
<msg time="2026-08-23T02:07:39.683275" level="INFO">Logging into '10.30.170.114:8101' as 'karaf'.</msg>
<msg time="2026-08-23T02:07:39.855230" 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-08-23T02:07:39.682906" elapsed="0.172559"/>
</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-08-23T02:07:39.860308" elapsed="0.000691"/>
</kw>
<kw name="Open 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-08-23T02:07:39.861230" elapsed="0.000286"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-08-23T02:07:39.861719" elapsed="0.000189"/>
</kw>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:07:39.857121" elapsed="0.004868"/>
</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-08-23T02:07:39.856051" elapsed="0.006004"/>
</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-08-23T02:07:39.674322" elapsed="0.187810"/>
</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-08-23T02:07:39.662804" elapsed="0.199397"/>
</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-08-23T02:07:39.662431" elapsed="0.199849"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:07:39.662295" elapsed="0.200152"/>
</iter>
<var>${index}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="PASS" start="2026-08-23T02:07:39.662143" elapsed="0.200363"/>
</for>
<arg>http_timeout=${http_timeout}</arg>
<doc>Initialize ClusterManagement. Open ssh karaf connections to each ODL.</doc>
<status status="PASS" start="2026-08-23T02:07:39.268608" elapsed="0.593969"/>
</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-08-23T02:07:39.865112" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:39.864987" elapsed="0.000176"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:39.864961" elapsed="0.000227"/>
</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-08-23T02:07:39.869629" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:39.869518" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:39.869500" elapsed="0.000199"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:39.870668" 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-08-23T02:07:39.870272" elapsed="0.000423"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:07:39.871161" 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-08-23T02:07:39.870861" elapsed="0.000326"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:07:39.871232" elapsed="0.000037"/>
</return>
<msg time="2026-08-23T02:07:39.871399" 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-08-23T02:07:39.869944" elapsed="0.001481"/>
</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-08-23T02:07:39.876627" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:39.876515" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:39.876489" elapsed="0.000207"/>
</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-08-23T02:07:39.878060" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:39.877874" elapsed="0.000304"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:39.877825" elapsed="0.000379"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:07:39.878769" level="INFO">${karaf_connection_index} = 18</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-08-23T02:07:39.878340" elapsed="0.000471"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:39.879309" 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-08-23T02:07:39.879062" elapsed="0.000288"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:39.922322" 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 "/ "n "e "t "[78Cc "[A[78Co</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:39.880856" elapsed="0.041615"/>
</kw>
<msg time="2026-08-23T02:07:39.922630" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:07:39.922702" 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-08-23T02:07:39.879567" elapsed="0.043186"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:07:39.989727" level="INFO">"n "f "- "c "s "i "t "- "1 "n "o "d "e "- "g "a "t "e "- "u "s "e "r "f "e "a "t "u "r "e "s "- "a "l "l "- "v "a "n "a "d "i "u "m "/ "t "e "s "t "/ "c "s "i "t "/ "s "u "i "t "e "s "/ "n "e "t "c "o "n "f "/ "M "D "S "A "L "/ "n "o "[78Cr "[A[78Ct
 "h "b "o "u "n "d ". "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-08-23T02:07:39.924286" elapsed="0.065628"/>
</kw>
<msg time="2026-08-23T02:07:39.990068" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:07:39.990141" level="INFO">${message_wait} =  "n "f "- "c "s "i "t "- "1 "n "o "d "e "- "g "a "t "e "- "u "s "e "r "f "e "a "t "u "r "e "s "- "a "l "l "- "v "a "n "a ...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:07:39.923028" elapsed="0.067165"/>
</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-08-23T02:07:39.990698" elapsed="0.000048"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:39.990357" elapsed="0.000517"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:39.990334" elapsed="0.000577"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:39.991597" level="INFO"> "n "f "- "c "s "i "t "- "1 "n "o "d "e "- "g "a "t "e "- "u "s "e "r "f "e "a "t "u "r "e "s "- "a "l "l "- "v "a "n "a "d "i "u "m "/ "t "e "s "t "/ "c "s "i "t "/ "s "u "i "t "e "s "/ "n "e "t "c "o "n "f "/ "M "D "S "A "L "/ "n "o "[78Cr "[A[78Ct
 "h "b "o "u "n "d ". "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-08-23T02:07:39.991049" elapsed="0.000716"/>
</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-08-23T02:07:39.992225" elapsed="0.000047"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:39.991919" elapsed="0.000451"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:39.991898" elapsed="0.000500"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:07:39.992433" elapsed="0.000033"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:07:39.994289" 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-08-23T02:07:39.994807" elapsed="0.000213"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-08-23T02:07:39.995201" elapsed="0.000103"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:07:39.993606" elapsed="0.001808"/>
</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-08-23T02:07:39.992694" elapsed="0.002814"/>
</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-08-23T02:07:39.877486" elapsed="0.118120"/>
</kw>
<msg time="2026-08-23T02:07:39.995698" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:39.995743" level="INFO">${message} =  "n "f "- "c "s "i "t "- "1 "n "o "d "e "- "g "a "t "e "- "u "s "e "r "f "e "a "t "u "r "e "s "- "a "l "l "- "v "a "n "a ...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:07:39.876868" elapsed="0.118913"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:07:39.996012" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:07:39.995903" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:39.995882" elapsed="0.000215"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 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-08-23T02:07:39.996527" 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-08-23T02:07:39.997000" elapsed="0.000026"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:07:39.997074" 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-08-23T02:07:39.876211" elapsed="0.120972"/>
</kw>
<msg time="2026-08-23T02:07:39.997278" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:39.997322" level="INFO">${output} =  "n "f "- "c "s "i "t "- "1 "n "o "d "e "- "g "a "t "e "- "u "s "e "r "f "e "a "t "u "r "e "s "- "a "l "l "- "v "a "n "a ...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:07:39.871793" elapsed="0.125566"/>
</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-08-23T02:07:39.997672" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:39.997434" elapsed="0.000293"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:39.997416" elapsed="0.000334"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:07:39.871660" elapsed="0.126112"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:07:39.871482" elapsed="0.126322"/>
</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-08-23T02:07:39.869201" elapsed="0.128676"/>
</kw>
<doc>Log suite name to karaf log, useful in suite setup.</doc>
<status status="PASS" start="2026-08-23T02:07:39.863188" elapsed="0.134745"/>
</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-08-23T02:07:39.862728" elapsed="0.135247"/>
</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-08-23T02:07:39.263919" elapsed="0.734107"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:07:39.998492" level="INFO">Creating Session using : alias=config, url=http://10.30.170.114:8181/rests/data, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x72b0ed025510&gt;, timeout=None, proxies=None, verify=False,                     debug=0 </msg>
<arg>config</arg>
<arg>http://${ODL_SYSTEM_IP}:${RESTCONFPORT}${REST_API}</arg>
<arg>auth=${AUTH}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="PASS" start="2026-08-23T02:07:39.998166" elapsed="0.000527"/>
</kw>
<doc>Setup resources and create session for Restconf checking.</doc>
<status status="PASS" start="2026-08-23T02:07:39.263617" elapsed="0.735142"/>
</kw>
<test id="s1-s3-s1-t1" name="Connect_To_ODL_Netconf" line="57">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-08-23T02:07:40.002016" elapsed="0.000214"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:07:40.001741" elapsed="0.000594"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:40.003311" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:40.003203" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:40.003184" 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-08-23T02:07:40.007813" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:40.007707" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:40.007689" elapsed="0.000209"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:40.008864" 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-08-23T02:07:40.008469" elapsed="0.000423"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:07:40.009332" 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-08-23T02:07:40.009038" elapsed="0.000320"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:07:40.009402" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:40.009555" 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-08-23T02:07:40.008109" elapsed="0.001471"/>
</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-08-23T02:07:40.014569" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:40.014461" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:40.014442" 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-08-23T02:07:40.015809" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:40.015702" elapsed="0.000177"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:40.015684" elapsed="0.000218"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:07:40.016395" level="INFO">${karaf_connection_index} = 18</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-08-23T02:07:40.016035" elapsed="0.000386"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:40.016810" 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-08-23T02:07:40.016566" elapsed="0.000287"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:40.057970" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:40.017377" elapsed="0.040780"/>
</kw>
<msg time="2026-08-23T02:07:40.058342" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:07:40.058388" 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 "n "e "t "c "o "n "f "...</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-08-23T02:07:40.017003" elapsed="0.041423"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:07:40.116862" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "o "n "n "e "c "t "_ "T "o "_ "O "D "L "_ "N "e "t "c "o "n "f "[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-08-23T02:07:40.059040" elapsed="0.058026"/>
</kw>
<msg time="2026-08-23T02:07:40.117248" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:07:40.117294" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "o "n "n "e "c "t "_ "T "o "_ "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-08-23T02:07:40.058608" elapsed="0.058724"/>
</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-08-23T02:07:40.117699" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:40.117430" elapsed="0.000347"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:40.117401" elapsed="0.000406"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:40.118373" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "o "n "n "e "c "t "_ "T "o "_ "O "D "L "_ "N "e "t "c "o "n "f "[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-08-23T02:07:40.117965" elapsed="0.000478"/>
</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-08-23T02:07:40.118714" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:40.118509" elapsed="0.000280"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:40.118491" elapsed="0.000985"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:07:40.119523" elapsed="0.000040"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${connection_index} is not None</arg>
<arg>SSHLibrary.Switch Connection</arg>
<arg>${connection_index}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:07:40.121882" elapsed="0.000520"/>
</kw>
<kw name="Open 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-08-23T02:07:40.123226" elapsed="0.000515"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-08-23T02:07:40.124554" elapsed="0.000354"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:07:40.120481" elapsed="0.004501"/>
</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-08-23T02:07:40.119859" elapsed="0.005240"/>
</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-08-23T02:07:40.015403" elapsed="0.109796"/>
</kw>
<msg time="2026-08-23T02:07:40.125293" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:40.125338" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "o "n "n "e "c "t "_ "T "o "_ "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-08-23T02:07:40.014777" elapsed="0.110598"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:07:40.125558" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:07:40.125452" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:40.125433" 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-08-23T02:07:40.126278" 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-08-23T02:07:40.126612" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:07:40.126686" 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-08-23T02:07:40.014126" elapsed="0.112669"/>
</kw>
<msg time="2026-08-23T02:07:40.126908" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:40.126953" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "o "n "n "e "c "t "_ "T "o "_ "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-08-23T02:07:40.009950" elapsed="0.117042"/>
</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-08-23T02:07:40.127306" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:40.127069" elapsed="0.000290"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:40.127051" elapsed="0.000331"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:07:40.009805" elapsed="0.117601"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:07:40.009634" elapsed="0.117808"/>
</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-08-23T02:07:40.007319" elapsed="0.120183"/>
</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-08-23T02:07:40.002915" elapsed="0.124669"/>
</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-08-23T02:07:40.002475" elapsed="0.125156"/>
</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-08-23T02:07:39.999557" elapsed="0.128128"/>
</kw>
<kw name="Create_ODL_Netconf_Connection">
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:40.128714" level="INFO">${control} = 22</msg>
<var>${control}</var>
<arg>${host}</arg>
<arg>prompt=${ODL_SYSTEM_PROMPT}</arg>
<arg>timeout=60s</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-08-23T02:07:40.128362" elapsed="0.000378"/>
</kw>
<kw name="Flexible_Controller_Login" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-08-23T02:07:40.130479" level="INFO">Length is 0.</msg>
<msg time="2026-08-23T02:07:40.130556" 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-08-23T02:07:40.130182" elapsed="0.000398"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:07:40.130725" elapsed="0.000333"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-08-23T02:07:40.131927" level="INFO">Logging into '10.30.170.114:22' as 'jenkins'.</msg>
<msg time="2026-08-23T02:07:40.498044" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-186-generic x86_64)

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

 System information as of Sun Aug 23 02:07:23 UTC 2026

  System load:  0.0                Processes:             118
  Usage of /:   13.8% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.114
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

41 updates can be applied immediately.
35 of these updates are standard security updates.
To see these additional updates run: apt list --upgradable

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

New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sun Aug 23 02:07:39 2026 from 10.30.171.240
[?2004h[jenkins@releng-19126-54-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-08-23T02:07:40.131571" elapsed="0.366655"/>
</kw>
<msg time="2026-08-23T02:07:40.498293" 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-08-23T02:07:40.131215" elapsed="0.367147"/>
</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-08-23T02:07:40.129691" elapsed="0.368773"/>
</kw>
<msg time="2026-08-23T02:07:40.498517" 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-08-23T02:07:40.129318" elapsed="0.369246"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-08-23T02:07:40.128948" elapsed="0.369698"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T02:07:40.503107" level="INFO">${ssh_control} = 22</msg>
<arg>${ssh_control}</arg>
<arg>${control}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-23T02:07:40.498828" elapsed="0.004324"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:40.503665" level="INFO">${netconf} = 23</msg>
<var>${netconf}</var>
<arg>${host}</arg>
<arg>prompt=${ODL_SYSTEM_PROMPT}</arg>
<arg>timeout=60s</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-08-23T02:07:40.503316" elapsed="0.000375"/>
</kw>
<kw name="Flexible_Controller_Login" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-08-23T02:07:40.505440" level="INFO">Length is 0.</msg>
<msg time="2026-08-23T02:07:40.505517" 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-08-23T02:07:40.505166" elapsed="0.000375"/>
</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-08-23T02:07:40.505687" elapsed="0.000345"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-08-23T02:07:40.506861" level="INFO">Logging into '10.30.170.114:22' as 'jenkins'.</msg>
<msg time="2026-08-23T02:07:40.839202" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-186-generic x86_64)

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

 System information as of Sun Aug 23 02:07:23 UTC 2026

  System load:  0.0                Processes:             118
  Usage of /:   13.8% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.114
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

41 updates can be applied immediately.
35 of these updates are standard security updates.
To see these additional updates run: apt list --upgradable

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

New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sun Aug 23 02:07:40 2026 from 10.30.171.240
[?2004h[jenkins@releng-19126-54-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-08-23T02:07:40.506535" elapsed="0.332768"/>
</kw>
<msg time="2026-08-23T02:07:40.839369" 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-08-23T02:07:40.506190" elapsed="0.333246"/>
</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-08-23T02:07:40.504678" elapsed="0.334851"/>
</kw>
<msg time="2026-08-23T02:07:40.839578" 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-08-23T02:07:40.504295" elapsed="0.335328"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-08-23T02:07:40.503917" elapsed="0.335780"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T02:07:40.844390" level="INFO">${ssh_netconf} = 23</msg>
<arg>${ssh_netconf}</arg>
<arg>${netconf}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-23T02:07:40.839916" elapsed="0.004520"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T02:07:40.848367" level="INFO">${ssh_port} = 2830</msg>
<arg>${ssh_port}</arg>
<arg>${port}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-23T02:07:40.844590" elapsed="0.003823"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T02:07:40.852282" level="INFO">${ssh_user} = admin</msg>
<arg>${ssh_user}</arg>
<arg>${user}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-23T02:07:40.848564" elapsed="0.003765"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T02:07:40.856468" level="INFO">${ssh_password} = admin</msg>
<arg>${ssh_password}</arg>
<arg>${password}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-23T02:07:40.852479" elapsed="0.004033"/>
</kw>
<doc>Open a netconf connecion to the given machine.</doc>
<status status="PASS" start="2026-08-23T02:07:40.127924" elapsed="0.728649"/>
</kw>
<kw name="Open_ODL_Netconf_Connection">
<kw name="Reopen_ODL_Netconf_Connection">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:40.860010" level="INFO">sshpass -p admin ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no admin@127.0.0.1 -p 2830 -s netconf</msg>
<arg>sshpass -p ${ssh_password} ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no ${ssh_user}\@127.0.0.1 -p ${ssh_port} -s netconf</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:40.857302" elapsed="0.002767"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:41.545670" level="INFO">[?2004lWarning: Permanently added '[127.0.0.1]:2830' (ECDSA) to the list of known hosts.
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
    &lt;capabilities&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults?module=ietf-netconf-with-defaults&amp;amp;revision=2011-06-01&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-tcp-server?module=ietf-tcp-server&amp;amp;revision=2024-10-10&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:iana-ssh-key-exchange-algs?module=iana-ssh-key-exchange-algs&amp;amp;revision=2024-10-16&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:iana-crypt-hash?module=iana-crypt-hash&amp;amp;revision=2014-08-06&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring?module=ietf-netconf-monitoring&amp;amp;revision=2010-10-04&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:netconf-node-topology?module=netconf-node-topology&amp;amp;revision=2025-12-05&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:device:notification?module=odl-device-notification&amp;amp;revision=2024-02-18&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-netconf-nmda?module=ietf-netconf-nmda&amp;amp;revision=2019-01-07&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:netconf:device?module=odl-netconf-device&amp;amp;revision=2025-12-05&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-http-server?module=ietf-http-server&amp;amp;revision=2026-02-04&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-ssh-common?module=ietf-ssh-common&amp;amp;revision=2024-10-10&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:yang:extension:codegen?module=odl-codegen-extensions&amp;amp;revision=2024-06-27&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-yang-library?module=ietf-yang-library&amp;amp;revision=2019-01-04&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-netconf-server?module=ietf-netconf-server&amp;amp;revision=2025-12-04&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:params:xml:ns:yang:aaa?module=aaa&amp;amp;revision=2016-12-14&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-x509-cert-to-name?module=ietf-x509-cert-to-name&amp;amp;revision=2014-12-10&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-yang-patch?module=ietf-yang-patch&amp;amp;revision=2017-02-22&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-origin?module=ietf-origin&amp;amp;revision=2018-02-14&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:params:xml:ns:yang:controller:md:sal:remote?module=sal-remote&amp;amp;revision=2014-01-14&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-ip?module=ietf-ip&amp;amp;revision=2018-02-22&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:iana-http-versions?module=iana-http-versions&amp;amp;revision=2026-02-04&lt;/capability&gt;
        &lt;capability&gt;tag:opendaylight.org,2017:controller:yang:lowlevel:target?module=odl-mdsal-lowlevel-target&amp;amp;revision=2017-02-15&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-yang-metadata?module=ietf-yang-metadata&amp;amp;revision=2016-08-05&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-truststore?module=ietf-truststore&amp;amp;revision=2024-10-10&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:yang:extension:yang-ext?module=yang-ext&amp;amp;revision=2013-07-09&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-purchase?module=car-purchase&amp;amp;revision=2014-08-18&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:netconf:capability:url:1.0?scheme=file&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-netconf-notifications?module=ietf-netconf-notifications&amp;amp;revision=2012-02-06&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-crypto-types?module=ietf-crypto-types&amp;amp;revision=2024-10-10&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-netconf-client?module=ietf-netconf-client&amp;amp;revision=2025-12-04&lt;/capability&gt;
        &lt;capability&gt;tag:opendaylight.org,2017:controller:yang:lowlevel:control?module=odl-mdsal-lowlevel-control&amp;amp;revision=2017-02-15&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:netconf:capability:exi:1.0&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:netconf:base:1.0?module=ietf-netconf&amp;amp;revision=2011-06-01&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-restconf-monitoring?module=ietf-restconf-monitoring&amp;amp;revision=2017-01-26&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-datastores?module=ietf-datastores&amp;amp;revision=2018-02-14&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:yang:aaa:cert:mdsal?module=aaa-cert-mdsal&amp;amp;revision=2016-03-21&lt;/capability&gt;
        &lt;capability&gt;urn:TBD:params:xml:ns:yang:network-topology?module=network-topology&amp;amp;revision=2013-10-21&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-restconf-server?module=ietf-restconf-server&amp;amp;revision=2025-12-04&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-tcp-common?module=ietf-tcp-common&amp;amp;revision=2024-10-10&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:yang:aaa:cert:rpc?module=aaa-cert-rpc&amp;amp;revision=2015-12-15&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-yang-types?module=ietf-yang-types&amp;amp;revision=2013-07-15&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:netconf-node-optional?module=netconf-node-optional&amp;amp;revision=2022-12-25&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:params:xml:ns:yang:controller:md:sal:cluster:admin?module=cluster-admin&amp;amp;revision=2025-01-31&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-restconf-subscribed-notifications?module=ietf-restconf-subscribed-notifications&amp;amp;revision=2019-11-17&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:netconf:capability:candidate:1.0&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-interfaces?module=ietf-interfaces&amp;amp;revision=2018-02-20&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:params:xml:ns:yang:controller:config:distributed-datastore-provider?module=distributed-datastore-provider&amp;amp;revision=2025-01-30&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-tls-client?module=ietf-tls-client&amp;amp;revision=2024-10-10&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:yang:http:client?module=odl-http-client&amp;amp;revision=2026-07-17&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people?module=car-people&amp;amp;revision=2014-08-18&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:controller:basic-rpc-test?module=basic-rpc-test&amp;amp;revision=2016-01-20&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-tls-server?module=ietf-tls-server&amp;amp;revision=2024-10-10&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-netconf-acm?module=ietf-netconf-acm&amp;amp;revision=2018-02-14&lt;/capability&gt;
        &lt;capability&gt;tag:opendaylight.org,2017:controller:yang:lowlevel:common?module=odl-mdsal-lowlevel-common&amp;amp;revision=2017-02-15&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:aaa:password:service:config?module=aaa-password-service-config&amp;amp;revision=2017-06-19&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:params:xml:ns:yang:controller:entity-owners?module=odl-entity-owners&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:yang:aaa:cert?module=aaa-cert&amp;amp;revision=2015-11-26&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-restconf?module=ietf-restconf&amp;amp;revision=2017-01-26&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:people?module=people&amp;amp;revision=2014-08-18&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:yang:quic:common?module=odl-quic-common&amp;amp;revision=2026-04-15&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:iana-ssh-mac-algs?module=iana-ssh-mac-algs&amp;amp;revision=2024-10-16&lt;/capability&gt;
        &lt;capability&gt;config:aaa:authn:encrypt:service:config?module=aaa-encrypt-service-config&amp;amp;revision=2024-02-02&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-keystore?module=ietf-keystore&amp;amp;revision=2024-10-10&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:params:xml:ns:yang:netconf:monitoring?module=odl-netconf-monitoring&amp;amp;revision=2022-07-18&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:netconf:keystore?module=netconf-keystore&amp;amp;revision=2024-07-08&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-yang-schema-mount?module=ietf-yang-schema-mount&amp;amp;revision=2019-01-14&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-ssh-server?module=ietf-ssh-server&amp;amp;revision=2024-10-10&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:yang:http:server?module=odl-http-server&amp;amp;revision=2026-04-15&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-http-client?module=ietf-http-client&amp;amp;revision=2024-02-08&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-ssh-client?module=ietf-ssh-client&amp;amp;revision=2024-10-10&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:netconf:capability:interleave:1.0&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:netconf:notification:1.0?module=notifications&amp;amp;revision=2008-07-14&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:iana-ssh-public-key-algs?module=iana-ssh-public-key-algs&amp;amp;revision=2024-10-16&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:netmod:notification?module=nc-notifications&amp;amp;revision=2008-07-14&lt;/capability&gt;
        &lt;capability&gt;urn:sal:restconf:event:subscription?module=sal-remote-augment&amp;amp;revision=2023-11-03&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:params:xml:ns:yang:controller:cds:types?module=odl-controller-cds-types&amp;amp;revision=2025-01-31&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-network-instance?module=ietf-network-instance&amp;amp;revision=2019-01-21&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-tls-common?module=ietf-tls-common&amp;amp;revision=2024-10-10&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:aaa:app:config?module=aaa-app-config&amp;amp;revision=2017-06-19&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:netconf:base:1.1&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:params:xml:ns:yang:mdsal:core:general-entity?module=odl-general-entity&amp;amp;revision=2015-09-30&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:netconf:base:1.0&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-udp-server?module=ietf-udp-server&amp;amp;revision=2025-12-16&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:netconf:capability:notification:1.0&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-udp-client?module=ietf-udp-client&amp;amp;revision=2025-12-16&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car?module=car&amp;amp;revision=2014-08-18&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:iana-ssh-encryption-algs?module=iana-ssh-encryption-algs&amp;amp;revision=2024-10-16&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-inet-types?module=ietf-inet-types&amp;amp;revision=2013-07-15&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-tcp-client?module=ietf-tcp-client&amp;amp;revision=2024-10-10&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-subscribed-notifications?module=ietf-subscribed-notifications&amp;amp;revision=2019-09-09&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:iana-tls-cipher-suite-algs?module=iana-tls-cipher-suite-algs&amp;amp;revision=2024-10-16&lt;/capability&gt;
    &lt;/capabilities&gt;
    &lt;session-id&gt;1&lt;/session-id&gt;
&lt;/hello&gt;
]]&gt;]]&gt;</msg>
<msg time="2026-08-23T02:07:41.546193" level="INFO">${hello} = [?2004lWarning: Permanently added '[127.0.0.1]:2830' (ECDSA) to the list of known hosts.
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;hello xmlns="urn:ietf:params:xml:ns:netconf:base:1...</msg>
<var>${hello}</var>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:40.860216" elapsed="0.686010"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${ssh_control}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-23T02:07:41.546470" elapsed="0.000190"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-23T02:07:41.546938" level="INFO">Executing command 'ps -A | grep sshpass | awk '{print $1}''.</msg>
<msg time="2026-08-23T02:07:41.570554" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-23T02:07:41.570765" level="INFO">${pid} = 4474</msg>
<var>${pid}</var>
<arg>ps -A | grep sshpass | awk '{print $1}'</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-23T02:07:41.546811" elapsed="0.024009"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T02:07:41.572151" level="INFO">${ssh_netconf_pid} = 4474</msg>
<arg>${ssh_netconf_pid}</arg>
<arg>${pid}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-23T02:07:41.571219" elapsed="0.001029"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${ssh_netconf}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-23T02:07:41.572570" elapsed="0.000329"/>
</kw>
<return>
<value>${hello}</value>
<status status="PASS" start="2026-08-23T02:07:41.573010" elapsed="0.000086"/>
</return>
<msg time="2026-08-23T02:07:41.573388" level="INFO">${hello} = [?2004lWarning: Permanently added '[127.0.0.1]:2830' (ECDSA) to the list of known hosts.
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;hello xmlns="urn:ietf:params:xml:ns:netconf:base:1...</msg>
<var>${hello}</var>
<doc>Reopen a closed netconf connection.</doc>
<status status="PASS" start="2026-08-23T02:07:40.857049" elapsed="0.716403"/>
</kw>
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:41.575041" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/hello.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/hello.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:41.575439" level="INFO">${data} = &lt;hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
&lt;capabilities&gt;
&lt;capability&gt;urn:ietf:params:netconf:base:1.0&lt;/capability&gt;
&lt;/capabilities&gt;
&lt;/hello&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:41.574517" elapsed="0.000987"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:41.575607" elapsed="0.000062"/>
</return>
<msg time="2026-08-23T02:07:41.575979" level="INFO">${hello_message} = &lt;hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
&lt;capabilities&gt;
&lt;capability&gt;urn:ietf:params:netconf:base:1.0&lt;/capability&gt;
&lt;/capabilities&gt;
&lt;/hello&gt;
</msg>
<var>${hello_message}</var>
<arg>hello</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:41.573817" elapsed="0.002224"/>
</kw>
<kw name="Transmit_Message">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:41.579676" level="INFO">&lt;hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;</msg>
<arg>${message}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:41.577045" elapsed="0.002757"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:41.580927" level="INFO">&lt;capabilities&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:41.580143" elapsed="0.000899"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:41.583340" level="INFO">&lt;capability&gt;urn:ietf:params:netconf:base:1.0&lt;/capability&gt;
&lt;/capabilities&gt;
&lt;/hello&gt;

]]&gt;]]&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:41.581392" elapsed="0.002005"/>
</kw>
<arg>${hello_message}</arg>
<doc>Transmit message to Netconf connection and discard the echo of the message.</doc>
<status status="PASS" start="2026-08-23T02:07:41.576341" elapsed="0.007114"/>
</kw>
<return>
<value>${hello}</value>
<status status="PASS" start="2026-08-23T02:07:41.583495" elapsed="0.000029"/>
</return>
<doc>Open a prepared netconf connecion.</doc>
<status status="PASS" start="2026-08-23T02:07:40.856742" elapsed="0.726880"/>
</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-08-23T02:07:41.584922" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:41.584503" elapsed="0.000481"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:41.584480" elapsed="0.000530"/>
</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-08-23T02:07:41.585146" elapsed="0.000334"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:07:41.590336" 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-08-23T02:07:41.589919" elapsed="0.000444"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-08-23T02:07:41.590581" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:07:41.590436" elapsed="0.000202"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:41.590417" elapsed="0.000245"/>
</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-08-23T02:07:41.590802" 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-08-23T02:07:41.590981" 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-08-23T02:07:41.591141" 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-08-23T02:07:41.591333" 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-08-23T02:07:41.591487" 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-08-23T02:07:41.591639" 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-08-23T02:07:41.591789" 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-08-23T02:07:41.589601" elapsed="0.002278"/>
</kw>
<status status="PASS" start="2026-08-23T02:07:41.584283" elapsed="0.007648"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-08-23T02:07:41.583910" elapsed="0.008061"/>
</kw>
<doc>Connect to ODL Netconf and fail if that is not possible.</doc>
<status status="PASS" start="2026-08-23T02:07:39.998872" elapsed="1.593140"/>
</test>
<test id="s1-s3-s1-t2" name="Get_Config_Running" line="62">
<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-08-23T02:07:41.595173" elapsed="0.000211"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:07:41.594922" elapsed="0.000516"/>
</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-08-23T02:07:41.596397" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:41.596287" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:41.596268" 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-08-23T02:07:41.600936" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:41.600813" elapsed="0.000169"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:41.600794" elapsed="0.000210"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:41.601998" 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-08-23T02:07:41.601594" elapsed="0.000430"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:07:41.602463" 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-08-23T02:07:41.602170" elapsed="0.000318"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:07:41.602532" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:07:41.602690" 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-08-23T02:07:41.601234" elapsed="0.001481"/>
</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-08-23T02:07:41.607987" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:41.607877" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:41.607857" elapsed="0.000200"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:41.609281" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:41.609174" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:41.609156" elapsed="0.000193"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:07:41.609867" level="INFO">${karaf_connection_index} = 18</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-08-23T02:07:41.609483" elapsed="0.000412"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:41.610286" level="INFO">${current_connection_index} = 23</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-08-23T02:07:41.610039" elapsed="0.000273"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:41.651934" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:41.610851" elapsed="0.041312"/>
</kw>
<msg time="2026-08-23T02:07:41.652373" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:07:41.652430" 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 "n "e "t "c "o "n "f "...</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-08-23T02:07:41.610458" elapsed="0.042020"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:07:41.676640" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "G "e "t "_ "C "o "n "f "i "g "_ "R "u "n "n "i "n "g "[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-08-23T02:07:41.653289" elapsed="0.023583"/>
</kw>
<msg time="2026-08-23T02:07:41.677071" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:07:41.677119" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "G "e "t "_ "C "o "n "f "i "g "_ "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-08-23T02:07:41.652685" elapsed="0.024471"/>
</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-08-23T02:07:41.677471" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:41.677243" elapsed="0.000306"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:41.677221" elapsed="0.000354"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:41.678114" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "G "e "t "_ "C "o "n "f "i "g "_ "R "u "n "n "i "n "g "[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-08-23T02:07:41.677711" elapsed="0.000471"/>
</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-08-23T02:07:41.678451" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:41.678248" elapsed="0.000278"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:41.678230" elapsed="0.000321"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:07:41.678585" elapsed="0.000034"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-23T02:07:41.681629" elapsed="0.000154"/>
</kw>
<msg time="2026-08-23T02:07:41.681884" 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-08-23T02:07:41.680887" elapsed="0.001101"/>
</kw>
<kw name="Open 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-08-23T02:07:41.682773" elapsed="0.000037"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:41.683636" elapsed="0.000036"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:07:41.679473" elapsed="0.004278"/>
</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-08-23T02:07:41.678890" elapsed="0.005145"/>
</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-08-23T02:07:41.608861" elapsed="0.075274"/>
</kw>
<msg time="2026-08-23T02:07:41.684229" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:41.684274" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "G "e "t "_ "C "o "n "f "i "g "_ "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-08-23T02:07:41.608197" elapsed="0.076114"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:07:41.684494" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:07:41.684388" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:41.684369" elapsed="0.000208"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:41.684982" 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-08-23T02:07:41.685306" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:07:41.685377" 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-08-23T02:07:41.607522" elapsed="0.077963"/>
</kw>
<msg time="2026-08-23T02:07:41.685581" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:41.685626" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "G "e "t "_ "C "o "n "f "i "g "_ "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-08-23T02:07:41.603100" elapsed="0.082564"/>
</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-08-23T02:07:41.686058" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:41.685738" elapsed="0.000373"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:41.685721" elapsed="0.000414"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:07:41.602969" elapsed="0.083189"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:07:41.602772" elapsed="0.083463"/>
</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-08-23T02:07:41.600455" elapsed="0.085842"/>
</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-08-23T02:07:41.595999" elapsed="0.090354"/>
</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-08-23T02:07:41.595574" elapsed="0.090824"/>
</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-08-23T02:07:41.592929" elapsed="0.093522"/>
</kw>
<kw name="Check_Test_Objects_Not_Present_In_Config">
<kw name="Load_And_Send_Message">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:41.687989" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/get-config-request.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/get-config-request.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:41.688220" level="INFO">${data} = &lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="empty"&gt;
    &lt;get-config&gt;
        &lt;source&gt;
            &lt;running/&gt;
        &lt;/source&gt;
    &lt;/get-config&gt;
&lt;/rpc&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:41.687533" elapsed="0.000717"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:41.688298" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:41.688448" level="INFO">${request} = &lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="empty"&gt;
    &lt;get-config&gt;
        &lt;source&gt;
            &lt;running/&gt;
        &lt;/source&gt;
    &lt;/get-config&gt;
&lt;/rpc&gt;
</msg>
<var>${request}</var>
<arg>${name}-request</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:41.687204" elapsed="0.001272"/>
</kw>
<kw name="Send_Message">
<kw name="Transmit_Message">
<kw name="Write" owner="SSHLibrary">
<arg>${message}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:41.689228" elapsed="0.000296"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:41.691387" level="INFO">&lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="empty"&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:41.689676" elapsed="0.001768"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:41.692831" level="INFO">&lt;get-config&gt;
        &lt;source&gt;
            &lt;running/&gt;
        &lt;/source&gt;
    &lt;/get-config&gt;
&lt;/rpc&gt;

]]&gt;]]&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:41.691589" elapsed="0.001308"/>
</kw>
<arg>${message}</arg>
<doc>Transmit message to Netconf connection and discard the echo of the message.</doc>
<status status="PASS" start="2026-08-23T02:07:41.688934" elapsed="0.004019"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:41.757545" level="INFO">&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="empty"&gt;
    &lt;data&gt;
        &lt;aaa-encrypt-service-config xmlns="config:aaa:authn:encrypt:service:config"&gt;
            &lt;encrypt-type&gt;AES&lt;/encrypt-type&gt;
            &lt;encrypt-key-length&gt;128&lt;/encrypt-key-length&gt;
            &lt;password-length&gt;12&lt;/password-length&gt;
            &lt;cipher-transforms&gt;AES/GCM/NoPadding&lt;/cipher-transforms&gt;
            &lt;encrypt-key&gt;svW8eCV45iNA&lt;/encrypt-key&gt;
            &lt;encrypt-salt&gt;szGsvGrFGnYbd9nd1t9nEw==&lt;/encrypt-salt&gt;
            &lt;auth-tag-length&gt;128&lt;/auth-tag-length&gt;
            &lt;encrypt-method&gt;PBKDF2WithHmacSHA1&lt;/encrypt-method&gt;
            &lt;encrypt-iteration-count&gt;32768&lt;/encrypt-iteration-count&gt;
        &lt;/aaa-encrypt-service-config&gt;
        &lt;key-stores xmlns="urn:opendaylight:yang:aaa:cert:mdsal"&gt;
            &lt;id&gt;KeyStores:1&lt;/id&gt;
            &lt;ssl-data&gt;
                &lt;bundle-name&gt;opendaylight&lt;/bundle-name&gt;
                &lt;tls-protocols/&gt;
                &lt;odl-keystore&gt;
                    &lt;store-password&gt;szGsvGrFGnYbd9nd1t9nE/fx+V2RdCDYC56eieY+0NUj2isn/xZEgHOUDk8=&lt;/store-password&gt;
                    &lt;sign-alg&gt;SHA1WithRSAEncryption&lt;/sign-alg&gt;
                    &lt;validity&gt;365&lt;/validity&gt;
                    &lt;alias&gt;controller&lt;/alias&gt;
                    &lt;name&gt;ctl.jks&lt;/name&gt;
                    &lt;dname&gt;CN=ODL, OU=Dev, O=LinuxFoundation, L=QC Montreal, C=CA&lt;/dname&gt;
                    &lt;keystoreFile&gt;szGsvGrFGnYbd9nd1t9nE0JpQtr6AxLteOf9yUIRItqLm3NkTNx/el6TA99g1gQs8oNL0ip4IPpl4rt7rFRRPPBAYfnI5Hkh+b8tHGDNwygXVh0qPTd02Ju1oPl0gQiXDeG3LxTe8oV0ONxVMiVDPRLInTiudW5V+NAL0c/qNo47UDfypSDuyY7eUL/QqoheS+TBVtkEivw2fS5E+lNKVmSRnedcKds+JRGqsn0ie6kCPmdOS26Zo5s8D6M2tT+r5in4jHovTq6a3RAmy5ZEJJbHJx/m+Y3778MRBkcD2nV3THNE3WXHfY8z+tUfGap/IGFvqumYYtRL35QgVchzJa3JZ2mMxPc2WLe5i2J1nYXYU6QDbT3UoksnTVzBRz0eznEzQQs47v/7gSOqx+Xug8kld3PASYNi5fZD0YmZGe+lI8ON47+4URudcRM9QmzWRu2LhIpGk8Fk0ueaJh5QF0VbVHat5S7fi1fkSNf2wHTs2pFv75hWSsg+7KDTAgfExMImhBPJ+pc8raT7kLEYiBPXy8NMvlDSksgfvSIcyyharJNj8wtxEFkBVWeX0SFzwlZy9oICi+li5ZM8WhSAbtBGTbpBJ9ADwg8WZo7uznJx+rhIUrjoziNRYqUVp/euIq6rjbE/k6jZCtKTP/qoqy0lShP6M9GfuB6O1akHdOHMWOqX2Q6G8qdVPuyAshiJrIthlJEiY5LX8xhXOQDAuGvwB5hFN/aXa0bMksLEHsTKpXSRnhLCJQxzrKpSSIuQqMzsDUQJQMzch1NGpbSFDwOySU5aeyvsTo4AYPT6Xf6YhGsYDk39B6R/CFsBVO13/4SfkiINKvhpYwQ/vfftmmF/7SXYXp/YR7nffSZTr1ooWJHAaGzqAQw+it9HIaJd7IqTROyhS23F00eX3h/OVwbsBB6PmGXh0LvOoCEfctsl0hTpnouPExetsGBZ7dfPpQIK5UiizhBZjKfr1N3dRVawGP2tFckp3xB0Fr3W8nqRCcWxi5oDGtKcK+z5LinRpCeurFbtZwatTqgh1o/KRXdpQ9E+QmJuyIUnIjoxwuFejwHujtyJR+uAvC90T+G09PnaaMGALkmiJ3kiDn5waQup2qhptMUuF1ZjNirqcbAh7MoEtU02PCQAlBmV0D9Uvp/q9Iw3EFmWhfNT8w/Y03VHw2AK7DY94gJq0vmVUD96ahn4UvWXL5CjFyzXD8ikqdV0fx3zamP53xl6LhQUwBWwiaZVZ6qpfmuSfHRBoOKn5FGmIVpQtgs1i2OYsf8CFMdds6HkzCU9ZR5bcNIUz3U7KzxhaZNpj+tBPjCe5knbuvODRT9AIIZr5NL8zkfLG0R/DySEUJEP9MZFDzaYKqwZUQK9u9lyxXBdRZ/nJJVpYkbOdjraUZOn2wX1MOv768TylMxft2elpWtyo51E7XJca0zO3FT+T6dEDLNuLf70Tjf4ZKlXIs+rbMZRzJiNPU/gOOCncjGnQg7yVNt6CXFzLloYDKyI1+nXar0j8Y7aLeRw4ANqfONtf/a/feF1rxUgkr9kpwha7YR6ZbwLsgEqRGQ1yP0UUYTN4tW9P1fKN220ZErjmNLf5y9d4E1kw0JC9Aowy1OIPHC+GoIH2GXmLp6xrwtvDNX0N9GVVtWxGfdOuRunqus5wncxwKSsJHEV7gC7CttHVSQuYxf+qSVzxDZdZhrEFRDM+2ehQr+jYPjBFDfrFrZ6APcuc6eG8uNgDwFBIT/AvuHqnX/J/C5nmpguP7J8i+L6Tq/vaE06wHDJDHx4janBzQWz38QKtnFFVvSuYlPq4xpjc4XL0w==&lt;/keystoreFile&gt;
                    &lt;key-alg&gt;RSA&lt;/key-alg&gt;
                    &lt;keysize&gt;1024&lt;/keysize&gt;
                &lt;/odl-keystore&gt;
                &lt;cipher-suites&gt;
                    &lt;suiteName/&gt;
                &lt;/cipher-suites&gt;
                &lt;trust-keystore&gt;
                    &lt;keystoreFile&gt;szGsvGrFGnYbd9nd1t9nE0JpQtr6AxLteOf9yIktC+veMTpJpq+B4qQuq9ISdPV1uRcHSk71SvQM3Yb0MmEuAA==&lt;/keystoreFile&gt;
                    &lt;store-password&gt;szGsvGrFGnYbd9nd1t9nE/re1XnJbnW5IKOJusQBPKYGj7gRRA5Mm2KIwp4=&lt;/store-password&gt;
                    &lt;name&gt;truststore.jks&lt;/name&gt;
                &lt;/trust-keystore&gt;
            &lt;/ssl-data&gt;
        &lt;/key-stores&gt;
    &lt;/data&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<msg time="2026-08-23T02:07:41.757724" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="empty"&gt;
    &lt;data&gt;
        &lt;aaa-encrypt-service-config xmlns="config:...</msg>
<var>${reply}</var>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:41.693088" elapsed="0.064665"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:41.757804" elapsed="0.000044"/>
</return>
<msg time="2026-08-23T02:07:41.757978" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="empty"&gt;
    &lt;data&gt;
        &lt;aaa-encrypt-service-config xmlns="config:...</msg>
<var>${reply}</var>
<arg>${request}</arg>
<doc>Send message to Netconf connection and get the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:41.688622" elapsed="0.069403"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:41.758070" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:07:41.758214" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="empty"&gt;
    &lt;data&gt;
        &lt;aaa-encrypt-service-config xmlns="config:...</msg>
<var>${reply}</var>
<arg>${name}</arg>
<doc>Load a message from the data file set, send it to Netconf and return the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:41.686912" elapsed="0.071330"/>
</kw>
<kw name="Check_Test_Objects_Absent">
<kw name="Check_First_Batch_Data_Not_Present">
<kw name="Check_First_Batch_Data">
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;TOY001&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:41.759756" elapsed="0.000346"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;TOY001&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:41.759311" elapsed="0.000847"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CUST001&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:41.760721" elapsed="0.000331"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;CUST001&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:41.760302" elapsed="0.000805"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;car-id&gt;TOY001&lt;/car-id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:41.761669" elapsed="0.000312"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;car-id&gt;TOY001&lt;/car-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:41.761251" elapsed="0.000785"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUST001&lt;/person-id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:41.762592" elapsed="0.000299"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUST001&lt;/person-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:41.762178" elapsed="0.000766"/>
</kw>
<arg>${reply}</arg>
<arg>BuiltIn.Should_Not_Contain</arg>
<status status="PASS" start="2026-08-23T02:07:41.758993" elapsed="0.004008"/>
</kw>
<arg>${reply}</arg>
<status status="PASS" start="2026-08-23T02:07:41.758681" elapsed="0.004368"/>
</kw>
<kw name="Check_Second_Batch_Data">
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;OLD001&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:41.763938" elapsed="0.000284"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;OLD001&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:41.763501" elapsed="0.000775"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CUST002&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:41.764828" elapsed="0.000297"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;CUST002&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:41.764416" elapsed="0.000763"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;car-id&gt;OLD001&lt;/car-id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:41.765726" elapsed="0.000326"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;car-id&gt;OLD001&lt;/car-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:41.765317" elapsed="0.000789"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUST002&lt;/person-id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:41.766657" elapsed="0.000299"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUST002&lt;/person-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:41.766245" elapsed="0.000765"/>
</kw>
<arg>${reply}</arg>
<arg>BuiltIn.Should_not_Contain</arg>
<status status="PASS" start="2026-08-23T02:07:41.763180" elapsed="0.003938"/>
</kw>
<kw name="Check_Multiple_Batch_Data_Absent">
<kw name="Check_Multiple_Batch_Data">
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CAROLD&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:41.768377" elapsed="0.000473"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;CAROLD&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:41.767951" elapsed="0.000958"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CUSTOLD&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:41.769473" elapsed="0.000286"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;CUSTOLD&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:41.769053" elapsed="0.000812"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;car-id&gt;CAROLD&lt;/car-id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:41.770429" elapsed="0.000286"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;car-id&gt;CAROLD&lt;/car-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:41.770010" elapsed="0.000758"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUSTOLD&lt;/person-id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:41.771390" elapsed="0.000282"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUSTOLD&lt;/person-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:41.770972" elapsed="0.000755"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CARYOUNG&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:41.772302" elapsed="0.000288"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;CARYOUNG&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:41.771885" elapsed="0.000759"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CUSTYOUNG&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:41.773230" elapsed="0.000281"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;CUSTYOUNG&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:41.772785" elapsed="0.000780"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;car-id&gt;CARYOUNG&lt;/car-id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:41.774164" elapsed="0.000281"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;car-id&gt;CARYOUNG&lt;/car-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:41.773716" elapsed="0.000783"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUSTYOUNG&lt;/person-id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:41.775072" elapsed="0.000282"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUSTYOUNG&lt;/person-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:41.774641" elapsed="0.000846"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CARMID&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:41.776065" elapsed="0.000281"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;CARMID&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:41.775633" elapsed="0.000768"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CUSTMID&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:41.776999" elapsed="0.000285"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;CUSTMID&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:41.776542" elapsed="0.000796"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;car-id&gt;CARMID&lt;/car-id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:41.777945" elapsed="0.000284"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;car-id&gt;CARMID&lt;/car-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:41.777478" elapsed="0.000805"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUSTMID&lt;/person-id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:41.778865" elapsed="0.000287"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUSTMID&lt;/person-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:41.778425" elapsed="0.000782"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CAROLD2&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:41.779764" elapsed="0.000301"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;CAROLD2&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:41.779348" elapsed="0.000771"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CUSTOLD2&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:41.780676" elapsed="0.000353"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;CUSTOLD2&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:41.780261" elapsed="0.000825"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;car-id&gt;CAROLD2&lt;/car-id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:41.781657" elapsed="0.000317"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;car-id&gt;CAROLD2&lt;/car-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:41.781229" elapsed="0.000801"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUSTOLD2&lt;/person-id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:41.782589" elapsed="0.000298"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUSTOLD2&lt;/person-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:41.782171" elapsed="0.000770"/>
</kw>
<arg>${reply}</arg>
<arg>BuiltIn.Should_not_Contain</arg>
<status status="PASS" start="2026-08-23T02:07:41.767611" elapsed="0.015386"/>
</kw>
<arg>${reply}</arg>
<status status="PASS" start="2026-08-23T02:07:41.767239" elapsed="0.015807"/>
</kw>
<kw name="Check_Auxiliary_Data">
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CUSTBAD&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:41.783922" elapsed="0.000286"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;CUSTBAD&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:41.783488" elapsed="0.000775"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;test&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:41.784819" elapsed="0.000299"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;test&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:41.784404" elapsed="0.000810"/>
</kw>
<arg>${reply}</arg>
<arg>BuiltIn.Should_not_Contain</arg>
<status status="PASS" start="2026-08-23T02:07:41.783168" elapsed="0.002104"/>
</kw>
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;test&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:41.785406" elapsed="0.000322"/>
</kw>
<arg>${reply}</arg>
<status status="PASS" start="2026-08-23T02:07:41.758394" elapsed="0.027397"/>
</kw>
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;REPLACE&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:41.785952" elapsed="0.000305"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:41.786309" elapsed="0.000029"/>
</return>
<arg>get-config</arg>
<doc>Use dataset with the specified name to get the configuration and check that none of our test objects are there.</doc>
<status status="PASS" start="2026-08-23T02:07:41.686614" elapsed="0.099820"/>
</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-08-23T02:07:41.787656" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:41.787285" elapsed="0.000433"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:41.787265" 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-08-23T02:07:41.787892" elapsed="0.000308"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:07:41.793012" 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-08-23T02:07:41.792578" elapsed="0.000461"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-08-23T02:07:41.793257" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:07:41.793114" elapsed="0.000208"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:41.793096" elapsed="0.000251"/>
</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-08-23T02:07:41.793482" 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-08-23T02:07:41.793641" 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-08-23T02:07:41.793799" 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-08-23T02:07:41.793979" 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-08-23T02:07:41.794131" 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-08-23T02:07:41.794281" 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-08-23T02:07:41.794431" 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-08-23T02:07:41.792284" elapsed="0.002221"/>
</kw>
<status status="PASS" start="2026-08-23T02:07:41.787056" elapsed="0.007498"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-08-23T02:07:41.786690" elapsed="0.007907"/>
</kw>
<doc>Make sure the configuration has only the default elements in it.</doc>
<status status="PASS" start="2026-08-23T02:07:41.592398" elapsed="0.202240"/>
</test>
<test id="s1-s3-s1-t3" name="Missing_Message_ID_Attribute" line="66">
<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-08-23T02:07:41.797787" elapsed="0.000234"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:07:41.797539" 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-08-23T02:07:41.799024" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:41.798914" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:41.798894" 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-08-23T02:07:41.803511" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:41.803404" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:41.803386" elapsed="0.000192"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:41.804560" 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-08-23T02:07:41.804177" elapsed="0.000447"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:07:41.805111" 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-08-23T02:07:41.804774" elapsed="0.000365"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:07:41.805183" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:07:41.805338" 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-08-23T02:07:41.803790" elapsed="0.001573"/>
</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-08-23T02:07:41.810576" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:41.810468" elapsed="0.000160"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:41.810448" 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-08-23T02:07:41.811818" elapsed="0.000037"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:41.811714" elapsed="0.000175"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:41.811695" elapsed="0.000216"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:07:41.812400" level="INFO">${karaf_connection_index} = 18</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-08-23T02:07:41.812043" elapsed="0.000383"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:41.812812" level="INFO">${current_connection_index} = 23</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-08-23T02:07:41.812570" elapsed="0.000285"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:41.846278" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:41.813402" elapsed="0.033049"/>
</kw>
<msg time="2026-08-23T02:07:41.846621" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:07:41.846667" 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 "n "e "t "c "o "n "f "...</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-08-23T02:07:41.813024" elapsed="0.033679"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:07:41.868276" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "M "i "s "s "i "n "g "_ "M "e "s "s "a "g "e "_ "I "D "_ "A "t "t "r "i "b "u "t "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-08-23T02:07:41.847258" elapsed="0.021226"/>
</kw>
<msg time="2026-08-23T02:07:41.868668" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:07:41.868715" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "M "i "s "s "i "n "g "_ "M "e "s "s ...</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-08-23T02:07:41.846878" elapsed="0.021874"/>
</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-08-23T02:07:41.869072" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:41.868852" elapsed="0.000296"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:41.868808" elapsed="0.000365"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:41.869683" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "M "i "s "s "i "n "g "_ "M "e "s "s "a "g "e "_ "I "D "_ "A "t "t "r "i "b "u "t "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-08-23T02:07:41.869311" elapsed="0.000441"/>
</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-08-23T02:07:41.870039" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:41.869818" elapsed="0.000297"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:41.869800" elapsed="0.000339"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:07:41.870174" 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-08-23T02:07:41.873105" elapsed="0.000148"/>
</kw>
<msg time="2026-08-23T02:07:41.873324" 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-08-23T02:07:41.872451" elapsed="0.000970"/>
</kw>
<kw name="Open 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-08-23T02:07:41.874232" elapsed="0.000037"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:41.875066" elapsed="0.000076"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:07:41.871009" elapsed="0.004217"/>
</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-08-23T02:07:41.870428" elapsed="0.004912"/>
</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-08-23T02:07:41.811416" elapsed="0.064023"/>
</kw>
<msg time="2026-08-23T02:07:41.875538" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:41.875584" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "M "i "s "s "i "n "g "_ "M "e "s "s ...</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-08-23T02:07:41.810790" elapsed="0.064832"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:07:41.875805" elapsed="0.000233"/>
</return>
<status status="PASS" start="2026-08-23T02:07:41.875698" elapsed="0.000380"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:41.875680" elapsed="0.000427"/>
</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-08-23T02:07:41.876485" 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-08-23T02:07:41.876809" elapsed="0.000041"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:07:41.876899" 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-08-23T02:07:41.810127" elapsed="0.066882"/>
</kw>
<msg time="2026-08-23T02:07:41.877103" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:41.877147" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "M "i "s "s "i "n "g "_ "M "e "s "s ...</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-08-23T02:07:41.805721" elapsed="0.071462"/>
</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-08-23T02:07:41.877495" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:41.877258" elapsed="0.000291"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:41.877241" elapsed="0.000332"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:07:41.805592" elapsed="0.072004"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:07:41.805418" elapsed="0.072207"/>
</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-08-23T02:07:41.803051" elapsed="0.074625"/>
</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-08-23T02:07:41.798615" elapsed="0.079115"/>
</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-08-23T02:07:41.798211" elapsed="0.079563"/>
</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-08-23T02:07:41.795556" elapsed="0.082267"/>
</kw>
<kw name="Perform_Test">
<kw name="Load_And_Send_Message">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:41.879332" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/missing-attr-request.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/missing-attr-request.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:41.879563" level="INFO">${data} = &lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
  &lt;get-config&gt;
    &lt;source&gt;
      &lt;running/&gt;
    &lt;/source&gt;
  &lt;/get-config&gt;
&lt;/rpc&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:41.879113" elapsed="0.000482"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:41.879645" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:41.879806" level="INFO">${request} = &lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
  &lt;get-config&gt;
    &lt;source&gt;
      &lt;running/&gt;
    &lt;/source&gt;
  &lt;/get-config&gt;
&lt;/rpc&gt;
</msg>
<var>${request}</var>
<arg>${name}-request</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:41.878613" elapsed="0.001248"/>
</kw>
<kw name="Send_Message">
<kw name="Transmit_Message">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:41.882189" level="INFO">&lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;</msg>
<arg>${message}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:41.880589" elapsed="0.001658"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:41.882748" level="INFO">&lt;get-config&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:41.882390" elapsed="0.000410"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:41.884000" level="INFO">&lt;source&gt;
      &lt;running/&gt;
    &lt;/source&gt;
  &lt;/get-config&gt;
&lt;/rpc&gt;

]]&gt;]]&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:41.882958" elapsed="0.001099"/>
</kw>
<arg>${message}</arg>
<doc>Transmit message to Netconf connection and discard the echo of the message.</doc>
<status status="PASS" start="2026-08-23T02:07:41.880297" elapsed="0.003851"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:41.895427" level="INFO">&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
    &lt;rpc-error&gt;
        &lt;error-type&gt;rpc&lt;/error-type&gt;
        &lt;error-tag&gt;missing-attribute&lt;/error-tag&gt;
        &lt;error-severity&gt;error&lt;/error-severity&gt;
        &lt;error-message&gt;Missing attribute rpc&lt;/error-message&gt;
        &lt;error-info&gt;
            &lt;bad-attribute&gt;message-id&lt;/bad-attribute&gt;
            &lt;bad-element&gt;rpc&lt;/bad-element&gt;
        &lt;/error-info&gt;
    &lt;/rpc-error&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<msg time="2026-08-23T02:07:41.895548" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
    &lt;rpc-error&gt;
        &lt;error-type&gt;rpc&lt;/error-type&gt;
        &lt;error-tag&gt;missing...</msg>
<var>${reply}</var>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:41.884290" elapsed="0.011288"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:41.895626" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:07:41.895774" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
    &lt;rpc-error&gt;
        &lt;error-type&gt;rpc&lt;/error-type&gt;
        &lt;error-tag&gt;missing...</msg>
<var>${reply}</var>
<arg>${request}</arg>
<doc>Send message to Netconf connection and get the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:41.880005" elapsed="0.015798"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:41.895867" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:07:41.896012" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
    &lt;rpc-error&gt;
        &lt;error-type&gt;rpc&lt;/error-type&gt;
        &lt;error-tag&gt;missing...</msg>
<var>${actual}</var>
<arg>${name}</arg>
<doc>Load a message from the data file set, send it to Netconf and return the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:41.878323" elapsed="0.017720"/>
</kw>
<kw name="Load_Expected_Reply">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:41.897008" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/missing-attr-reply.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/missing-attr-reply.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:41.897139" level="INFO">${data} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
&lt;rpc-error&gt;
&lt;error-type&gt;rpc&lt;/error-type&gt;
&lt;error-tag&gt;missing-attribute&lt;/error-tag&gt;
&lt;er...</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:41.896779" elapsed="0.000388"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:41.897214" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:07:41.897362" level="INFO">${expected_reply} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
&lt;rpc-error&gt;
&lt;error-type&gt;rpc&lt;/error-type&gt;
&lt;error-tag&gt;missing-attribute&lt;/error-tag&gt;
&lt;er...</msg>
<var>${expected_reply}</var>
<arg>${name}-reply</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:41.896474" elapsed="0.000916"/>
</kw>
<return>
<value>${expected_reply}</value>
<status status="PASS" start="2026-08-23T02:07:41.897433" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:07:41.897578" level="INFO">${expected} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
&lt;rpc-error&gt;
&lt;error-type&gt;rpc&lt;/error-type&gt;
&lt;error-tag&gt;missing-attribute&lt;/error-tag&gt;
&lt;er...</msg>
<var>${expected}</var>
<arg>${name}</arg>
<doc>Load the expected reply from the data file set and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:41.896181" elapsed="0.001425"/>
</kw>
<kw name="Remove String" owner="String">
<msg time="2026-08-23T02:07:41.897975" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
    &lt;rpc-error&gt;
        &lt;error-type&gt;rpc&lt;/error-type&gt;
        &lt;error-tag&gt;missing...</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>]]&gt;]]&gt;</arg>
<doc>Removes all ``removables`` from the given ``string``.</doc>
<status status="PASS" start="2026-08-23T02:07:41.897751" elapsed="0.000254"/>
</kw>
<kw name="Strip String" owner="String">
<msg time="2026-08-23T02:07:41.898384" level="INFO">${actual} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
    &lt;rpc-error&gt;
        &lt;error-type&gt;rpc&lt;/error-type&gt;
        &lt;error-tag&gt;missing-a...</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>mode=both</arg>
<doc>Remove leading and/or trailing whitespaces from the given string.</doc>
<status status="PASS" start="2026-08-23T02:07:41.898152" elapsed="0.000262"/>
</kw>
<kw name="Elements Should Be Equal" owner="XML">
<arg>${actual}</arg>
<arg>${expected}</arg>
<arg>normalize_whitespace=True</arg>
<doc>Verifies that the given ``source`` element is equal to ``expected``.</doc>
<status status="PASS" start="2026-08-23T02:07:41.898560" elapsed="0.000824"/>
</kw>
<return>
<value>${actual}</value>
<status status="PASS" start="2026-08-23T02:07:41.899453" elapsed="0.000029"/>
</return>
<arg>missing-attr</arg>
<doc>Load and send the request from the dataset and compare the returned reply to the one stored in the dataset.</doc>
<status status="PASS" start="2026-08-23T02:07:41.878023" elapsed="0.021558"/>
</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-08-23T02:07:41.900761" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:41.900398" elapsed="0.000425"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:41.900380" elapsed="0.000484"/>
</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-08-23T02:07:41.900998" elapsed="0.000309"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:07:41.906108" 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-08-23T02:07:41.905693" elapsed="0.000474"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-08-23T02:07:41.906389" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:07:41.906243" elapsed="0.000204"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:41.906225" elapsed="0.000246"/>
</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-08-23T02:07:41.906606" 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-08-23T02:07:41.906764" 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-08-23T02:07:41.906941" 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-08-23T02:07:41.907096" 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-08-23T02:07:41.907248" elapsed="0.000042"/>
</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-08-23T02:07:41.907428" 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-08-23T02:07:41.907589" 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-08-23T02:07:41.905397" elapsed="0.002270"/>
</kw>
<status status="PASS" start="2026-08-23T02:07:41.900189" elapsed="0.007529"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-08-23T02:07:41.899846" elapsed="0.007913"/>
</kw>
<doc>Check that messages with missing "message-ID" attribute are rejected with the correct error (RFC 6241, section 4.1).</doc>
<status status="PASS" start="2026-08-23T02:07:41.794940" elapsed="0.112857"/>
</test>
<test id="s1-s3-s1-t4" name="Additional_Attributes_In_Message" line="70">
<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-08-23T02:07:41.910875" elapsed="0.000210"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:07:41.910612" elapsed="0.000527"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:41.912119" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:41.912010" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:41.911991" elapsed="0.000198"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:41.916600" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:41.916496" elapsed="0.000149"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:41.916478" elapsed="0.000189"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:41.917634" 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-08-23T02:07:41.917259" elapsed="0.000402"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:07:41.918115" 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-08-23T02:07:41.917805" elapsed="0.000335"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:07:41.918185" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:41.918337" 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-08-23T02:07:41.916896" elapsed="0.001466"/>
</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-08-23T02:07:41.923576" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:41.923465" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:41.923445" elapsed="0.000208"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:41.924856" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:41.924725" elapsed="0.000182"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:41.924707" elapsed="0.000222"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:07:41.925419" level="INFO">${karaf_connection_index} = 18</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-08-23T02:07:41.925061" elapsed="0.000385"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:41.925853" level="INFO">${current_connection_index} = 23</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-08-23T02:07:41.925591" elapsed="0.000323"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:41.964756" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:41.926451" elapsed="0.038491"/>
</kw>
<msg time="2026-08-23T02:07:41.965113" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:07:41.965160" 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 "n "e "t "c "o "n "f "...</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-08-23T02:07:41.926067" elapsed="0.039130"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:07:41.994306" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "A "d "d "i "t "i "o "n "a "l "_ "A "t "t "r "i "b "u "t "e "s "_ "I "n "_ "M "e "s "s "a "g "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-08-23T02:07:41.965734" elapsed="0.028756"/>
</kw>
<msg time="2026-08-23T02:07:41.994661" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:07:41.994708" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "A "d "d "i "t "i "o "n "a "l "_ "A ...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:07:41.965355" elapsed="0.029391"/>
</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-08-23T02:07:41.995060" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:41.994824" elapsed="0.000313"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:41.994804" elapsed="0.000358"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:41.995669" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "A "d "d "i "t "i "o "n "a "l "_ "A "t "t "r "i "b "u "t "e "s "_ "I "n "_ "M "e "s "s "a "g "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-08-23T02:07:41.995294" 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-08-23T02:07:41.996028" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:41.995808" elapsed="0.000296"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:41.995791" elapsed="0.000338"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:07:41.996163" 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-08-23T02:07:41.999030" elapsed="0.000146"/>
</kw>
<msg time="2026-08-23T02:07:41.999246" 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-08-23T02:07:41.998370" elapsed="0.000975"/>
</kw>
<kw name="Open 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-08-23T02:07:42.000162" elapsed="0.000037"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:42.000987" elapsed="0.000038"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:07:41.996994" elapsed="0.004109"/>
</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-08-23T02:07:41.996410" elapsed="0.004806"/>
</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-08-23T02:07:41.924424" elapsed="0.076889"/>
</kw>
<msg time="2026-08-23T02:07:42.001406" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:42.001450" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "A "d "d "i "t "i "o "n "a "l "_ "A ...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:07:41.923794" elapsed="0.077693"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:07:42.001668" elapsed="0.000051"/>
</return>
<status status="PASS" start="2026-08-23T02:07:42.001562" elapsed="0.000191"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.001544" 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-08-23T02:07:42.002350" 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-08-23T02:07:42.002667" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:07:42.002738" 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-08-23T02:07:41.923114" elapsed="0.079787"/>
</kw>
<msg time="2026-08-23T02:07:42.002995" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:42.003041" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "A "d "d "i "t "i "o "n "a "l "_ "A ...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:07:41.918707" elapsed="0.084371"/>
</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-08-23T02:07:42.003393" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:42.003155" elapsed="0.000292"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.003137" elapsed="0.000333"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:07:41.918580" elapsed="0.084914"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:07:41.918413" elapsed="0.085110"/>
</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-08-23T02:07:41.916143" elapsed="0.087433"/>
</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-08-23T02:07:41.911699" elapsed="0.091931"/>
</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-08-23T02:07:41.911288" 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-08-23T02:07:41.908668" elapsed="0.095057"/>
</kw>
<kw name="Load_And_Send_Message">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:42.004684" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/additional-attr-request.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/additional-attr-request.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:42.004818" level="INFO">${data} = &lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="1" attribute="something" additional="otherthing" xmlns:prefix="http://www.example.com/my-schema-example.html"&gt;
    &lt;get-config&gt;
       ...</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:42.004471" elapsed="0.000392"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:42.004910" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:42.005058" level="INFO">${request} = &lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="1" attribute="something" additional="otherthing" xmlns:prefix="http://www.example.com/my-schema-example.html"&gt;
    &lt;get-config&gt;
       ...</msg>
<var>${request}</var>
<arg>${name}-request</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:42.004168" elapsed="0.000918"/>
</kw>
<kw name="Send_Message">
<kw name="Transmit_Message">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:42.009971" level="INFO">&lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="1" attribute="something" additional="otherthing" xmlns:prefix="http://www.example.com/my-schema-example.html"&gt;</msg>
<arg>${message}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:42.007335" elapsed="0.002695"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:42.010703" level="INFO">&lt;get-config&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:42.010171" elapsed="0.000586"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:42.012226" level="INFO">&lt;source&gt;
            &lt;running/&gt;
        &lt;/source&gt;
    &lt;/get-config&gt;
&lt;/rpc&gt;

]]&gt;]]&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:42.010913" elapsed="0.001369"/>
</kw>
<arg>${message}</arg>
<doc>Transmit message to Netconf connection and discard the echo of the message.</doc>
<status status="PASS" start="2026-08-23T02:07:42.007036" elapsed="0.005302"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:42.061035" level="INFO">&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:prefix="http://www.example.com/my-schema-example.html" additional="otherthing" attribute="something" message-id="1"&gt;
    &lt;data&gt;
        &lt;aaa-encrypt-service-config xmlns="config:aaa:authn:encrypt:service:config"&gt;
            &lt;encrypt-type&gt;AES&lt;/encrypt-type&gt;
            &lt;encrypt-key-length&gt;128&lt;/encrypt-key-length&gt;
            &lt;password-length&gt;12&lt;/password-length&gt;
            &lt;cipher-transforms&gt;AES/GCM/NoPadding&lt;/cipher-transforms&gt;
            &lt;encrypt-key&gt;svW8eCV45iNA&lt;/encrypt-key&gt;
            &lt;encrypt-salt&gt;szGsvGrFGnYbd9nd1t9nEw==&lt;/encrypt-salt&gt;
            &lt;auth-tag-length&gt;128&lt;/auth-tag-length&gt;
            &lt;encrypt-method&gt;PBKDF2WithHmacSHA1&lt;/encrypt-method&gt;
            &lt;encrypt-iteration-count&gt;32768&lt;/encrypt-iteration-count&gt;
        &lt;/aaa-encrypt-service-config&gt;
        &lt;key-stores xmlns="urn:opendaylight:yang:aaa:cert:mdsal"&gt;
            &lt;id&gt;KeyStores:1&lt;/id&gt;
            &lt;ssl-data&gt;
                &lt;bundle-name&gt;opendaylight&lt;/bundle-name&gt;
                &lt;tls-protocols/&gt;
                &lt;odl-keystore&gt;
                    &lt;store-password&gt;szGsvGrFGnYbd9nd1t9nE/fx+V2RdCDYC56eieY+0NUj2isn/xZEgHOUDk8=&lt;/store-password&gt;
                    &lt;sign-alg&gt;SHA1WithRSAEncryption&lt;/sign-alg&gt;
                    &lt;validity&gt;365&lt;/validity&gt;
                    &lt;alias&gt;controller&lt;/alias&gt;
                    &lt;name&gt;ctl.jks&lt;/name&gt;
                    &lt;dname&gt;CN=ODL, OU=Dev, O=LinuxFoundation, L=QC Montreal, C=CA&lt;/dname&gt;
                    &lt;keystoreFile&gt;szGsvGrFGnYbd9nd1t9nE0JpQtr6AxLteOf9yUIRItqLm3NkTNx/el6TA99g1gQs8oNL0ip4IPpl4rt7rFRRPPBAYfnI5Hkh+b8tHGDNwygXVh0qPTd02Ju1oPl0gQiXDeG3LxTe8oV0ONxVMiVDPRLInTiudW5V+NAL0c/qNo47UDfypSDuyY7eUL/QqoheS+TBVtkEivw2fS5E+lNKVmSRnedcKds+JRGqsn0ie6kCPmdOS26Zo5s8D6M2tT+r5in4jHovTq6a3RAmy5ZEJJbHJx/m+Y3778MRBkcD2nV3THNE3WXHfY8z+tUfGap/IGFvqumYYtRL35QgVchzJa3JZ2mMxPc2WLe5i2J1nYXYU6QDbT3UoksnTVzBRz0eznEzQQs47v/7gSOqx+Xug8kld3PASYNi5fZD0YmZGe+lI8ON47+4URudcRM9QmzWRu2LhIpGk8Fk0ueaJh5QF0VbVHat5S7fi1fkSNf2wHTs2pFv75hWSsg+7KDTAgfExMImhBPJ+pc8raT7kLEYiBPXy8NMvlDSksgfvSIcyyharJNj8wtxEFkBVWeX0SFzwlZy9oICi+li5ZM8WhSAbtBGTbpBJ9ADwg8WZo7uznJx+rhIUrjoziNRYqUVp/euIq6rjbE/k6jZCtKTP/qoqy0lShP6M9GfuB6O1akHdOHMWOqX2Q6G8qdVPuyAshiJrIthlJEiY5LX8xhXOQDAuGvwB5hFN/aXa0bMksLEHsTKpXSRnhLCJQxzrKpSSIuQqMzsDUQJQMzch1NGpbSFDwOySU5aeyvsTo4AYPT6Xf6YhGsYDk39B6R/CFsBVO13/4SfkiINKvhpYwQ/vfftmmF/7SXYXp/YR7nffSZTr1ooWJHAaGzqAQw+it9HIaJd7IqTROyhS23F00eX3h/OVwbsBB6PmGXh0LvOoCEfctsl0hTpnouPExetsGBZ7dfPpQIK5UiizhBZjKfr1N3dRVawGP2tFckp3xB0Fr3W8nqRCcWxi5oDGtKcK+z5LinRpCeurFbtZwatTqgh1o/KRXdpQ9E+QmJuyIUnIjoxwuFejwHujtyJR+uAvC90T+G09PnaaMGALkmiJ3kiDn5waQup2qhptMUuF1ZjNirqcbAh7MoEtU02PCQAlBmV0D9Uvp/q9Iw3EFmWhfNT8w/Y03VHw2AK7DY94gJq0vmVUD96ahn4UvWXL5CjFyzXD8ikqdV0fx3zamP53xl6LhQUwBWwiaZVZ6qpfmuSfHRBoOKn5FGmIVpQtgs1i2OYsf8CFMdds6HkzCU9ZR5bcNIUz3U7KzxhaZNpj+tBPjCe5knbuvODRT9AIIZr5NL8zkfLG0R/DySEUJEP9MZFDzaYKqwZUQK9u9lyxXBdRZ/nJJVpYkbOdjraUZOn2wX1MOv768TylMxft2elpWtyo51E7XJca0zO3FT+T6dEDLNuLf70Tjf4ZKlXIs+rbMZRzJiNPU/gOOCncjGnQg7yVNt6CXFzLloYDKyI1+nXar0j8Y7aLeRw4ANqfONtf/a/feF1rxUgkr9kpwha7YR6ZbwLsgEqRGQ1yP0UUYTN4tW9P1fKN220ZErjmNLf5y9d4E1kw0JC9Aowy1OIPHC+GoIH2GXmLp6xrwtvDNX0N9GVVtWxGfdOuRunqus5wncxwKSsJHEV7gC7CttHVSQuYxf+qSVzxDZdZhrEFRDM+2ehQr+jYPjBFDfrFrZ6APcuc6eG8uNgDwFBIT/AvuHqnX/J/C5nmpguP7J8i+L6Tq/vaE06wHDJDHx4janBzQWz38QKtnFFVvSuYlPq4xpjc4XL0w==&lt;/keystoreFile&gt;
                    &lt;key-alg&gt;RSA&lt;/key-alg&gt;
                    &lt;keysize&gt;1024&lt;/keysize&gt;
                &lt;/odl-keystore&gt;
                &lt;cipher-suites&gt;
                    &lt;suiteName/&gt;
                &lt;/cipher-suites&gt;
                &lt;trust-keystore&gt;
                    &lt;keystoreFile&gt;szGsvGrFGnYbd9nd1t9nE0JpQtr6AxLteOf9yIktC+veMTpJpq+B4qQuq9ISdPV1uRcHSk71SvQM3Yb0MmEuAA==&lt;/keystoreFile&gt;
                    &lt;store-password&gt;szGsvGrFGnYbd9nd1t9nE/re1XnJbnW5IKOJusQBPKYGj7gRRA5Mm2KIwp4=&lt;/store-password&gt;
                    &lt;name&gt;truststore.jks&lt;/name&gt;
                &lt;/trust-keystore&gt;
            &lt;/ssl-data&gt;
        &lt;/key-stores&gt;
    &lt;/data&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<msg time="2026-08-23T02:07:42.061214" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:prefix="http://www.example.com/my-schema-example.html" additional="otherthing...</msg>
<var>${reply}</var>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:42.012475" elapsed="0.048768"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:42.061291" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T02:07:42.061442" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:prefix="http://www.example.com/my-schema-example.html" additional="otherthing...</msg>
<var>${reply}</var>
<arg>${request}</arg>
<doc>Send message to Netconf connection and get the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:42.005224" elapsed="0.056247"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:42.061515" elapsed="0.000025"/>
</return>
<msg time="2026-08-23T02:07:42.061656" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:prefix="http://www.example.com/my-schema-example.html" additional="otherthing...</msg>
<var>${reply}</var>
<arg>additional-attr</arg>
<doc>Load a message from the data file set, send it to Netconf and return the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:42.003898" elapsed="0.057785"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:42.061828" elapsed="0.000358"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>message-id="1"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:42.062331" elapsed="0.000292"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>attribute="something"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:42.062765" elapsed="0.000310"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>additional="otherthing"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:42.063217" elapsed="0.000286"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>xmlns:prefix="http://www.example.com/my-schema-example.html"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:42.063643" elapsed="0.000308"/>
</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-08-23T02:07:42.065167" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:42.064783" elapsed="0.000445"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.064764" elapsed="0.000489"/>
</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-08-23T02:07:42.065385" elapsed="0.000310"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:07:42.070474" 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-08-23T02:07:42.070069" elapsed="0.000433"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-08-23T02:07:42.070717" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:07:42.070576" elapsed="0.000197"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.070558" 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-08-23T02:07:42.070950" 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-08-23T02:07:42.071106" 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-08-23T02:07:42.071262" elapsed="0.000019"/>
</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-08-23T02:07:42.071412" 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-08-23T02:07:42.071563" 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-08-23T02:07:42.071715" 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-08-23T02:07:42.071879" 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-08-23T02:07:42.069727" elapsed="0.002228"/>
</kw>
<status status="PASS" start="2026-08-23T02:07:42.064538" elapsed="0.007467"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-08-23T02:07:42.064202" elapsed="0.007842"/>
</kw>
<doc>Check that additional attributes in messages are returned properly (RFC 6241, sections 4.1 and 4.2).</doc>
<status status="PASS" start="2026-08-23T02:07:41.908091" elapsed="0.163991"/>
</test>
<test id="s1-s3-s1-t5" name="Send_Stuff_In_Undefined_Namespace" line="79">
<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-08-23T02:07:42.075493" elapsed="0.000210"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:07:42.075245" elapsed="0.000512"/>
</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-08-23T02:07:42.076732" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:42.076622" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.076603" 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-08-23T02:07:42.081234" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:42.081129" elapsed="0.000150"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.081111" elapsed="0.000191"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:42.082266" 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-08-23T02:07:42.081890" elapsed="0.000403"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:07:42.082732" 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-08-23T02:07:42.082440" elapsed="0.000317"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:07:42.082802" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:07:42.082973" 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-08-23T02:07:42.081508" elapsed="0.001489"/>
</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-08-23T02:07:42.088156" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:42.088048" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.088029" elapsed="0.000207"/>
</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-08-23T02:07:42.089445" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:42.089337" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.089319" elapsed="0.000195"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:07:42.090020" level="INFO">${karaf_connection_index} = 18</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-08-23T02:07:42.089646" elapsed="0.000400"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:42.090434" level="INFO">${current_connection_index} = 23</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-08-23T02:07:42.090192" elapsed="0.000268"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:42.130614" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:42.091029" elapsed="0.039748"/>
</kw>
<msg time="2026-08-23T02:07:42.130971" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:07:42.131017" 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 "n "e "t "c "o "n "f "...</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-08-23T02:07:42.090627" elapsed="0.040426"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:07:42.158911" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "S "e "n "d "_ "S "t "u "f "f "_ "I "n "_ "U "n "d "e "f "i "n "e "d "_ "N "a "m "e "s "p "a "c "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-08-23T02:07:42.131614" elapsed="0.027511"/>
</kw>
<msg time="2026-08-23T02:07:42.159296" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:07:42.159342" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "S "e "n "d "_ "S "t "u "f "f "_ "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-08-23T02:07:42.131211" elapsed="0.028168"/>
</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-08-23T02:07:42.159668" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:42.159456" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.159437" elapsed="0.000332"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:42.160298" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "S "e "n "d "_ "S "t "u "f "f "_ "I "n "_ "U "n "d "e "f "i "n "e "d "_ "N "a "m "e "s "p "a "c "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-08-23T02:07:42.159922" elapsed="0.000450"/>
</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-08-23T02:07:42.160684" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:42.160473" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.160454" elapsed="0.000333"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:07:42.160821" elapsed="0.000045"/>
</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-08-23T02:07:42.163673" elapsed="0.000147"/>
</kw>
<msg time="2026-08-23T02:07:42.163911" 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-08-23T02:07:42.163027" elapsed="0.000981"/>
</kw>
<kw name="Open 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-08-23T02:07:42.164786" elapsed="0.000036"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:42.165622" elapsed="0.000036"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:07:42.161649" elapsed="0.004086"/>
</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-08-23T02:07:42.161085" elapsed="0.004785"/>
</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-08-23T02:07:42.089036" elapsed="0.076933"/>
</kw>
<msg time="2026-08-23T02:07:42.166060" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:42.166104" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "S "e "n "d "_ "S "t "u "f "f "_ "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-08-23T02:07:42.088378" elapsed="0.077763"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:07:42.166321" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:07:42.166215" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.166197" 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-08-23T02:07:42.166776" 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-08-23T02:07:42.167307" elapsed="0.000026"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:07:42.167381" 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-08-23T02:07:42.087696" elapsed="0.079792"/>
</kw>
<msg time="2026-08-23T02:07:42.167581" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:42.167624" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "S "e "n "d "_ "S "t "u "f "f "_ "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-08-23T02:07:42.083354" elapsed="0.084307"/>
</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-08-23T02:07:42.167992" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:42.167735" elapsed="0.000311"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.167718" elapsed="0.000352"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:07:42.083225" elapsed="0.084868"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:07:42.083049" elapsed="0.085072"/>
</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-08-23T02:07:42.080751" elapsed="0.087423"/>
</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-08-23T02:07:42.076323" elapsed="0.091904"/>
</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-08-23T02:07:42.075916" elapsed="0.092354"/>
</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-08-23T02:07:42.073101" elapsed="0.095221"/>
</kw>
<kw name="Load_And_Send_Message">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:42.169363" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-nonexistent-namespace-request.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-nonexistent-namespace-request.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:42.169494" level="INFO">${data} = &lt;rpc message-id="2" a="64" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
  &lt;edit-config&gt;
    &lt;target&gt;
      &lt;candidate/&gt;
    &lt;/target&gt;
    &lt;default-operation&gt;merge&lt;/default-operation&gt;
    &lt;config&gt;
...</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:42.169152" elapsed="0.000371"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:42.169600" elapsed="0.000033"/>
</return>
<msg time="2026-08-23T02:07:42.169756" level="INFO">${request} = &lt;rpc message-id="2" a="64" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
  &lt;edit-config&gt;
    &lt;target&gt;
      &lt;candidate/&gt;
    &lt;/target&gt;
    &lt;default-operation&gt;merge&lt;/default-operation&gt;
    &lt;config&gt;
...</msg>
<var>${request}</var>
<arg>${name}-request</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:42.168830" elapsed="0.000955"/>
</kw>
<kw name="Send_Message">
<kw name="Transmit_Message">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:42.172376" level="INFO">&lt;rpc message-id="2" a="64" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;</msg>
<arg>${message}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:42.170527" elapsed="0.001908"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:42.172958" level="INFO">&lt;edit-config&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:42.172579" elapsed="0.000431"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:42.178325" level="INFO">&lt;target&gt;
      &lt;candidate/&gt;
    &lt;/target&gt;
    &lt;default-operation&gt;merge&lt;/default-operation&gt;
    &lt;config&gt;
      &lt;does-not-exist xmlns="urn:this:is:in:a:nonexistent:namespace"&gt;
        &lt;entry&gt;
          &lt;id&gt;TOY001&lt;/id&gt;
          &lt;name&gt;Some Toy&lt;/name&gt;
          &lt;year&gt;2016&lt;/year&gt;
          &lt;category&gt;toys&lt;/category&gt;
        &lt;/entry&gt;
      &lt;/does-not-exist&gt;
    &lt;/config&gt;
  &lt;/edit-config&gt;
&lt;/rpc&gt;

]]&gt;]]&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:42.173149" elapsed="0.005242"/>
</kw>
<arg>${message}</arg>
<doc>Transmit message to Netconf connection and discard the echo of the message.</doc>
<status status="PASS" start="2026-08-23T02:07:42.170234" elapsed="0.008216"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:42.186466" level="INFO">&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply a="64" message-id="2" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
    &lt;rpc-error&gt;
        &lt;error-type&gt;application&lt;/error-type&gt;
        &lt;error-tag&gt;unknown-namespace&lt;/error-tag&gt;
        &lt;error-severity&gt;error&lt;/error-severity&gt;
        &lt;error-message&gt;Unable to find module by namespace: urn:this:is:in:a:nonexistent:namespace&lt;/error-message&gt;
    &lt;/rpc-error&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<msg time="2026-08-23T02:07:42.186576" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply a="64" message-id="2" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
    &lt;rpc-error&gt;
        &lt;error-type&gt;application&lt;/error-typ...</msg>
<var>${reply}</var>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:42.178591" elapsed="0.008013"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:42.186652" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:07:42.186802" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply a="64" message-id="2" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
    &lt;rpc-error&gt;
        &lt;error-type&gt;application&lt;/error-typ...</msg>
<var>${reply}</var>
<arg>${request}</arg>
<doc>Send message to Netconf connection and get the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:42.169942" elapsed="0.016912"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:42.186900" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:07:42.187044" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply a="64" message-id="2" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
    &lt;rpc-error&gt;
        &lt;error-type&gt;application&lt;/error-typ...</msg>
<var>${reply}</var>
<arg>merge-nonexistent-namespace</arg>
<doc>Load a message from the data file set, send it to Netconf and return the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:42.168466" elapsed="0.018606"/>
</kw>
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T02:07:42.187933" level="INFO">${SetupUtils__Known_Bug_ID} = 5125</msg>
<arg>${SetupUtils__Known_Bug_ID}</arg>
<arg>${id}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-23T02:07:42.187562" elapsed="0.000415"/>
</kw>
<arg>5125</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="PASS" start="2026-08-23T02:07:42.187257" elapsed="0.000776"/>
</kw>
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>java.lang.NullPointerException</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:42.188169" elapsed="0.000291"/>
</kw>
<kw name="Set_Unknown_Bug_Id" owner="SetupUtils">
<kw name="Set_Known_Bug_Id" owner="SetupUtils">
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T02:07:42.191597" level="INFO">${SetupUtils__Known_Bug_ID} = </msg>
<arg>${SetupUtils__Known_Bug_ID}</arg>
<arg>${id}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-23T02:07:42.191231" elapsed="0.000409"/>
</kw>
<arg>${EMPTY}</arg>
<doc>Tell the Teardown keywords that any failure from now on is due to the specified known bug.</doc>
<status status="PASS" start="2026-08-23T02:07:42.189168" elapsed="0.002531"/>
</kw>
<doc>Tell the Teardown keywords that from now on there is no longer known bug causing the failure so it should use linked bugs.</doc>
<status status="PASS" start="2026-08-23T02:07:42.188673" elapsed="0.003074"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>urn:this:is:in:a:nonexistent:namespace</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:42.191899" elapsed="0.000295"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;rpc-error&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:42.192340" elapsed="0.000284"/>
</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-08-23T02:07:42.193789" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:42.193434" elapsed="0.000432"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.193416" elapsed="0.000476"/>
</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-08-23T02:07:42.194070" elapsed="0.000308"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:07:42.198981" 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-08-23T02:07:42.198554" elapsed="0.000455"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-08-23T02:07:42.199275" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-23T02:07:42.199132" elapsed="0.000200"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.199112" elapsed="0.000244"/>
</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-08-23T02:07:42.199494" 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-08-23T02:07:42.199651" 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-08-23T02:07:42.199808" elapsed="0.000019"/>
</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-08-23T02:07:42.199980" 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-08-23T02:07:42.200132" 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-08-23T02:07:42.200281" 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-08-23T02:07:42.200428" 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-08-23T02:07:42.198251" elapsed="0.002252"/>
</kw>
<status status="PASS" start="2026-08-23T02:07:42.193227" elapsed="0.007325"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-08-23T02:07:42.192890" elapsed="0.007702"/>
</kw>
<doc>Try to send something within an undefined namespace and check the reply complains about the nonexistent namespace and element.</doc>
<status status="PASS" start="2026-08-23T02:07:42.072399" elapsed="0.128230"/>
</test>
<test id="s1-s3-s1-t6" name="Edit_Config_First_Batch_Merge" line="88">
<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-08-23T02:07:42.203644" elapsed="0.000225"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:07:42.203398" elapsed="0.000525"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:42.204869" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:42.204744" elapsed="0.000172"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.204725" elapsed="0.000214"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:42.209548" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:42.209441" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.209423" elapsed="0.000193"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:42.210598" 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-08-23T02:07:42.210216" elapsed="0.000409"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:07:42.211086" 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-08-23T02:07:42.210770" elapsed="0.000342"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:07:42.211156" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:07:42.211309" 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-08-23T02:07:42.209825" elapsed="0.001508"/>
</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-08-23T02:07:42.216344" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:42.216238" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.216219" elapsed="0.000194"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:42.217571" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:42.217466" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.217447" elapsed="0.000192"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:07:42.218198" level="INFO">${karaf_connection_index} = 18</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-08-23T02:07:42.217805" elapsed="0.000420"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:42.218613" level="INFO">${current_connection_index} = 23</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-08-23T02:07:42.218370" elapsed="0.000268"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:42.254117" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:42.219180" elapsed="0.035103"/>
</kw>
<msg time="2026-08-23T02:07:42.254455" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:07:42.254502" 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 "n "e "t "c "o "n "f "...</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-08-23T02:07:42.218785" elapsed="0.035755"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:07:42.282322" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "E "d "i "t "_ "C "o "n "f "i "g "_ "F "i "r "s "t "_ "B "a "t "c "h "_ "M "e "r "g "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-08-23T02:07:42.255109" elapsed="0.027681"/>
</kw>
<msg time="2026-08-23T02:07:42.283257" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:07:42.283362" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "E "d "i "t "_ "C "o "n "f "i "g "_ ...</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-08-23T02:07:42.254700" elapsed="0.028745"/>
</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-08-23T02:07:42.284173" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:42.283619" elapsed="0.000728"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.283574" elapsed="0.000829"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:42.285607" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "E "d "i "t "_ "C "o "n "f "i "g "_ "F "i "r "s "t "_ "B "a "t "c "h "_ "M "e "r "g "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-08-23T02:07:42.284695" elapsed="0.000999"/>
</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-08-23T02:07:42.285992" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:42.285762" elapsed="0.000306"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.285744" elapsed="0.000349"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:07:42.286126" 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-08-23T02:07:42.289100" elapsed="0.000157"/>
</kw>
<msg time="2026-08-23T02:07:42.289327" 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-08-23T02:07:42.288402" elapsed="0.001022"/>
</kw>
<kw name="Open 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-08-23T02:07:42.290223" elapsed="0.000037"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:42.291114" elapsed="0.000037"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:07:42.286981" elapsed="0.004248"/>
</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-08-23T02:07:42.286379" elapsed="0.004963"/>
</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-08-23T02:07:42.217167" elapsed="0.074271"/>
</kw>
<msg time="2026-08-23T02:07:42.291529" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:42.291574" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "E "d "i "t "_ "C "o "n "f "i "g "_ ...</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-08-23T02:07:42.216550" elapsed="0.075061"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:07:42.292105" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:07:42.291989" elapsed="0.000177"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.291667" elapsed="0.000523"/>
</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-08-23T02:07:42.292566" 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-08-23T02:07:42.292964" elapsed="0.000026"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:07:42.293038" 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-08-23T02:07:42.215905" elapsed="0.077241"/>
</kw>
<msg time="2026-08-23T02:07:42.293238" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:42.293281" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "E "d "i "t "_ "C "o "n "f "i "g "_ ...</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-08-23T02:07:42.211677" elapsed="0.081641"/>
</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-08-23T02:07:42.293639" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:42.293401" elapsed="0.000293"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.293383" elapsed="0.000335"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:07:42.211549" elapsed="0.082192"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:07:42.211384" elapsed="0.082385"/>
</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-08-23T02:07:42.209082" elapsed="0.084739"/>
</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-08-23T02:07:42.204456" elapsed="0.089456"/>
</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-08-23T02:07:42.204058" elapsed="0.089898"/>
</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-08-23T02:07:42.201348" elapsed="0.092659"/>
</kw>
<kw name="Perform_Test">
<kw name="Load_And_Send_Message">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:42.295292" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-1-request.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-1-request.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:42.295448" level="INFO">${data} = &lt;rpc message-id="2" a="64" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
&lt;edit-config&gt;
&lt;target&gt;
&lt;candidate/&gt;
&lt;/target&gt;
&lt;default-operation&gt;merge&lt;/default-operation&gt;
&lt;config&gt;
&lt;cars xmlns="urn:openday...</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:42.295072" elapsed="0.000405"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:42.295524" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:42.295675" level="INFO">${request} = &lt;rpc message-id="2" a="64" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
&lt;edit-config&gt;
&lt;target&gt;
&lt;candidate/&gt;
&lt;/target&gt;
&lt;default-operation&gt;merge&lt;/default-operation&gt;
&lt;config&gt;
&lt;cars xmlns="urn:openday...</msg>
<var>${request}</var>
<arg>${name}-request</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:42.294752" elapsed="0.000951"/>
</kw>
<kw name="Send_Message">
<kw name="Transmit_Message">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:42.298565" level="INFO">&lt;rpc message-id="2" a="64" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;</msg>
<arg>${message}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:42.296439" elapsed="0.002184"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:42.299122" level="INFO">&lt;edit-config&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:42.298765" elapsed="0.000408"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:42.306403" level="INFO">&lt;target&gt;
&lt;candidate/&gt;
&lt;/target&gt;
&lt;default-operation&gt;merge&lt;/default-operation&gt;
&lt;config&gt;
&lt;cars xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car"&gt;
  &lt;car-entry&gt;
    &lt;id&gt;TOY001&lt;/id&gt;
    &lt;model&gt;Toyota Corolla&lt;/model&gt;
    &lt;manufacturer&gt;Toyota&lt;/manufacturer&gt;
    &lt;year&gt;2016&lt;/year&gt;
    &lt;category&gt;sedan&lt;/category&gt;
  &lt;/car-entry&gt;
&lt;/cars&gt;
&lt;people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:people"&gt;
  &lt;person&gt;
    &lt;id&gt;CUST001&lt;/id&gt;
    &lt;age&gt;32&lt;/age&gt;
  &lt;/person&gt;
&lt;/people&gt;
&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;
  &lt;car-person&gt;
    &lt;car-id&gt;TOY001&lt;/car-id&gt;
    &lt;person-id&gt;CUST001&lt;/person-id&gt;
  &lt;/car-person&gt;
&lt;/car-people&gt;
&lt;/config&gt;
&lt;/edit-config&gt;
&lt;/rpc&gt;

]]&gt;]]&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:42.299310" elapsed="0.007165"/>
</kw>
<arg>${message}</arg>
<doc>Transmit message to Netconf connection and discard the echo of the message.</doc>
<status status="PASS" start="2026-08-23T02:07:42.296148" elapsed="0.010383"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:42.314167" level="INFO">&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" a="64" message-id="2"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<msg time="2026-08-23T02:07:42.314259" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" a="64" message-id="2"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:42.306669" elapsed="0.007617"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:42.314331" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:07:42.314479" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" a="64" message-id="2"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${request}</arg>
<doc>Send message to Netconf connection and get the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:42.295858" elapsed="0.018682"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:42.314587" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:07:42.314731" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" a="64" message-id="2"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${actual}</var>
<arg>${name}</arg>
<doc>Load a message from the data file set, send it to Netconf and return the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:42.294466" elapsed="0.020293"/>
</kw>
<kw name="Load_Expected_Reply">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:42.315720" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-1-reply.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-1-reply.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:42.315862" level="INFO">${data} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" a="64" message-id="2"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:42.315510" elapsed="0.000381"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:42.315937" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:07:42.316084" level="INFO">${expected_reply} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" a="64" message-id="2"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected_reply}</var>
<arg>${name}-reply</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:42.315206" elapsed="0.000905"/>
</kw>
<return>
<value>${expected_reply}</value>
<status status="PASS" start="2026-08-23T02:07:42.316155" elapsed="0.000025"/>
</return>
<msg time="2026-08-23T02:07:42.316300" level="INFO">${expected} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" a="64" message-id="2"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected}</var>
<arg>${name}</arg>
<doc>Load the expected reply from the data file set and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:42.314913" elapsed="0.001427"/>
</kw>
<kw name="Remove String" owner="String">
<msg time="2026-08-23T02:07:42.316686" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" a="64" message-id="2"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>]]&gt;]]&gt;</arg>
<doc>Removes all ``removables`` from the given ``string``.</doc>
<status status="PASS" start="2026-08-23T02:07:42.316484" elapsed="0.000230"/>
</kw>
<kw name="Strip String" owner="String">
<msg time="2026-08-23T02:07:42.317110" level="INFO">${actual} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" a="64" message-id="2"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>mode=both</arg>
<doc>Remove leading and/or trailing whitespaces from the given string.</doc>
<status status="PASS" start="2026-08-23T02:07:42.316878" elapsed="0.000261"/>
</kw>
<kw name="Elements Should Be Equal" owner="XML">
<arg>${actual}</arg>
<arg>${expected}</arg>
<arg>normalize_whitespace=True</arg>
<doc>Verifies that the given ``source`` element is equal to ``expected``.</doc>
<status status="PASS" start="2026-08-23T02:07:42.317283" elapsed="0.000455"/>
</kw>
<return>
<value>${actual}</value>
<status status="PASS" start="2026-08-23T02:07:42.317792" elapsed="0.000028"/>
</return>
<arg>merge-1</arg>
<doc>Load and send the request from the dataset and compare the returned reply to the one stored in the dataset.</doc>
<status status="PASS" start="2026-08-23T02:07:42.294165" elapsed="0.023775"/>
</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-08-23T02:07:42.319410" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:42.319053" elapsed="0.000419"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.319035" elapsed="0.000462"/>
</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-08-23T02:07:42.319631" elapsed="0.000330"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:07:42.324596" 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-08-23T02:07:42.324197" elapsed="0.000427"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-08-23T02:07:42.324865" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-23T02:07:42.324703" elapsed="0.000220"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.324684" 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-08-23T02:07:42.325082" 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-08-23T02:07:42.325237" 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-08-23T02:07:42.325393" elapsed="0.000019"/>
</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-08-23T02:07:42.325542" 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-08-23T02:07:42.325695" 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-08-23T02:07:42.325859" elapsed="0.000054"/>
</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-08-23T02:07:42.326050" 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-08-23T02:07:42.323895" elapsed="0.002231"/>
</kw>
<status status="PASS" start="2026-08-23T02:07:42.318801" elapsed="0.007374"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-08-23T02:07:42.318247" elapsed="0.007969"/>
</kw>
<doc>Request a "merge" operation adding an element in candidate configuration and check the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:42.200817" elapsed="0.125437"/>
</test>
<test id="s1-s3-s1-t7" name="Get_Config_Running_To_Confirm_No_Edit_Before_Commit" line="92">
<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-08-23T02:07:42.329345" elapsed="0.000207"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:07:42.329099" elapsed="0.000507"/>
</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-08-23T02:07:42.330562" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:42.330453" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.330434" elapsed="0.000198"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:42.335085" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:42.334977" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.334959" elapsed="0.000193"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:42.336129" 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-08-23T02:07:42.335718" elapsed="0.000438"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:07:42.336616" 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-08-23T02:07:42.336311" elapsed="0.000330"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:07:42.336686" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:42.336855" 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-08-23T02:07:42.335360" elapsed="0.001522"/>
</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-08-23T02:07:42.342053" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:42.341944" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.341925" elapsed="0.000197"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:42.343297" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:42.343191" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.343173" elapsed="0.000193"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:07:42.343892" level="INFO">${karaf_connection_index} = 18</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-08-23T02:07:42.343497" elapsed="0.000424"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:42.344307" level="INFO">${current_connection_index} = 23</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-08-23T02:07:42.344064" elapsed="0.000269"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:42.387920" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:42.344876" elapsed="0.043221"/>
</kw>
<msg time="2026-08-23T02:07:42.388265" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:07:42.388311" 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 "n "e "t "c "o "n "f "...</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-08-23T02:07:42.344479" elapsed="0.043868"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:07:42.424595" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "G "e "t "_ "C "o "n "f "i "g "_ "R "u "n "n "i "n "g "_ "T "o "_ "C "o "n "f "i "r "m "_ "N "o "_ "E "d "i "t "_ "B "e "f "o "r "e "_ "C "o "m "m "i "[78Ct "[A[78C"[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-08-23T02:07:42.388905" elapsed="0.035877"/>
</kw>
<msg time="2026-08-23T02:07:42.424973" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:07:42.425054" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "G "e "t "_ "C "o "n "f "i "g "_ "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-08-23T02:07:42.388506" elapsed="0.036588"/>
</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-08-23T02:07:42.425381" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:42.425171" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.425152" elapsed="0.000332"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:42.426009" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "G "e "t "_ "C "o "n "f "i "g "_ "R "u "n "n "i "n "g "_ "T "o "_ "C "o "n "f "i "r "m "_ "N "o "_ "E "d "i "t "_ "B "e "f "o "r "e "_ "C "o "m "m "i "[78Ct "[A[78C"[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-08-23T02:07:42.425613" elapsed="0.000477"/>
</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-08-23T02:07:42.426361" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:42.426157" elapsed="0.000278"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.426138" elapsed="0.000347"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:07:42.426521" 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-08-23T02:07:42.429372" elapsed="0.000147"/>
</kw>
<msg time="2026-08-23T02:07:42.429589" 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-08-23T02:07:42.428717" elapsed="0.000967"/>
</kw>
<kw name="Open 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-08-23T02:07:42.430504" elapsed="0.000037"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:42.431336" elapsed="0.000036"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:07:42.427376" elapsed="0.004075"/>
</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-08-23T02:07:42.426774" elapsed="0.004789"/>
</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-08-23T02:07:42.342888" elapsed="0.088774"/>
</kw>
<msg time="2026-08-23T02:07:42.431753" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:42.431796" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "G "e "t "_ "C "o "n "f "i "g "_ "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-08-23T02:07:42.342262" elapsed="0.089612"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:07:42.432059" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-08-23T02:07:42.431953" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.431934" 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-08-23T02:07:42.432512" 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-08-23T02:07:42.432827" elapsed="0.000071"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:07:42.432947" 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-08-23T02:07:42.341591" elapsed="0.091465"/>
</kw>
<msg time="2026-08-23T02:07:42.433148" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:42.433191" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "G "e "t "_ "C "o "n "f "i "g "_ "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-08-23T02:07:42.337228" elapsed="0.096000"/>
</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-08-23T02:07:42.433537" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:42.433303" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.433285" elapsed="0.000330"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:07:42.337100" elapsed="0.096538"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:07:42.336935" elapsed="0.096731"/>
</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-08-23T02:07:42.334606" elapsed="0.099111"/>
</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-08-23T02:07:42.330172" elapsed="0.103633"/>
</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-08-23T02:07:42.329746" elapsed="0.104262"/>
</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-08-23T02:07:42.327125" elapsed="0.106938"/>
</kw>
<kw name="Check_Test_Objects_Not_Present_In_Config">
<kw name="Load_And_Send_Message">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:42.435537" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/get-config-no-edit-before-commit-request.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/get-config-no-edit-before-commit-request.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:42.435680" level="INFO">${data} = &lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="empty"&gt;
    &lt;get-config&gt;
        &lt;source&gt;
            &lt;running/&gt;
        &lt;/source&gt;
    &lt;/get-config&gt;
&lt;/rpc&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:42.435135" elapsed="0.000574"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:42.435756" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:42.435922" level="INFO">${request} = &lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="empty"&gt;
    &lt;get-config&gt;
        &lt;source&gt;
            &lt;running/&gt;
        &lt;/source&gt;
    &lt;/get-config&gt;
&lt;/rpc&gt;
</msg>
<var>${request}</var>
<arg>${name}-request</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:42.434805" elapsed="0.001146"/>
</kw>
<kw name="Send_Message">
<kw name="Transmit_Message">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:42.438604" level="INFO">&lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="empty"&gt;</msg>
<arg>${message}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:42.436675" elapsed="0.001988"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:42.439193" level="INFO">&lt;get-config&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:42.438805" elapsed="0.000440"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:42.440504" level="INFO">&lt;source&gt;
            &lt;running/&gt;
        &lt;/source&gt;
    &lt;/get-config&gt;
&lt;/rpc&gt;

]]&gt;]]&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:42.439384" elapsed="0.001175"/>
</kw>
<arg>${message}</arg>
<doc>Transmit message to Netconf connection and discard the echo of the message.</doc>
<status status="PASS" start="2026-08-23T02:07:42.436381" elapsed="0.004234"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:42.484488" level="INFO">&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="empty"&gt;
    &lt;data&gt;
        &lt;aaa-encrypt-service-config xmlns="config:aaa:authn:encrypt:service:config"&gt;
            &lt;encrypt-type&gt;AES&lt;/encrypt-type&gt;
            &lt;encrypt-key-length&gt;128&lt;/encrypt-key-length&gt;
            &lt;password-length&gt;12&lt;/password-length&gt;
            &lt;cipher-transforms&gt;AES/GCM/NoPadding&lt;/cipher-transforms&gt;
            &lt;encrypt-key&gt;svW8eCV45iNA&lt;/encrypt-key&gt;
            &lt;encrypt-salt&gt;szGsvGrFGnYbd9nd1t9nEw==&lt;/encrypt-salt&gt;
            &lt;auth-tag-length&gt;128&lt;/auth-tag-length&gt;
            &lt;encrypt-method&gt;PBKDF2WithHmacSHA1&lt;/encrypt-method&gt;
            &lt;encrypt-iteration-count&gt;32768&lt;/encrypt-iteration-count&gt;
        &lt;/aaa-encrypt-service-config&gt;
        &lt;key-stores xmlns="urn:opendaylight:yang:aaa:cert:mdsal"&gt;
            &lt;id&gt;KeyStores:1&lt;/id&gt;
            &lt;ssl-data&gt;
                &lt;bundle-name&gt;opendaylight&lt;/bundle-name&gt;
                &lt;tls-protocols/&gt;
                &lt;odl-keystore&gt;
                    &lt;store-password&gt;szGsvGrFGnYbd9nd1t9nE/fx+V2RdCDYC56eieY+0NUj2isn/xZEgHOUDk8=&lt;/store-password&gt;
                    &lt;sign-alg&gt;SHA1WithRSAEncryption&lt;/sign-alg&gt;
                    &lt;validity&gt;365&lt;/validity&gt;
                    &lt;alias&gt;controller&lt;/alias&gt;
                    &lt;name&gt;ctl.jks&lt;/name&gt;
                    &lt;dname&gt;CN=ODL, OU=Dev, O=LinuxFoundation, L=QC Montreal, C=CA&lt;/dname&gt;
                    &lt;keystoreFile&gt;szGsvGrFGnYbd9nd1t9nE0JpQtr6AxLteOf9yUIRItqLm3NkTNx/el6TA99g1gQs8oNL0ip4IPpl4rt7rFRRPPBAYfnI5Hkh+b8tHGDNwygXVh0qPTd02Ju1oPl0gQiXDeG3LxTe8oV0ONxVMiVDPRLInTiudW5V+NAL0c/qNo47UDfypSDuyY7eUL/QqoheS+TBVtkEivw2fS5E+lNKVmSRnedcKds+JRGqsn0ie6kCPmdOS26Zo5s8D6M2tT+r5in4jHovTq6a3RAmy5ZEJJbHJx/m+Y3778MRBkcD2nV3THNE3WXHfY8z+tUfGap/IGFvqumYYtRL35QgVchzJa3JZ2mMxPc2WLe5i2J1nYXYU6QDbT3UoksnTVzBRz0eznEzQQs47v/7gSOqx+Xug8kld3PASYNi5fZD0YmZGe+lI8ON47+4URudcRM9QmzWRu2LhIpGk8Fk0ueaJh5QF0VbVHat5S7fi1fkSNf2wHTs2pFv75hWSsg+7KDTAgfExMImhBPJ+pc8raT7kLEYiBPXy8NMvlDSksgfvSIcyyharJNj8wtxEFkBVWeX0SFzwlZy9oICi+li5ZM8WhSAbtBGTbpBJ9ADwg8WZo7uznJx+rhIUrjoziNRYqUVp/euIq6rjbE/k6jZCtKTP/qoqy0lShP6M9GfuB6O1akHdOHMWOqX2Q6G8qdVPuyAshiJrIthlJEiY5LX8xhXOQDAuGvwB5hFN/aXa0bMksLEHsTKpXSRnhLCJQxzrKpSSIuQqMzsDUQJQMzch1NGpbSFDwOySU5aeyvsTo4AYPT6Xf6YhGsYDk39B6R/CFsBVO13/4SfkiINKvhpYwQ/vfftmmF/7SXYXp/YR7nffSZTr1ooWJHAaGzqAQw+it9HIaJd7IqTROyhS23F00eX3h/OVwbsBB6PmGXh0LvOoCEfctsl0hTpnouPExetsGBZ7dfPpQIK5UiizhBZjKfr1N3dRVawGP2tFckp3xB0Fr3W8nqRCcWxi5oDGtKcK+z5LinRpCeurFbtZwatTqgh1o/KRXdpQ9E+QmJuyIUnIjoxwuFejwHujtyJR+uAvC90T+G09PnaaMGALkmiJ3kiDn5waQup2qhptMUuF1ZjNirqcbAh7MoEtU02PCQAlBmV0D9Uvp/q9Iw3EFmWhfNT8w/Y03VHw2AK7DY94gJq0vmVUD96ahn4UvWXL5CjFyzXD8ikqdV0fx3zamP53xl6LhQUwBWwiaZVZ6qpfmuSfHRBoOKn5FGmIVpQtgs1i2OYsf8CFMdds6HkzCU9ZR5bcNIUz3U7KzxhaZNpj+tBPjCe5knbuvODRT9AIIZr5NL8zkfLG0R/DySEUJEP9MZFDzaYKqwZUQK9u9lyxXBdRZ/nJJVpYkbOdjraUZOn2wX1MOv768TylMxft2elpWtyo51E7XJca0zO3FT+T6dEDLNuLf70Tjf4ZKlXIs+rbMZRzJiNPU/gOOCncjGnQg7yVNt6CXFzLloYDKyI1+nXar0j8Y7aLeRw4ANqfONtf/a/feF1rxUgkr9kpwha7YR6ZbwLsgEqRGQ1yP0UUYTN4tW9P1fKN220ZErjmNLf5y9d4E1kw0JC9Aowy1OIPHC+GoIH2GXmLp6xrwtvDNX0N9GVVtWxGfdOuRunqus5wncxwKSsJHEV7gC7CttHVSQuYxf+qSVzxDZdZhrEFRDM+2ehQr+jYPjBFDfrFrZ6APcuc6eG8uNgDwFBIT/AvuHqnX/J/C5nmpguP7J8i+L6Tq/vaE06wHDJDHx4janBzQWz38QKtnFFVvSuYlPq4xpjc4XL0w==&lt;/keystoreFile&gt;
                    &lt;key-alg&gt;RSA&lt;/key-alg&gt;
                    &lt;keysize&gt;1024&lt;/keysize&gt;
                &lt;/odl-keystore&gt;
                &lt;cipher-suites&gt;
                    &lt;suiteName/&gt;
                &lt;/cipher-suites&gt;
                &lt;trust-keystore&gt;
                    &lt;keystoreFile&gt;szGsvGrFGnYbd9nd1t9nE0JpQtr6AxLteOf9yIktC+veMTpJpq+B4qQuq9ISdPV1uRcHSk71SvQM3Yb0MmEuAA==&lt;/keystoreFile&gt;
                    &lt;store-password&gt;szGsvGrFGnYbd9nd1t9nE/re1XnJbnW5IKOJusQBPKYGj7gRRA5Mm2KIwp4=&lt;/store-password&gt;
                    &lt;name&gt;truststore.jks&lt;/name&gt;
                &lt;/trust-keystore&gt;
            &lt;/ssl-data&gt;
        &lt;/key-stores&gt;
    &lt;/data&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<msg time="2026-08-23T02:07:42.484654" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="empty"&gt;
    &lt;data&gt;
        &lt;aaa-encrypt-service-config xmlns="config:...</msg>
<var>${reply}</var>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:42.440751" elapsed="0.043931"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:42.484730" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T02:07:42.484897" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="empty"&gt;
    &lt;data&gt;
        &lt;aaa-encrypt-service-config xmlns="config:...</msg>
<var>${reply}</var>
<arg>${request}</arg>
<doc>Send message to Netconf connection and get the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:42.436093" elapsed="0.048833"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:42.484970" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:07:42.485113" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="empty"&gt;
    &lt;data&gt;
        &lt;aaa-encrypt-service-config xmlns="config:...</msg>
<var>${reply}</var>
<arg>${name}</arg>
<doc>Load a message from the data file set, send it to Netconf and return the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:42.434517" elapsed="0.050623"/>
</kw>
<kw name="Check_Test_Objects_Absent">
<kw name="Check_First_Batch_Data_Not_Present">
<kw name="Check_First_Batch_Data">
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;TOY001&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:42.486739" elapsed="0.000311"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;TOY001&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:42.486311" elapsed="0.000795"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CUST001&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:42.487663" elapsed="0.000298"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;CUST001&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:42.487248" elapsed="0.000767"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;car-id&gt;TOY001&lt;/car-id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:42.488568" elapsed="0.000302"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;car-id&gt;TOY001&lt;/car-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:42.488156" elapsed="0.000769"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUST001&lt;/person-id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:42.489506" elapsed="0.000290"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUST001&lt;/person-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:42.489067" elapsed="0.000809"/>
</kw>
<arg>${reply}</arg>
<arg>BuiltIn.Should_Not_Contain</arg>
<status status="PASS" start="2026-08-23T02:07:42.485993" elapsed="0.003941"/>
</kw>
<arg>${reply}</arg>
<status status="PASS" start="2026-08-23T02:07:42.485663" elapsed="0.004319"/>
</kw>
<kw name="Check_Second_Batch_Data">
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;OLD001&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:42.490860" elapsed="0.000284"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;OLD001&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:42.490429" elapsed="0.000768"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CUST002&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:42.491746" elapsed="0.000307"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;CUST002&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:42.491336" elapsed="0.000771"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;car-id&gt;OLD001&lt;/car-id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:42.492657" elapsed="0.000297"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;car-id&gt;OLD001&lt;/car-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:42.492247" elapsed="0.000761"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUST002&lt;/person-id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:42.493581" elapsed="0.000306"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUST002&lt;/person-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:42.493146" elapsed="0.000795"/>
</kw>
<arg>${reply}</arg>
<arg>BuiltIn.Should_not_Contain</arg>
<status status="PASS" start="2026-08-23T02:07:42.490111" elapsed="0.003886"/>
</kw>
<kw name="Check_Multiple_Batch_Data_Absent">
<kw name="Check_Multiple_Batch_Data">
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CAROLD&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:42.495207" elapsed="0.000459"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;CAROLD&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:42.494773" elapsed="0.000949"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CUSTOLD&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:42.496301" elapsed="0.000281"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;CUSTOLD&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:42.495878" elapsed="0.000758"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;car-id&gt;CAROLD&lt;/car-id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:42.497214" elapsed="0.000300"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;car-id&gt;CAROLD&lt;/car-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:42.496776" elapsed="0.000792"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUSTOLD&lt;/person-id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:42.498198" elapsed="0.000280"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUSTOLD&lt;/person-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:42.497756" elapsed="0.000777"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CARYOUNG&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:42.499101" elapsed="0.000279"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;CARYOUNG&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:42.498672" elapsed="0.000761"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CUSTYOUNG&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:42.500007" elapsed="0.000282"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;CUSTYOUNG&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:42.499573" elapsed="0.000770"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;car-id&gt;CARYOUNG&lt;/car-id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:42.500909" elapsed="0.000293"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;car-id&gt;CARYOUNG&lt;/car-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:42.500482" elapsed="0.000775"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUSTYOUNG&lt;/person-id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:42.501806" elapsed="0.000301"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUSTYOUNG&lt;/person-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:42.501396" elapsed="0.000766"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CARMID&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:42.502790" elapsed="0.000301"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;CARMID&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:42.502325" elapsed="0.000820"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CUSTMID&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:42.503698" elapsed="0.000299"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;CUSTMID&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:42.503286" elapsed="0.000765"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;car-id&gt;CARMID&lt;/car-id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:42.504610" elapsed="0.000300"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;car-id&gt;CARMID&lt;/car-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:42.504192" elapsed="0.000772"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUSTMID&lt;/person-id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:42.505558" elapsed="0.000305"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUSTMID&lt;/person-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:42.505131" elapsed="0.000788"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CAROLD2&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:42.506479" elapsed="0.000280"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;CAROLD2&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:42.506063" elapsed="0.000750"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CUSTOLD2&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:42.507399" elapsed="0.000284"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;CUSTOLD2&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:42.506974" elapsed="0.000764"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;car-id&gt;CAROLD2&lt;/car-id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:42.508315" elapsed="0.000279"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;car-id&gt;CAROLD2&lt;/car-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:42.507897" elapsed="0.000752"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUSTOLD2&lt;/person-id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:42.509240" elapsed="0.000280"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUSTOLD2&lt;/person-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:42.508789" elapsed="0.000785"/>
</kw>
<arg>${reply}</arg>
<arg>BuiltIn.Should_not_Contain</arg>
<status status="PASS" start="2026-08-23T02:07:42.494462" elapsed="0.015167"/>
</kw>
<arg>${reply}</arg>
<status status="PASS" start="2026-08-23T02:07:42.494113" elapsed="0.015565"/>
</kw>
<kw name="Check_Auxiliary_Data">
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CUSTBAD&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:42.510614" elapsed="0.000302"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;CUSTBAD&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:42.510198" elapsed="0.000771"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;test&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:42.511518" elapsed="0.000278"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;test&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:42.511108" elapsed="0.000799"/>
</kw>
<arg>${reply}</arg>
<arg>BuiltIn.Should_not_Contain</arg>
<status status="PASS" start="2026-08-23T02:07:42.509878" elapsed="0.002086"/>
</kw>
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;test&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:42.512095" elapsed="0.000282"/>
</kw>
<arg>${reply}</arg>
<status status="PASS" start="2026-08-23T02:07:42.485285" elapsed="0.027152"/>
</kw>
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;REPLACE&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:42.512566" elapsed="0.000299"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:42.512916" elapsed="0.000028"/>
</return>
<arg>get-config-no-edit-before-commit</arg>
<doc>Use dataset with the specified name to get the configuration and check that none of our test objects are there.</doc>
<status status="PASS" start="2026-08-23T02:07:42.434214" elapsed="0.078836"/>
</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-08-23T02:07:42.514228" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:42.513857" elapsed="0.000433"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.513821" 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-08-23T02:07:42.514449" elapsed="0.000307"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:07:42.519565" 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-08-23T02:07:42.519166" elapsed="0.000429"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-08-23T02:07:42.519813" elapsed="0.000041"/>
</return>
<status status="PASS" start="2026-08-23T02:07:42.519672" elapsed="0.000214"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.519653" elapsed="0.000258"/>
</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-08-23T02:07:42.520046" 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-08-23T02:07:42.520201" 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-08-23T02:07:42.520357" 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-08-23T02:07:42.520517" 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-08-23T02:07:42.520672" 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-08-23T02:07:42.520824" elapsed="0.000064"/>
</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-08-23T02:07:42.521028" 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-08-23T02:07:42.518870" elapsed="0.002234"/>
</kw>
<status status="PASS" start="2026-08-23T02:07:42.513632" elapsed="0.007521"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-08-23T02:07:42.513292" elapsed="0.007902"/>
</kw>
<doc>Make sure the running configuration is still unchanged as the change was not commited yet.</doc>
<status status="PASS" start="2026-08-23T02:07:42.326513" elapsed="0.194718"/>
</test>
<test id="s1-s3-s1-t8" name="Commit_Edit" line="96">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-08-23T02:07:42.524154" elapsed="0.000206"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:07:42.523907" elapsed="0.000506"/>
</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-08-23T02:07:42.525389" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:42.525280" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.525261" 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-08-23T02:07:42.529957" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:42.529847" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.529815" elapsed="0.000209"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:42.531008" 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-08-23T02:07:42.530609" elapsed="0.000462"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:07:42.531518" 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-08-23T02:07:42.531222" elapsed="0.000322"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:07:42.531589" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:07:42.531744" 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-08-23T02:07:42.530233" elapsed="0.001536"/>
</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-08-23T02:07:42.537016" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:42.536906" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.536886" elapsed="0.000200"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:42.538263" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:42.538156" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.538137" elapsed="0.000194"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:07:42.538821" level="INFO">${karaf_connection_index} = 18</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-08-23T02:07:42.538462" elapsed="0.000401"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:42.539253" level="INFO">${current_connection_index} = 23</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-08-23T02:07:42.539010" elapsed="0.000269"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:42.574523" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:42.539799" elapsed="0.034926"/>
</kw>
<msg time="2026-08-23T02:07:42.574914" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:07:42.574960" 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 "n "e "t "c "o "n "f "...</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-08-23T02:07:42.539426" elapsed="0.035570"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:07:42.593340" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "o "m "m "i "t "_ "E "d "i "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-08-23T02:07:42.575529" elapsed="0.017988"/>
</kw>
<msg time="2026-08-23T02:07:42.593689" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:07:42.593734" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "o "m "m "i "t "_ "E "d "i "t "[...</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-08-23T02:07:42.575154" elapsed="0.018618"/>
</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-08-23T02:07:42.594084" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:42.593873" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.593829" elapsed="0.000357"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:42.594686" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "o "m "m "i "t "_ "E "d "i "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-08-23T02:07:42.594317" elapsed="0.000433"/>
</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-08-23T02:07:42.595034" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:42.594815" elapsed="0.000294"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.594797" elapsed="0.000336"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:07:42.595167" 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-08-23T02:07:42.598001" elapsed="0.000147"/>
</kw>
<msg time="2026-08-23T02:07:42.598218" 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-08-23T02:07:42.597352" elapsed="0.000964"/>
</kw>
<kw name="Open 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-08-23T02:07:42.599119" elapsed="0.000037"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:42.599966" elapsed="0.000038"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:07:42.596013" elapsed="0.004104"/>
</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-08-23T02:07:42.595407" elapsed="0.004824"/>
</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-08-23T02:07:42.537854" elapsed="0.062475"/>
</kw>
<msg time="2026-08-23T02:07:42.600420" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:42.600464" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "o "m "m "i "t "_ "E "d "i "t "[...</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-08-23T02:07:42.537226" elapsed="0.063276"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:07:42.600684" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:07:42.600578" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.600560" 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-08-23T02:07:42.601326" 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-08-23T02:07:42.601641" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:07:42.601713" 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-08-23T02:07:42.536510" elapsed="0.065309"/>
</kw>
<msg time="2026-08-23T02:07:42.601934" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:42.601978" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "o "m "m "i "t "_ "E "d "i "t "[...</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-08-23T02:07:42.532133" elapsed="0.069881"/>
</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-08-23T02:07:42.602324" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:42.602089" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.602072" elapsed="0.000328"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:07:42.532005" elapsed="0.070419"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:07:42.531821" elapsed="0.070632"/>
</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-08-23T02:07:42.529473" elapsed="0.073031"/>
</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-08-23T02:07:42.524994" elapsed="0.077563"/>
</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-08-23T02:07:42.524547" elapsed="0.078053"/>
</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-08-23T02:07:42.521952" elapsed="0.080697"/>
</kw>
<kw name="Perform_Test">
<kw name="Load_And_Send_Message">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:42.605244" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/commit-edit-request.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/commit-edit-request.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:42.605428" level="INFO">${data} = &lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="4"&gt;
&lt;commit/&gt;
&lt;/rpc&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:42.605021" elapsed="0.000435"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:42.605503" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:42.605650" level="INFO">${request} = &lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="4"&gt;
&lt;commit/&gt;
&lt;/rpc&gt;
</msg>
<var>${request}</var>
<arg>${name}-request</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:42.603399" elapsed="0.002277"/>
</kw>
<kw name="Send_Message">
<kw name="Transmit_Message">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:42.608375" level="INFO">&lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="4"&gt;</msg>
<arg>${message}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:42.606419" elapsed="0.002013"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:42.608901" level="INFO">&lt;commit/&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:42.608574" elapsed="0.000378"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:42.609574" level="INFO">&lt;/rpc&gt;

]]&gt;]]&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:42.609090" elapsed="0.000537"/>
</kw>
<arg>${message}</arg>
<doc>Transmit message to Netconf connection and discard the echo of the message.</doc>
<status status="PASS" start="2026-08-23T02:07:42.606127" elapsed="0.003555"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:42.618434" level="INFO">&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="4"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<msg time="2026-08-23T02:07:42.618568" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="4"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:42.609818" elapsed="0.008779"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:42.618643" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:42.618790" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="4"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${request}</arg>
<doc>Send message to Netconf connection and get the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:42.605818" elapsed="0.012999"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:42.618879" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:07:42.619024" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="4"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${actual}</var>
<arg>${name}</arg>
<doc>Load a message from the data file set, send it to Netconf and return the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:42.603109" elapsed="0.015942"/>
</kw>
<kw name="Load_Expected_Reply">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:42.620037" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/commit-edit-reply.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/commit-edit-reply.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:42.620175" level="INFO">${data} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="4"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:42.619809" elapsed="0.000395"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:42.620251" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:07:42.620398" level="INFO">${expected_reply} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="4"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected_reply}</var>
<arg>${name}-reply</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:42.619504" elapsed="0.000921"/>
</kw>
<return>
<value>${expected_reply}</value>
<status status="PASS" start="2026-08-23T02:07:42.620469" elapsed="0.000025"/>
</return>
<msg time="2026-08-23T02:07:42.620613" level="INFO">${expected} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="4"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected}</var>
<arg>${name}</arg>
<doc>Load the expected reply from the data file set and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:42.619200" elapsed="0.001440"/>
</kw>
<kw name="Remove String" owner="String">
<msg time="2026-08-23T02:07:42.620997" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="4"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>]]&gt;]]&gt;</arg>
<doc>Removes all ``removables`` from the given ``string``.</doc>
<status status="PASS" start="2026-08-23T02:07:42.620781" elapsed="0.000245"/>
</kw>
<kw name="Strip String" owner="String">
<msg time="2026-08-23T02:07:42.621392" level="INFO">${actual} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="4"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>mode=both</arg>
<doc>Remove leading and/or trailing whitespaces from the given string.</doc>
<status status="PASS" start="2026-08-23T02:07:42.621171" elapsed="0.000250"/>
</kw>
<kw name="Elements Should Be Equal" owner="XML">
<arg>${actual}</arg>
<arg>${expected}</arg>
<arg>normalize_whitespace=True</arg>
<doc>Verifies that the given ``source`` element is equal to ``expected``.</doc>
<status status="PASS" start="2026-08-23T02:07:42.621564" elapsed="0.000430"/>
</kw>
<return>
<value>${actual}</value>
<status status="PASS" start="2026-08-23T02:07:42.622048" elapsed="0.000028"/>
</return>
<arg>commit-edit</arg>
<doc>Load and send the request from the dataset and compare the returned reply to the one stored in the dataset.</doc>
<status status="PASS" start="2026-08-23T02:07:42.602803" elapsed="0.019368"/>
</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-08-23T02:07:42.623361" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:42.622978" elapsed="0.000447"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.622960" elapsed="0.000489"/>
</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-08-23T02:07:42.623582" elapsed="0.000333"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:07:42.628675" 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-08-23T02:07:42.628274" elapsed="0.000428"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-08-23T02:07:42.628933" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-23T02:07:42.628775" elapsed="0.000217"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.628757" elapsed="0.000259"/>
</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-08-23T02:07:42.629152" 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-08-23T02:07:42.629309" 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-08-23T02:07:42.629467" elapsed="0.000019"/>
</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-08-23T02:07:42.629655" 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-08-23T02:07:42.629811" 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-08-23T02:07:42.629981" 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-08-23T02:07:42.630132" 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-08-23T02:07:42.627983" elapsed="0.002224"/>
</kw>
<status status="PASS" start="2026-08-23T02:07:42.622753" elapsed="0.007504"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-08-23T02:07:42.622414" elapsed="0.007885"/>
</kw>
<doc>Commit the change and check the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:42.521494" elapsed="0.108843"/>
</test>
<test id="s1-s3-s1-t9" name="First_Batch_In_Config_Running_To_Confirm_Edit_After_Commit" line="100">
<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-08-23T02:07:42.633428" elapsed="0.000252"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:07:42.633127" elapsed="0.000620"/>
</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-08-23T02:07:42.634978" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:42.634788" elapsed="0.000252"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.634765" elapsed="0.000305"/>
</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-08-23T02:07:42.640748" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:42.640639" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.640621" elapsed="0.000195"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:42.641808" 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-08-23T02:07:42.641418" elapsed="0.000432"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:07:42.642297" 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-08-23T02:07:42.642001" elapsed="0.000322"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:07:42.642367" elapsed="0.000033"/>
</return>
<msg time="2026-08-23T02:07:42.642525" 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-08-23T02:07:42.641050" elapsed="0.001501"/>
</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-08-23T02:07:42.647808" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:42.647700" elapsed="0.000171"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.647681" elapsed="0.000214"/>
</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-08-23T02:07:42.649099" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:42.648992" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.648974" elapsed="0.000192"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:07:42.649662" level="INFO">${karaf_connection_index} = 18</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-08-23T02:07:42.649300" elapsed="0.000388"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:42.650102" level="INFO">${current_connection_index} = 23</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-08-23T02:07:42.649852" elapsed="0.000276"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:42.689658" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:42.650664" elapsed="0.039154"/>
</kw>
<msg time="2026-08-23T02:07:42.690111" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:07:42.690160" 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 "n "e "t "c "o "n "f "...</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-08-23T02:07:42.650273" elapsed="0.039924"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:07:42.725688" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "F "i "r "s "t "_ "B "a "t "c "h "_ "I "n "_ "C "o "n "f "i "g "_ "R "u "n "n "i "n "g "_ "T "o "_ "C "o "n "f "i "r "m "_ "E "d "i "t "_ "A "f "t "e "[78Cr "[A[78C_
 "C "o "m "m "i "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-08-23T02:07:42.690766" elapsed="0.035141"/>
</kw>
<msg time="2026-08-23T02:07:42.726079" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:07:42.726126" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "F "i "r "s "t "_ "B "a "t "c "h "_ ...</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-08-23T02:07:42.690359" elapsed="0.035804"/>
</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-08-23T02:07:42.726453" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:42.726239" elapsed="0.000290"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.726220" elapsed="0.000334"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:42.727084" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "F "i "r "s "t "_ "B "a "t "c "h "_ "I "n "_ "C "o "n "f "i "g "_ "R "u "n "n "i "n "g "_ "T "o "_ "C "o "n "f "i "r "m "_ "E "d "i "t "_ "A "f "t "e "[78Cr "[A[78C_
 "C "o "m "m "i "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-08-23T02:07:42.726684" elapsed="0.000482"/>
</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-08-23T02:07:42.727435" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:42.727233" elapsed="0.000278"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.727215" elapsed="0.000320"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:07:42.727569" 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-08-23T02:07:42.730520" elapsed="0.000148"/>
</kw>
<msg time="2026-08-23T02:07:42.730739" 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-08-23T02:07:42.729811" elapsed="0.001067"/>
</kw>
<kw name="Open 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-08-23T02:07:42.731674" elapsed="0.000036"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:42.732504" elapsed="0.000035"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:07:42.728421" elapsed="0.004198"/>
</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-08-23T02:07:42.727828" elapsed="0.004909"/>
</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-08-23T02:07:42.648665" elapsed="0.084326"/>
</kw>
<msg time="2026-08-23T02:07:42.733090" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:42.733134" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "F "i "r "s "t "_ "B "a "t "c "h "_ ...</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-08-23T02:07:42.648036" elapsed="0.085136"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:07:42.733372" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:07:42.733260" elapsed="0.000171"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.733241" elapsed="0.000215"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 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-08-23T02:07:42.733853" 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-08-23T02:07:42.734176" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:07:42.734247" 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-08-23T02:07:42.647363" elapsed="0.086992"/>
</kw>
<msg time="2026-08-23T02:07:42.734448" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:42.734493" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "F "i "r "s "t "_ "B "a "t "c "h "_ ...</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-08-23T02:07:42.642953" elapsed="0.091576"/>
</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-08-23T02:07:42.734918" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:42.734604" elapsed="0.000371"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.734587" elapsed="0.000443"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:07:42.642794" elapsed="0.092263"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:07:42.642608" elapsed="0.092482"/>
</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-08-23T02:07:42.640272" elapsed="0.094873"/>
</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-08-23T02:07:42.634440" elapsed="0.100758"/>
</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-08-23T02:07:42.633939" elapsed="0.101303"/>
</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-08-23T02:07:42.631174" elapsed="0.104121"/>
</kw>
<kw name="Load_And_Send_Message">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:42.736272" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/get-config-edit-after-commit-request.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/get-config-edit-after-commit-request.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:42.736440" level="INFO">${data} = &lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="5"&gt;
    &lt;get-config&gt;
        &lt;source&gt;
            &lt;running/&gt;
        &lt;/source&gt;
    &lt;/get-config&gt;
&lt;/rpc&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:42.736052" elapsed="0.000417"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:42.736516" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:07:42.736663" level="INFO">${request} = &lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="5"&gt;
    &lt;get-config&gt;
        &lt;source&gt;
            &lt;running/&gt;
        &lt;/source&gt;
    &lt;/get-config&gt;
&lt;/rpc&gt;
</msg>
<var>${request}</var>
<arg>${name}-request</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:42.735726" elapsed="0.000966"/>
</kw>
<kw name="Send_Message">
<kw name="Transmit_Message">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:42.740271" level="INFO">&lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="5"&gt;</msg>
<arg>${message}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:42.737658" elapsed="0.002672"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:42.740833" level="INFO">&lt;get-config&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:42.740475" elapsed="0.000423"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:42.742289" level="INFO">&lt;source&gt;
            &lt;running/&gt;
        &lt;/source&gt;
    &lt;/get-config&gt;
&lt;/rpc&gt;

]]&gt;]]&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:42.741049" elapsed="0.001297"/>
</kw>
<arg>${message}</arg>
<doc>Transmit message to Netconf connection and discard the echo of the message.</doc>
<status status="PASS" start="2026-08-23T02:07:42.737361" elapsed="0.005042"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:42.803145" level="INFO">&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="5"&gt;
    &lt;data&gt;
        &lt;aaa-encrypt-service-config xmlns="config:aaa:authn:encrypt:service:config"&gt;
            &lt;encrypt-type&gt;AES&lt;/encrypt-type&gt;
            &lt;encrypt-key-length&gt;128&lt;/encrypt-key-length&gt;
            &lt;password-length&gt;12&lt;/password-length&gt;
            &lt;cipher-transforms&gt;AES/GCM/NoPadding&lt;/cipher-transforms&gt;
            &lt;encrypt-key&gt;svW8eCV45iNA&lt;/encrypt-key&gt;
            &lt;encrypt-salt&gt;szGsvGrFGnYbd9nd1t9nEw==&lt;/encrypt-salt&gt;
            &lt;auth-tag-length&gt;128&lt;/auth-tag-length&gt;
            &lt;encrypt-method&gt;PBKDF2WithHmacSHA1&lt;/encrypt-method&gt;
            &lt;encrypt-iteration-count&gt;32768&lt;/encrypt-iteration-count&gt;
        &lt;/aaa-encrypt-service-config&gt;
        &lt;key-stores xmlns="urn:opendaylight:yang:aaa:cert:mdsal"&gt;
            &lt;id&gt;KeyStores:1&lt;/id&gt;
            &lt;ssl-data&gt;
                &lt;bundle-name&gt;opendaylight&lt;/bundle-name&gt;
                &lt;tls-protocols/&gt;
                &lt;odl-keystore&gt;
                    &lt;store-password&gt;szGsvGrFGnYbd9nd1t9nE/fx+V2RdCDYC56eieY+0NUj2isn/xZEgHOUDk8=&lt;/store-password&gt;
                    &lt;sign-alg&gt;SHA1WithRSAEncryption&lt;/sign-alg&gt;
                    &lt;validity&gt;365&lt;/validity&gt;
                    &lt;alias&gt;controller&lt;/alias&gt;
                    &lt;name&gt;ctl.jks&lt;/name&gt;
                    &lt;dname&gt;CN=ODL, OU=Dev, O=LinuxFoundation, L=QC Montreal, C=CA&lt;/dname&gt;
                    &lt;keystoreFile&gt;szGsvGrFGnYbd9nd1t9nE0JpQtr6AxLteOf9yUIRItqLm3NkTNx/el6TA99g1gQs8oNL0ip4IPpl4rt7rFRRPPBAYfnI5Hkh+b8tHGDNwygXVh0qPTd02Ju1oPl0gQiXDeG3LxTe8oV0ONxVMiVDPRLInTiudW5V+NAL0c/qNo47UDfypSDuyY7eUL/QqoheS+TBVtkEivw2fS5E+lNKVmSRnedcKds+JRGqsn0ie6kCPmdOS26Zo5s8D6M2tT+r5in4jHovTq6a3RAmy5ZEJJbHJx/m+Y3778MRBkcD2nV3THNE3WXHfY8z+tUfGap/IGFvqumYYtRL35QgVchzJa3JZ2mMxPc2WLe5i2J1nYXYU6QDbT3UoksnTVzBRz0eznEzQQs47v/7gSOqx+Xug8kld3PASYNi5fZD0YmZGe+lI8ON47+4URudcRM9QmzWRu2LhIpGk8Fk0ueaJh5QF0VbVHat5S7fi1fkSNf2wHTs2pFv75hWSsg+7KDTAgfExMImhBPJ+pc8raT7kLEYiBPXy8NMvlDSksgfvSIcyyharJNj8wtxEFkBVWeX0SFzwlZy9oICi+li5ZM8WhSAbtBGTbpBJ9ADwg8WZo7uznJx+rhIUrjoziNRYqUVp/euIq6rjbE/k6jZCtKTP/qoqy0lShP6M9GfuB6O1akHdOHMWOqX2Q6G8qdVPuyAshiJrIthlJEiY5LX8xhXOQDAuGvwB5hFN/aXa0bMksLEHsTKpXSRnhLCJQxzrKpSSIuQqMzsDUQJQMzch1NGpbSFDwOySU5aeyvsTo4AYPT6Xf6YhGsYDk39B6R/CFsBVO13/4SfkiINKvhpYwQ/vfftmmF/7SXYXp/YR7nffSZTr1ooWJHAaGzqAQw+it9HIaJd7IqTROyhS23F00eX3h/OVwbsBB6PmGXh0LvOoCEfctsl0hTpnouPExetsGBZ7dfPpQIK5UiizhBZjKfr1N3dRVawGP2tFckp3xB0Fr3W8nqRCcWxi5oDGtKcK+z5LinRpCeurFbtZwatTqgh1o/KRXdpQ9E+QmJuyIUnIjoxwuFejwHujtyJR+uAvC90T+G09PnaaMGALkmiJ3kiDn5waQup2qhptMUuF1ZjNirqcbAh7MoEtU02PCQAlBmV0D9Uvp/q9Iw3EFmWhfNT8w/Y03VHw2AK7DY94gJq0vmVUD96ahn4UvWXL5CjFyzXD8ikqdV0fx3zamP53xl6LhQUwBWwiaZVZ6qpfmuSfHRBoOKn5FGmIVpQtgs1i2OYsf8CFMdds6HkzCU9ZR5bcNIUz3U7KzxhaZNpj+tBPjCe5knbuvODRT9AIIZr5NL8zkfLG0R/DySEUJEP9MZFDzaYKqwZUQK9u9lyxXBdRZ/nJJVpYkbOdjraUZOn2wX1MOv768TylMxft2elpWtyo51E7XJca0zO3FT+T6dEDLNuLf70Tjf4ZKlXIs+rbMZRzJiNPU/gOOCncjGnQg7yVNt6CXFzLloYDKyI1+nXar0j8Y7aLeRw4ANqfONtf/a/feF1rxUgkr9kpwha7YR6ZbwLsgEqRGQ1yP0UUYTN4tW9P1fKN220ZErjmNLf5y9d4E1kw0JC9Aowy1OIPHC+GoIH2GXmLp6xrwtvDNX0N9GVVtWxGfdOuRunqus5wncxwKSsJHEV7gC7CttHVSQuYxf+qSVzxDZdZhrEFRDM+2ehQr+jYPjBFDfrFrZ6APcuc6eG8uNgDwFBIT/AvuHqnX/J/C5nmpguP7J8i+L6Tq/vaE06wHDJDHx4janBzQWz38QKtnFFVvSuYlPq4xpjc4XL0w==&lt;/keystoreFile&gt;
                    &lt;key-alg&gt;RSA&lt;/key-alg&gt;
                    &lt;keysize&gt;1024&lt;/keysize&gt;
                &lt;/odl-keystore&gt;
                &lt;cipher-suites&gt;
                    &lt;suiteName/&gt;
                &lt;/cipher-suites&gt;
                &lt;trust-keystore&gt;
                    &lt;keystoreFile&gt;szGsvGrFGnYbd9nd1t9nE0JpQtr6AxLteOf9yIktC+veMTpJpq+B4qQuq9ISdPV1uRcHSk71SvQM3Yb0MmEuAA==&lt;/keystoreFile&gt;
                    &lt;store-password&gt;szGsvGrFGnYbd9nd1t9nE/re1XnJbnW5IKOJusQBPKYGj7gRRA5Mm2KIwp4=&lt;/store-password&gt;
                    &lt;name&gt;truststore.jks&lt;/name&gt;
                &lt;/trust-keystore&gt;
            &lt;/ssl-data&gt;
        &lt;/key-stores&gt;
        &lt;people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:people"&gt;
            &lt;person&gt;
                &lt;id&gt;CUST001&lt;/id&gt;
                &lt;age&gt;32&lt;/age&gt;
            &lt;/person&gt;
        &lt;/people&gt;
        &lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;
            &lt;car-person&gt;
                &lt;car-id&gt;TOY001&lt;/car-id&gt;
                &lt;person-id&gt;CUST001&lt;/person-id&gt;
            &lt;/car-person&gt;
        &lt;/car-people&gt;
        &lt;cars xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car"&gt;
            &lt;car-entry&gt;
                &lt;id&gt;TOY001&lt;/id&gt;
                &lt;model&gt;Toyota Corolla&lt;/model&gt;
                &lt;year&gt;2016&lt;/year&gt;
                &lt;manufacturer&gt;Toyota&lt;/manufacturer&gt;
                &lt;category&gt;sedan&lt;/category&gt;
            &lt;/car-entry&gt;
        &lt;/cars&gt;
    &lt;/data&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<msg time="2026-08-23T02:07:42.803332" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="5"&gt;
    &lt;data&gt;
        &lt;aaa-encrypt-service-config xmlns="config:aaa:...</msg>
<var>${reply}</var>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:42.742542" elapsed="0.060818"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:42.803409" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T02:07:42.803561" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="5"&gt;
    &lt;data&gt;
        &lt;aaa-encrypt-service-config xmlns="config:aaa:...</msg>
<var>${reply}</var>
<arg>${request}</arg>
<doc>Send message to Netconf connection and get the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:42.736851" elapsed="0.066740"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:42.803636" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:07:42.803783" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="5"&gt;
    &lt;data&gt;
        &lt;aaa-encrypt-service-config xmlns="config:aaa:...</msg>
<var>${reply}</var>
<arg>get-config-edit-after-commit</arg>
<doc>Load a message from the data file set, send it to Netconf and return the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:42.735453" elapsed="0.068358"/>
</kw>
<kw name="Check_First_Batch_Data_Present">
<kw name="Check_First_Batch_Data">
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;TOY001&lt;/id&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:42.805039" elapsed="0.000312"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;TOY001&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:42.804582" elapsed="0.000824"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CUST001&lt;/id&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:42.805982" elapsed="0.000286"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;CUST001&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:42.805549" elapsed="0.000773"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;car-id&gt;TOY001&lt;/car-id&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:42.806893" elapsed="0.000283"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;car-id&gt;TOY001&lt;/car-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:42.806462" elapsed="0.000769"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUST001&lt;/person-id&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:42.807786" elapsed="0.000307"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUST001&lt;/person-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:42.807373" elapsed="0.000775"/>
</kw>
<arg>${reply}</arg>
<arg>BuiltIn.Should_Contain</arg>
<status status="PASS" start="2026-08-23T02:07:42.804263" elapsed="0.003942"/>
</kw>
<arg>${reply}</arg>
<status status="PASS" start="2026-08-23T02:07:42.803952" elapsed="0.004310"/>
</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-08-23T02:07:42.809454" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:42.809087" elapsed="0.000429"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.809068" elapsed="0.000473"/>
</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-08-23T02:07:42.809678" elapsed="0.000321"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:07:42.814743" 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-08-23T02:07:42.814332" elapsed="0.000438"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-08-23T02:07:42.815004" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:07:42.814860" elapsed="0.000202"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.814826" elapsed="0.000260"/>
</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-08-23T02:07:42.815221" 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-08-23T02:07:42.815377" 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-08-23T02:07:42.815534" 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-08-23T02:07:42.815685" 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-08-23T02:07:42.815858" 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-08-23T02:07:42.816017" 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-08-23T02:07:42.816169" 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-08-23T02:07:42.814044" elapsed="0.002239"/>
</kw>
<status status="PASS" start="2026-08-23T02:07:42.808875" elapsed="0.007458"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-08-23T02:07:42.808516" elapsed="0.007857"/>
</kw>
<doc>Check that the change is now in the configuration.</doc>
<status status="PASS" start="2026-08-23T02:07:42.630597" elapsed="0.185815"/>
</test>
<test id="s1-s3-s1-t10" name="Terminate_Connection_Gracefully" 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-08-23T02:07:42.819654" elapsed="0.000253"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:07:42.819409" elapsed="0.000553"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:42.820910" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:42.820785" elapsed="0.000171"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.820766" elapsed="0.000212"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:42.825404" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:42.825297" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.825279" elapsed="0.000193"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:42.826437" 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-08-23T02:07:42.826061" elapsed="0.000403"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:07:42.826922" 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-08-23T02:07:42.826610" elapsed="0.000338"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:07:42.826992" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:07:42.827145" 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-08-23T02:07:42.825686" elapsed="0.001484"/>
</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-08-23T02:07:42.832304" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:42.832197" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.832179" elapsed="0.000194"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:42.833540" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:42.833431" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.833413" elapsed="0.000195"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:07:42.834119" level="INFO">${karaf_connection_index} = 18</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-08-23T02:07:42.833738" elapsed="0.000408"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:42.834531" level="INFO">${current_connection_index} = 23</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-08-23T02:07:42.834289" elapsed="0.000268"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:42.868500" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:42.835098" elapsed="0.033582"/>
</kw>
<msg time="2026-08-23T02:07:42.868868" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:07:42.868916" 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 "n "e "t "c "o "n "f "...</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-08-23T02:07:42.834703" elapsed="0.034250"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:07:42.893056" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "T "e "r "m "i "n "a "t "e "_ "C "o "n "n "e "c "t "i "o "n "_ "G "r "a "c "e "f "u "l "l "y "[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-08-23T02:07:42.869491" elapsed="0.023744"/>
</kw>
<msg time="2026-08-23T02:07:42.893403" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:07:42.893449" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "T "e "r "m "i "n "a "t "e "_ "C "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-08-23T02:07:42.869110" elapsed="0.024376"/>
</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-08-23T02:07:42.893820" elapsed="0.000042"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:42.893609" elapsed="0.000310"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.893588" elapsed="0.000357"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:42.894447" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "T "e "r "m "i "n "a "t "e "_ "C "o "n "n "e "c "t "i "o "n "_ "G "r "a "c "e "f "u "l "l "y "[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-08-23T02:07:42.894076" elapsed="0.000444"/>
</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-08-23T02:07:42.894812" elapsed="0.000046"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:42.894586" elapsed="0.000327"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.894568" elapsed="0.000370"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:07:42.894971" 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-08-23T02:07:42.897795" elapsed="0.000167"/>
</kw>
<msg time="2026-08-23T02:07:42.898032" 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-08-23T02:07:42.897161" elapsed="0.000969"/>
</kw>
<kw name="Open 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-08-23T02:07:42.899154" elapsed="0.000039"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:42.899987" elapsed="0.000036"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:07:42.895787" elapsed="0.004316"/>
</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-08-23T02:07:42.895218" elapsed="0.004998"/>
</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-08-23T02:07:42.833134" elapsed="0.067181"/>
</kw>
<msg time="2026-08-23T02:07:42.900405" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:42.900449" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "T "e "r "m "i "n "a "t "e "_ "C "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-08-23T02:07:42.832510" elapsed="0.067975"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:07:42.900665" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:07:42.900560" elapsed="0.000164"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.900541" elapsed="0.000206"/>
</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-08-23T02:07:42.901312" 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-08-23T02:07:42.901632" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:07:42.901703" 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-08-23T02:07:42.831861" elapsed="0.069948"/>
</kw>
<msg time="2026-08-23T02:07:42.901922" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:42.901965" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "T "e "r "m "i "n "a "t "e "_ "C "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-08-23T02:07:42.827518" elapsed="0.074483"/>
</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-08-23T02:07:42.902312" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:42.902076" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.902059" elapsed="0.000329"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:07:42.827389" elapsed="0.075022"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:07:42.827222" elapsed="0.075217"/>
</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-08-23T02:07:42.824940" elapsed="0.077551"/>
</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-08-23T02:07:42.820502" elapsed="0.082056"/>
</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-08-23T02:07:42.820099" elapsed="0.082502"/>
</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-08-23T02:07:42.817245" elapsed="0.085442"/>
</kw>
<kw name="Close_ODL_Netconf_Connection_Gracefully">
<kw name="Perform_Test">
<kw name="Load_And_Send_Message">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:42.904232" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/close-session-request.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/close-session-request.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:42.904388" level="INFO">${data} = &lt;rpc message-id="999" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
    &lt;close-session/&gt;
&lt;/rpc&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:42.904022" elapsed="0.000393"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:42.904460" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:42.904607" level="INFO">${request} = &lt;rpc message-id="999" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
    &lt;close-session/&gt;
&lt;/rpc&gt;
</msg>
<var>${request}</var>
<arg>${name}-request</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:42.903699" elapsed="0.000935"/>
</kw>
<kw name="Send_Message">
<kw name="Transmit_Message">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:42.907115" level="INFO">&lt;rpc message-id="999" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;</msg>
<arg>${message}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:42.905381" elapsed="0.001793"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:42.907721" level="INFO">&lt;close-session/&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:42.907319" elapsed="0.000454"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:42.908409" level="INFO">&lt;/rpc&gt;

]]&gt;]]&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:42.907928" elapsed="0.000534"/>
</kw>
<arg>${message}</arg>
<doc>Transmit message to Netconf connection and discard the echo of the message.</doc>
<status status="PASS" start="2026-08-23T02:07:42.905081" elapsed="0.003438"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:42.913732" level="INFO">&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="999"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<msg time="2026-08-23T02:07:42.913823" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="999"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:42.908656" elapsed="0.005209"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:42.913912" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T02:07:42.914062" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="999"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${request}</arg>
<doc>Send message to Netconf connection and get the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:42.904773" elapsed="0.009317"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:42.914134" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:07:42.914276" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="999"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${actual}</var>
<arg>${name}</arg>
<doc>Load a message from the data file set, send it to Netconf and return the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:42.903412" elapsed="0.010892"/>
</kw>
<kw name="Load_Expected_Reply">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:42.915509" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/close-session-reply.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/close-session-reply.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:42.915651" level="INFO">${data} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="999"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:42.915299" elapsed="0.000380"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:42.915724" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:42.915892" level="INFO">${expected_reply} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="999"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected_reply}</var>
<arg>${name}-reply</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:42.914992" elapsed="0.000928"/>
</kw>
<return>
<value>${expected_reply}</value>
<status status="PASS" start="2026-08-23T02:07:42.915963" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:07:42.916108" level="INFO">${expected} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="999"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected}</var>
<arg>${name}</arg>
<doc>Load the expected reply from the data file set and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:42.914455" elapsed="0.001680"/>
</kw>
<kw name="Remove String" owner="String">
<msg time="2026-08-23T02:07:42.916479" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="999"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>]]&gt;]]&gt;</arg>
<doc>Removes all ``removables`` from the given ``string``.</doc>
<status status="PASS" start="2026-08-23T02:07:42.916278" elapsed="0.000229"/>
</kw>
<kw name="Strip String" owner="String">
<msg time="2026-08-23T02:07:42.916892" level="INFO">${actual} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="999"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>mode=both</arg>
<doc>Remove leading and/or trailing whitespaces from the given string.</doc>
<status status="PASS" start="2026-08-23T02:07:42.916650" elapsed="0.000272"/>
</kw>
<kw name="Elements Should Be Equal" owner="XML">
<arg>${actual}</arg>
<arg>${expected}</arg>
<arg>normalize_whitespace=True</arg>
<doc>Verifies that the given ``source`` element is equal to ``expected``.</doc>
<status status="PASS" start="2026-08-23T02:07:42.917066" elapsed="0.000468"/>
</kw>
<return>
<value>${actual}</value>
<status status="PASS" start="2026-08-23T02:07:42.917627" elapsed="0.000032"/>
</return>
<arg>close-session</arg>
<doc>Load and send the request from the dataset and compare the returned reply to the one stored in the dataset.</doc>
<status status="PASS" start="2026-08-23T02:07:42.903141" elapsed="0.014618"/>
</kw>
<kw name="Abort_ODL_Netconf_Connection">
<if>
<branch type="IF" condition="${ssh_netconf_pid} == -1">
<return>
<status status="NOT RUN" start="2026-08-23T02:07:42.918277" elapsed="0.000040"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:42.918157" elapsed="0.000189"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.918140" elapsed="0.000229"/>
</if>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:07:42.918816" level="INFO">${kill_command} = kill 4474</msg>
<var>${kill_command}</var>
<arg>kill ${ssh_netconf_pid}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:07:42.918503" elapsed="0.000363"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T02:07:42.919350" level="INFO">${ssh_netconf_pid} = -1</msg>
<arg>${ssh_netconf_pid}</arg>
<arg>-1</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-23T02:07:42.919019" elapsed="0.000372"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${ssh_control}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-23T02:07:42.919531" elapsed="0.000132"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:42.921175" level="INFO">kill 4474</msg>
<arg>${kill_command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:42.919795" elapsed="0.001438"/>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-08-23T02:07:42.922902" level="INFO">[?2004l-bash: kill: (4474) - No such process
[?2004h[jenkins@releng-19126-54-0-builder-0 ~]&gt;</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="PASS" start="2026-08-23T02:07:42.921377" elapsed="0.001584"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${ssh_netconf}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-23T02:07:42.923096" elapsed="0.000134"/>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-08-23T02:07:42.924255" level="INFO">Connection to 127.0.0.1 closed by remote host.
[?2004h[jenkins@releng-19126-54-0-builder-0 ~]&gt;</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="PASS" start="2026-08-23T02:07:42.923365" elapsed="0.000941"/>
</kw>
<doc>Correctly close the Netconf connection and make sure it is really dead.</doc>
<status status="PASS" start="2026-08-23T02:07:42.917976" elapsed="0.006381"/>
</kw>
<status status="PASS" start="2026-08-23T02:07:42.902863" elapsed="0.021539"/>
</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-08-23T02:07:42.925567" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:42.925204" elapsed="0.000424"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.925186" elapsed="0.000467"/>
</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-08-23T02:07:42.925785" elapsed="0.000326"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:07:42.930731" 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-08-23T02:07:42.930328" elapsed="0.000430"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-08-23T02:07:42.930992" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-23T02:07:42.930849" elapsed="0.000200"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.930813" elapsed="0.000261"/>
</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-08-23T02:07:42.931210" 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-08-23T02:07:42.931364" 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-08-23T02:07:42.931517" 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-08-23T02:07:42.931666" 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-08-23T02:07:42.931816" elapsed="0.000034"/>
</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-08-23T02:07:42.931984" 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-08-23T02:07:42.932133" 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-08-23T02:07:42.930012" elapsed="0.002197"/>
</kw>
<status status="PASS" start="2026-08-23T02:07:42.924997" elapsed="0.007261"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-08-23T02:07:42.924637" elapsed="0.007662"/>
</kw>
<doc>Close the session and disconnect.</doc>
<status status="PASS" start="2026-08-23T02:07:42.816694" elapsed="0.115643"/>
</test>
<test id="s1-s3-s1-t11" name="Reconnect_To_ODL_Netconf_After_Graceful_Session_End" line="109">
<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-08-23T02:07:42.935639" elapsed="0.000229"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:07:42.935390" elapsed="0.000534"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:42.936873" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:42.936749" elapsed="0.000172"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.936729" elapsed="0.000214"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:42.941343" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:42.941237" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.941219" elapsed="0.000192"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:42.942398" 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-08-23T02:07:42.942019" elapsed="0.000405"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:07:42.942885" 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-08-23T02:07:42.942572" elapsed="0.000340"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:07:42.942957" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:07:42.943110" 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-08-23T02:07:42.941618" elapsed="0.001517"/>
</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-08-23T02:07:42.948147" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:42.948041" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.948021" 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-08-23T02:07:42.949384" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:42.949277" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:42.949259" elapsed="0.000193"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:07:42.949968" level="INFO">${karaf_connection_index} = 18</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-08-23T02:07:42.949582" elapsed="0.000413"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:42.950395" level="INFO">${current_connection_index} = 23</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-08-23T02:07:42.950150" elapsed="0.000271"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:42.986306" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:42.950962" elapsed="0.035525"/>
</kw>
<msg time="2026-08-23T02:07:42.986656" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:07:42.986702" 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 "n "e "t "c "o "n "f "...</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-08-23T02:07:42.950566" elapsed="0.036172"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:07:43.030495" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "R "e "c "o "n "n "e "c "t "_ "T "o "_ "O "D "L "_ "N "e "t "c "o "n "f "_ "A "f "t "e "r "_ "G "r "a "c "e "f "u "l "_ "S "e "s "s "i "o "n "_ "E "n "[78Cd "[A[78C"[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-08-23T02:07:42.987302" elapsed="0.043389"/>
</kw>
<msg time="2026-08-23T02:07:43.030887" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:07:43.030935" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "R "e "c "o "n "n "e "c "t "_ "T "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-08-23T02:07:42.986922" elapsed="0.044050"/>
</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-08-23T02:07:43.031260" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:43.031050" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:43.031030" elapsed="0.000333"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:43.031885" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "R "e "c "o "n "n "e "c "t "_ "T "o "_ "O "D "L "_ "N "e "t "c "o "n "f "_ "A "f "t "e "r "_ "G "r "a "c "e "f "u "l "_ "S "e "s "s "i "o "n "_ "E "n "[78Cd "[A[78C"[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-08-23T02:07:43.031496" elapsed="0.000507"/>
</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-08-23T02:07:43.032277" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:43.032071" elapsed="0.000284"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:43.032052" elapsed="0.000328"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:07:43.032414" 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-08-23T02:07:43.035271" elapsed="0.000148"/>
</kw>
<msg time="2026-08-23T02:07:43.035489" 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-08-23T02:07:43.034612" elapsed="0.000974"/>
</kw>
<kw name="Open 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-08-23T02:07:43.036392" elapsed="0.000038"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:43.037255" elapsed="0.000038"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:07:43.033274" elapsed="0.004098"/>
</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-08-23T02:07:43.032671" elapsed="0.004816"/>
</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-08-23T02:07:42.948980" elapsed="0.088605"/>
</kw>
<msg time="2026-08-23T02:07:43.037676" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:43.037719" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "R "e "c "o "n "n "e "c "t "_ "T "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-08-23T02:07:42.948351" elapsed="0.089405"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:07:43.038116" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:07:43.038003" elapsed="0.000173"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:43.037813" elapsed="0.000387"/>
</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-08-23T02:07:43.038574" 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-08-23T02:07:43.038914" elapsed="0.000026"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:07:43.038986" 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-08-23T02:07:42.947693" elapsed="0.091401"/>
</kw>
<msg time="2026-08-23T02:07:43.039187" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:43.039231" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "R "e "c "o "n "n "e "c "t "_ "T "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-08-23T02:07:42.943481" elapsed="0.095787"/>
</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-08-23T02:07:43.039578" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:43.039343" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:43.039326" elapsed="0.000329"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:07:42.943353" elapsed="0.096325"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:07:42.943186" elapsed="0.096521"/>
</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-08-23T02:07:42.940880" elapsed="0.098879"/>
</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-08-23T02:07:42.936464" elapsed="0.103348"/>
</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-08-23T02:07:42.936061" elapsed="0.103854"/>
</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-08-23T02:07:42.933191" elapsed="0.106778"/>
</kw>
<kw name="Open_ODL_Netconf_Connection">
<kw name="Reopen_ODL_Netconf_Connection">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:43.043197" level="INFO">sshpass -p admin ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no admin@127.0.0.1 -p 2830 -s netconf</msg>
<arg>sshpass -p ${ssh_password} ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no ${ssh_user}\@127.0.0.1 -p ${ssh_port} -s netconf</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:43.040658" elapsed="0.002597"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:43.591721" level="INFO">[?2004lWarning: Permanently added '[127.0.0.1]:2830' (ECDSA) to the list of known hosts.
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
    &lt;capabilities&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults?module=ietf-netconf-with-defaults&amp;amp;revision=2011-06-01&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-tcp-server?module=ietf-tcp-server&amp;amp;revision=2024-10-10&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:iana-ssh-key-exchange-algs?module=iana-ssh-key-exchange-algs&amp;amp;revision=2024-10-16&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:iana-crypt-hash?module=iana-crypt-hash&amp;amp;revision=2014-08-06&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring?module=ietf-netconf-monitoring&amp;amp;revision=2010-10-04&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:netconf-node-topology?module=netconf-node-topology&amp;amp;revision=2025-12-05&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:device:notification?module=odl-device-notification&amp;amp;revision=2024-02-18&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-netconf-nmda?module=ietf-netconf-nmda&amp;amp;revision=2019-01-07&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:netconf:device?module=odl-netconf-device&amp;amp;revision=2025-12-05&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-http-server?module=ietf-http-server&amp;amp;revision=2026-02-04&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-ssh-common?module=ietf-ssh-common&amp;amp;revision=2024-10-10&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:yang:extension:codegen?module=odl-codegen-extensions&amp;amp;revision=2024-06-27&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-yang-library?module=ietf-yang-library&amp;amp;revision=2019-01-04&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-netconf-server?module=ietf-netconf-server&amp;amp;revision=2025-12-04&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:params:xml:ns:yang:aaa?module=aaa&amp;amp;revision=2016-12-14&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-x509-cert-to-name?module=ietf-x509-cert-to-name&amp;amp;revision=2014-12-10&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-yang-patch?module=ietf-yang-patch&amp;amp;revision=2017-02-22&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-origin?module=ietf-origin&amp;amp;revision=2018-02-14&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:params:xml:ns:yang:controller:md:sal:remote?module=sal-remote&amp;amp;revision=2014-01-14&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-ip?module=ietf-ip&amp;amp;revision=2018-02-22&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:iana-http-versions?module=iana-http-versions&amp;amp;revision=2026-02-04&lt;/capability&gt;
        &lt;capability&gt;tag:opendaylight.org,2017:controller:yang:lowlevel:target?module=odl-mdsal-lowlevel-target&amp;amp;revision=2017-02-15&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-yang-metadata?module=ietf-yang-metadata&amp;amp;revision=2016-08-05&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-truststore?module=ietf-truststore&amp;amp;revision=2024-10-10&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:yang:extension:yang-ext?module=yang-ext&amp;amp;revision=2013-07-09&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-purchase?module=car-purchase&amp;amp;revision=2014-08-18&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:netconf:capability:url:1.0?scheme=file&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-netconf-notifications?module=ietf-netconf-notifications&amp;amp;revision=2012-02-06&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-crypto-types?module=ietf-crypto-types&amp;amp;revision=2024-10-10&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-netconf-client?module=ietf-netconf-client&amp;amp;revision=2025-12-04&lt;/capability&gt;
        &lt;capability&gt;tag:opendaylight.org,2017:controller:yang:lowlevel:control?module=odl-mdsal-lowlevel-control&amp;amp;revision=2017-02-15&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:netconf:capability:exi:1.0&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:netconf:base:1.0?module=ietf-netconf&amp;amp;revision=2011-06-01&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-restconf-monitoring?module=ietf-restconf-monitoring&amp;amp;revision=2017-01-26&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-datastores?module=ietf-datastores&amp;amp;revision=2018-02-14&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:yang:aaa:cert:mdsal?module=aaa-cert-mdsal&amp;amp;revision=2016-03-21&lt;/capability&gt;
        &lt;capability&gt;urn:TBD:params:xml:ns:yang:network-topology?module=network-topology&amp;amp;revision=2013-10-21&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-restconf-server?module=ietf-restconf-server&amp;amp;revision=2025-12-04&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-tcp-common?module=ietf-tcp-common&amp;amp;revision=2024-10-10&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:yang:aaa:cert:rpc?module=aaa-cert-rpc&amp;amp;revision=2015-12-15&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-yang-types?module=ietf-yang-types&amp;amp;revision=2013-07-15&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:netconf-node-optional?module=netconf-node-optional&amp;amp;revision=2022-12-25&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:params:xml:ns:yang:controller:md:sal:cluster:admin?module=cluster-admin&amp;amp;revision=2025-01-31&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-restconf-subscribed-notifications?module=ietf-restconf-subscribed-notifications&amp;amp;revision=2019-11-17&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:netconf:capability:candidate:1.0&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-interfaces?module=ietf-interfaces&amp;amp;revision=2018-02-20&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:params:xml:ns:yang:controller:config:distributed-datastore-provider?module=distributed-datastore-provider&amp;amp;revision=2025-01-30&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-tls-client?module=ietf-tls-client&amp;amp;revision=2024-10-10&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:yang:http:client?module=odl-http-client&amp;amp;revision=2026-07-17&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people?module=car-people&amp;amp;revision=2014-08-18&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:controller:basic-rpc-test?module=basic-rpc-test&amp;amp;revision=2016-01-20&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-tls-server?module=ietf-tls-server&amp;amp;revision=2024-10-10&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-netconf-acm?module=ietf-netconf-acm&amp;amp;revision=2018-02-14&lt;/capability&gt;
        &lt;capability&gt;tag:opendaylight.org,2017:controller:yang:lowlevel:common?module=odl-mdsal-lowlevel-common&amp;amp;revision=2017-02-15&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:aaa:password:service:config?module=aaa-password-service-config&amp;amp;revision=2017-06-19&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:params:xml:ns:yang:controller:entity-owners?module=odl-entity-owners&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:yang:aaa:cert?module=aaa-cert&amp;amp;revision=2015-11-26&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-restconf?module=ietf-restconf&amp;amp;revision=2017-01-26&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:people?module=people&amp;amp;revision=2014-08-18&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:yang:quic:common?module=odl-quic-common&amp;amp;revision=2026-04-15&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:iana-ssh-mac-algs?module=iana-ssh-mac-algs&amp;amp;revision=2024-10-16&lt;/capability&gt;
        &lt;capability&gt;config:aaa:authn:encrypt:service:config?module=aaa-encrypt-service-config&amp;amp;revision=2024-02-02&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-keystore?module=ietf-keystore&amp;amp;revision=2024-10-10&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:params:xml:ns:yang:netconf:monitoring?module=odl-netconf-monitoring&amp;amp;revision=2022-07-18&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:netconf:keystore?module=netconf-keystore&amp;amp;revision=2024-07-08&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-yang-schema-mount?module=ietf-yang-schema-mount&amp;amp;revision=2019-01-14&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-ssh-server?module=ietf-ssh-server&amp;amp;revision=2024-10-10&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:yang:http:server?module=odl-http-server&amp;amp;revision=2026-04-15&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-http-client?module=ietf-http-client&amp;amp;revision=2024-02-08&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-ssh-client?module=ietf-ssh-client&amp;amp;revision=2024-10-10&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:netconf:capability:interleave:1.0&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:netconf:notification:1.0?module=notifications&amp;amp;revision=2008-07-14&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:iana-ssh-public-key-algs?module=iana-ssh-public-key-algs&amp;amp;revision=2024-10-16&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:netmod:notification?module=nc-notifications&amp;amp;revision=2008-07-14&lt;/capability&gt;
        &lt;capability&gt;urn:sal:restconf:event:subscription?module=sal-remote-augment&amp;amp;revision=2023-11-03&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:params:xml:ns:yang:controller:cds:types?module=odl-controller-cds-types&amp;amp;revision=2025-01-31&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-network-instance?module=ietf-network-instance&amp;amp;revision=2019-01-21&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-tls-common?module=ietf-tls-common&amp;amp;revision=2024-10-10&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:aaa:app:config?module=aaa-app-config&amp;amp;revision=2017-06-19&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:netconf:base:1.1&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:params:xml:ns:yang:mdsal:core:general-entity?module=odl-general-entity&amp;amp;revision=2015-09-30&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:netconf:base:1.0&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-udp-server?module=ietf-udp-server&amp;amp;revision=2025-12-16&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:netconf:capability:notification:1.0&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-udp-client?module=ietf-udp-client&amp;amp;revision=2025-12-16&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car?module=car&amp;amp;revision=2014-08-18&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:iana-ssh-encryption-algs?module=iana-ssh-encryption-algs&amp;amp;revision=2024-10-16&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-inet-types?module=ietf-inet-types&amp;amp;revision=2013-07-15&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-tcp-client?module=ietf-tcp-client&amp;amp;revision=2024-10-10&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-subscribed-notifications?module=ietf-subscribed-notifications&amp;amp;revision=2019-09-09&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:iana-tls-cipher-suite-algs?module=iana-tls-cipher-suite-algs&amp;amp;revision=2024-10-16&lt;/capability&gt;
    &lt;/capabilities&gt;
    &lt;session-id&gt;2&lt;/session-id&gt;
&lt;/hello&gt;
]]&gt;]]&gt;</msg>
<msg time="2026-08-23T02:07:43.592057" level="INFO">${hello} = [?2004lWarning: Permanently added '[127.0.0.1]:2830' (ECDSA) to the list of known hosts.
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;hello xmlns="urn:ietf:params:xml:ns:netconf:base:1...</msg>
<var>${hello}</var>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:43.043405" elapsed="0.548684"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${ssh_control}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-23T02:07:43.592254" elapsed="0.000141"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-23T02:07:43.592651" level="INFO">Executing command 'ps -A | grep sshpass | awk '{print $1}''.</msg>
<msg time="2026-08-23T02:07:43.616015" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-23T02:07:43.616226" level="INFO">${pid} = 4504</msg>
<var>${pid}</var>
<arg>ps -A | grep sshpass | awk '{print $1}'</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-23T02:07:43.592548" elapsed="0.023733"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T02:07:43.617503" level="INFO">${ssh_netconf_pid} = 4504</msg>
<arg>${ssh_netconf_pid}</arg>
<arg>${pid}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-23T02:07:43.616631" elapsed="0.000967"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${ssh_netconf}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-23T02:07:43.617946" elapsed="0.000301"/>
</kw>
<return>
<value>${hello}</value>
<status status="PASS" start="2026-08-23T02:07:43.618346" elapsed="0.000067"/>
</return>
<msg time="2026-08-23T02:07:43.618701" level="INFO">${hello} = [?2004lWarning: Permanently added '[127.0.0.1]:2830' (ECDSA) to the list of known hosts.
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;hello xmlns="urn:ietf:params:xml:ns:netconf:base:1...</msg>
<var>${hello}</var>
<doc>Reopen a closed netconf connection.</doc>
<status status="PASS" start="2026-08-23T02:07:43.040397" elapsed="0.578373"/>
</kw>
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:43.620262" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/hello.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/hello.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:43.620671" level="INFO">${data} = &lt;hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
&lt;capabilities&gt;
&lt;capability&gt;urn:ietf:params:netconf:base:1.0&lt;/capability&gt;
&lt;/capabilities&gt;
&lt;/hello&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:43.619732" elapsed="0.001003"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:43.620872" elapsed="0.000067"/>
</return>
<msg time="2026-08-23T02:07:43.621216" level="INFO">${hello_message} = &lt;hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
&lt;capabilities&gt;
&lt;capability&gt;urn:ietf:params:netconf:base:1.0&lt;/capability&gt;
&lt;/capabilities&gt;
&lt;/hello&gt;
</msg>
<var>${hello_message}</var>
<arg>hello</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:43.619110" elapsed="0.002166"/>
</kw>
<kw name="Transmit_Message">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:43.624869" level="INFO">&lt;hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;</msg>
<arg>${message}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:43.622287" elapsed="0.002717"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:43.626757" level="INFO">&lt;capabilities&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:43.625342" elapsed="0.001608"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:43.629391" level="INFO">&lt;capability&gt;urn:ietf:params:netconf:base:1.0&lt;/capability&gt;
&lt;/capabilities&gt;
&lt;/hello&gt;

]]&gt;]]&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:43.627298" elapsed="0.002151"/>
</kw>
<arg>${hello_message}</arg>
<doc>Transmit message to Netconf connection and discard the echo of the message.</doc>
<status status="PASS" start="2026-08-23T02:07:43.621576" elapsed="0.007934"/>
</kw>
<return>
<value>${hello}</value>
<status status="PASS" start="2026-08-23T02:07:43.629551" elapsed="0.000029"/>
</return>
<doc>Open a prepared netconf connecion.</doc>
<status status="PASS" start="2026-08-23T02:07:43.040117" elapsed="0.589562"/>
</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-08-23T02:07:43.630919" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:43.630518" elapsed="0.000465"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:43.630499" elapsed="0.000510"/>
</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-08-23T02:07:43.631144" elapsed="0.000336"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:07:43.636204" 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-08-23T02:07:43.635766" elapsed="0.000465"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-08-23T02:07:43.636446" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:07:43.636305" elapsed="0.000197"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:43.636286" elapsed="0.000240"/>
</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-08-23T02:07:43.636666" elapsed="0.000024"/>
</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-08-23T02:07:43.636826" elapsed="0.000036"/>
</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-08-23T02:07:43.637004" elapsed="0.000019"/>
</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-08-23T02:07:43.637213" 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-08-23T02:07:43.637369" 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-08-23T02:07:43.637523" 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-08-23T02:07:43.637674" 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-08-23T02:07:43.635465" elapsed="0.002286"/>
</kw>
<status status="PASS" start="2026-08-23T02:07:43.630308" elapsed="0.007494"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-08-23T02:07:43.629954" elapsed="0.007905"/>
</kw>
<doc>Reconnect to ODL Netconf and fail if that is not possible.</doc>
<status status="PASS" start="2026-08-23T02:07:42.932627" elapsed="0.705274"/>
</test>
<test id="s1-s3-s1-t12" name="First_Batch_In_Config_Running_After_Reconnect" line="113">
<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-08-23T02:07:43.641037" elapsed="0.000212"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:07:43.640770" elapsed="0.000534"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:43.642259" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:43.642149" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:43.642131" 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-08-23T02:07:43.646970" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:43.646862" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:43.646830" elapsed="0.000208"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:43.648039" 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-08-23T02:07:43.647631" elapsed="0.000435"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:07:43.648508" 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-08-23T02:07:43.648214" elapsed="0.000320"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:07:43.648578" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:07:43.648737" 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-08-23T02:07:43.647256" elapsed="0.001506"/>
</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-08-23T02:07:43.653822" elapsed="0.000030"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:43.653716" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:43.653697" elapsed="0.000209"/>
</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-08-23T02:07:43.655103" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:43.654996" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:43.654978" elapsed="0.000192"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:07:43.655682" level="INFO">${karaf_connection_index} = 18</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-08-23T02:07:43.655310" elapsed="0.000398"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:43.656124" level="INFO">${current_connection_index} = 23</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-08-23T02:07:43.655877" elapsed="0.000273"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:43.694514" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:43.656671" elapsed="0.038031"/>
</kw>
<msg time="2026-08-23T02:07:43.694901" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:07:43.694949" 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 "n "e "t "c "o "n "f "...</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-08-23T02:07:43.656298" elapsed="0.038688"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:07:43.725844" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "F "i "r "s "t "_ "B "a "t "c "h "_ "I "n "_ "C "o "n "f "i "g "_ "R "u "n "n "i "n "g "_ "A "f "t "e "r "_ "R "e "c "o "n "n "e "c "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-08-23T02:07:43.695580" elapsed="0.030451"/>
</kw>
<msg time="2026-08-23T02:07:43.726203" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:07:43.726264" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "F "i "r "s "t "_ "B "a "t "c "h "_ ...</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-08-23T02:07:43.695145" elapsed="0.031156"/>
</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-08-23T02:07:43.726591" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:43.726379" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:43.726360" elapsed="0.000333"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:43.727225" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "F "i "r "s "t "_ "B "a "t "c "h "_ "I "n "_ "C "o "n "f "i "g "_ "R "u "n "n "i "n "g "_ "A "f "t "e "r "_ "R "e "c "o "n "n "e "c "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-08-23T02:07:43.726821" elapsed="0.000482"/>
</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-08-23T02:07:43.727571" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:43.727369" elapsed="0.000281"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:43.727351" elapsed="0.000324"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:07:43.727709" elapsed="0.000027"/>
</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-08-23T02:07:43.730752" elapsed="0.000173"/>
</kw>
<msg time="2026-08-23T02:07:43.730998" 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-08-23T02:07:43.729947" elapsed="0.001153"/>
</kw>
<kw name="Open 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-08-23T02:07:43.731923" elapsed="0.000170"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:43.732894" elapsed="0.000037"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:07:43.728549" elapsed="0.004463"/>
</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-08-23T02:07:43.727982" elapsed="0.005147"/>
</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-08-23T02:07:43.654672" elapsed="0.078555"/>
</kw>
<msg time="2026-08-23T02:07:43.733319" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:43.733362" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "F "i "r "s "t "_ "B "a "t "c "h "_ ...</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-08-23T02:07:43.654046" elapsed="0.079354"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:07:43.733583" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-08-23T02:07:43.733477" elapsed="0.000164"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:43.733459" elapsed="0.000206"/>
</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-08-23T02:07:43.734253" 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-08-23T02:07:43.734578" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:07:43.734649" 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-08-23T02:07:43.653380" elapsed="0.081376"/>
</kw>
<msg time="2026-08-23T02:07:43.734868" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:43.734914" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "F "i "r "s "t "_ "B "a "t "c "h "_ ...</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-08-23T02:07:43.649144" elapsed="0.085807"/>
</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-08-23T02:07:43.735264" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:43.735027" elapsed="0.000290"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:43.735009" elapsed="0.000365"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:07:43.649013" elapsed="0.086388"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:07:43.648820" elapsed="0.086613"/>
</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-08-23T02:07:43.646487" elapsed="0.089002"/>
</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-08-23T02:07:43.641863" elapsed="0.093681"/>
</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-08-23T02:07:43.641441" elapsed="0.094147"/>
</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-08-23T02:07:43.638781" elapsed="0.096857"/>
</kw>
<kw name="Load_And_Send_Message">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:43.736611" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/get-config-edit-after-commit-request.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/get-config-edit-after-commit-request.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:43.736749" level="INFO">${data} = &lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="5"&gt;
    &lt;get-config&gt;
        &lt;source&gt;
            &lt;running/&gt;
        &lt;/source&gt;
    &lt;/get-config&gt;
&lt;/rpc&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:43.736394" elapsed="0.000385"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:43.736825" elapsed="0.000045"/>
</return>
<msg time="2026-08-23T02:07:43.736992" level="INFO">${request} = &lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="5"&gt;
    &lt;get-config&gt;
        &lt;source&gt;
            &lt;running/&gt;
        &lt;/source&gt;
    &lt;/get-config&gt;
&lt;/rpc&gt;
</msg>
<var>${request}</var>
<arg>${name}-request</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:43.736086" elapsed="0.000935"/>
</kw>
<kw name="Send_Message">
<kw name="Transmit_Message">
<kw name="Write" owner="SSHLibrary">
<arg>${message}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:43.737747" elapsed="0.000269"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:43.739645" level="INFO">&lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="5"&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:43.738293" elapsed="0.001410"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:43.741115" level="INFO">&lt;get-config&gt;
        &lt;source&gt;
            &lt;running/&gt;
        &lt;/source&gt;
    &lt;/get-config&gt;
&lt;/rpc&gt;

]]&gt;]]&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:43.739860" elapsed="0.001311"/>
</kw>
<arg>${message}</arg>
<doc>Transmit message to Netconf connection and discard the echo of the message.</doc>
<status status="PASS" start="2026-08-23T02:07:43.737452" elapsed="0.003776"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:43.794526" level="INFO">&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="5"&gt;
    &lt;data&gt;
        &lt;aaa-encrypt-service-config xmlns="config:aaa:authn:encrypt:service:config"&gt;
            &lt;encrypt-type&gt;AES&lt;/encrypt-type&gt;
            &lt;encrypt-key-length&gt;128&lt;/encrypt-key-length&gt;
            &lt;password-length&gt;12&lt;/password-length&gt;
            &lt;cipher-transforms&gt;AES/GCM/NoPadding&lt;/cipher-transforms&gt;
            &lt;encrypt-key&gt;svW8eCV45iNA&lt;/encrypt-key&gt;
            &lt;encrypt-salt&gt;szGsvGrFGnYbd9nd1t9nEw==&lt;/encrypt-salt&gt;
            &lt;auth-tag-length&gt;128&lt;/auth-tag-length&gt;
            &lt;encrypt-method&gt;PBKDF2WithHmacSHA1&lt;/encrypt-method&gt;
            &lt;encrypt-iteration-count&gt;32768&lt;/encrypt-iteration-count&gt;
        &lt;/aaa-encrypt-service-config&gt;
        &lt;key-stores xmlns="urn:opendaylight:yang:aaa:cert:mdsal"&gt;
            &lt;id&gt;KeyStores:1&lt;/id&gt;
            &lt;ssl-data&gt;
                &lt;bundle-name&gt;opendaylight&lt;/bundle-name&gt;
                &lt;tls-protocols/&gt;
                &lt;odl-keystore&gt;
                    &lt;store-password&gt;szGsvGrFGnYbd9nd1t9nE/fx+V2RdCDYC56eieY+0NUj2isn/xZEgHOUDk8=&lt;/store-password&gt;
                    &lt;sign-alg&gt;SHA1WithRSAEncryption&lt;/sign-alg&gt;
                    &lt;validity&gt;365&lt;/validity&gt;
                    &lt;alias&gt;controller&lt;/alias&gt;
                    &lt;name&gt;ctl.jks&lt;/name&gt;
                    &lt;dname&gt;CN=ODL, OU=Dev, O=LinuxFoundation, L=QC Montreal, C=CA&lt;/dname&gt;
                    &lt;keystoreFile&gt;szGsvGrFGnYbd9nd1t9nE0JpQtr6AxLteOf9yUIRItqLm3NkTNx/el6TA99g1gQs8oNL0ip4IPpl4rt7rFRRPPBAYfnI5Hkh+b8tHGDNwygXVh0qPTd02Ju1oPl0gQiXDeG3LxTe8oV0ONxVMiVDPRLInTiudW5V+NAL0c/qNo47UDfypSDuyY7eUL/QqoheS+TBVtkEivw2fS5E+lNKVmSRnedcKds+JRGqsn0ie6kCPmdOS26Zo5s8D6M2tT+r5in4jHovTq6a3RAmy5ZEJJbHJx/m+Y3778MRBkcD2nV3THNE3WXHfY8z+tUfGap/IGFvqumYYtRL35QgVchzJa3JZ2mMxPc2WLe5i2J1nYXYU6QDbT3UoksnTVzBRz0eznEzQQs47v/7gSOqx+Xug8kld3PASYNi5fZD0YmZGe+lI8ON47+4URudcRM9QmzWRu2LhIpGk8Fk0ueaJh5QF0VbVHat5S7fi1fkSNf2wHTs2pFv75hWSsg+7KDTAgfExMImhBPJ+pc8raT7kLEYiBPXy8NMvlDSksgfvSIcyyharJNj8wtxEFkBVWeX0SFzwlZy9oICi+li5ZM8WhSAbtBGTbpBJ9ADwg8WZo7uznJx+rhIUrjoziNRYqUVp/euIq6rjbE/k6jZCtKTP/qoqy0lShP6M9GfuB6O1akHdOHMWOqX2Q6G8qdVPuyAshiJrIthlJEiY5LX8xhXOQDAuGvwB5hFN/aXa0bMksLEHsTKpXSRnhLCJQxzrKpSSIuQqMzsDUQJQMzch1NGpbSFDwOySU5aeyvsTo4AYPT6Xf6YhGsYDk39B6R/CFsBVO13/4SfkiINKvhpYwQ/vfftmmF/7SXYXp/YR7nffSZTr1ooWJHAaGzqAQw+it9HIaJd7IqTROyhS23F00eX3h/OVwbsBB6PmGXh0LvOoCEfctsl0hTpnouPExetsGBZ7dfPpQIK5UiizhBZjKfr1N3dRVawGP2tFckp3xB0Fr3W8nqRCcWxi5oDGtKcK+z5LinRpCeurFbtZwatTqgh1o/KRXdpQ9E+QmJuyIUnIjoxwuFejwHujtyJR+uAvC90T+G09PnaaMGALkmiJ3kiDn5waQup2qhptMUuF1ZjNirqcbAh7MoEtU02PCQAlBmV0D9Uvp/q9Iw3EFmWhfNT8w/Y03VHw2AK7DY94gJq0vmVUD96ahn4UvWXL5CjFyzXD8ikqdV0fx3zamP53xl6LhQUwBWwiaZVZ6qpfmuSfHRBoOKn5FGmIVpQtgs1i2OYsf8CFMdds6HkzCU9ZR5bcNIUz3U7KzxhaZNpj+tBPjCe5knbuvODRT9AIIZr5NL8zkfLG0R/DySEUJEP9MZFDzaYKqwZUQK9u9lyxXBdRZ/nJJVpYkbOdjraUZOn2wX1MOv768TylMxft2elpWtyo51E7XJca0zO3FT+T6dEDLNuLf70Tjf4ZKlXIs+rbMZRzJiNPU/gOOCncjGnQg7yVNt6CXFzLloYDKyI1+nXar0j8Y7aLeRw4ANqfONtf/a/feF1rxUgkr9kpwha7YR6ZbwLsgEqRGQ1yP0UUYTN4tW9P1fKN220ZErjmNLf5y9d4E1kw0JC9Aowy1OIPHC+GoIH2GXmLp6xrwtvDNX0N9GVVtWxGfdOuRunqus5wncxwKSsJHEV7gC7CttHVSQuYxf+qSVzxDZdZhrEFRDM+2ehQr+jYPjBFDfrFrZ6APcuc6eG8uNgDwFBIT/AvuHqnX/J/C5nmpguP7J8i+L6Tq/vaE06wHDJDHx4janBzQWz38QKtnFFVvSuYlPq4xpjc4XL0w==&lt;/keystoreFile&gt;
                    &lt;key-alg&gt;RSA&lt;/key-alg&gt;
                    &lt;keysize&gt;1024&lt;/keysize&gt;
                &lt;/odl-keystore&gt;
                &lt;cipher-suites&gt;
                    &lt;suiteName/&gt;
                &lt;/cipher-suites&gt;
                &lt;trust-keystore&gt;
                    &lt;keystoreFile&gt;szGsvGrFGnYbd9nd1t9nE0JpQtr6AxLteOf9yIktC+veMTpJpq+B4qQuq9ISdPV1uRcHSk71SvQM3Yb0MmEuAA==&lt;/keystoreFile&gt;
                    &lt;store-password&gt;szGsvGrFGnYbd9nd1t9nE/re1XnJbnW5IKOJusQBPKYGj7gRRA5Mm2KIwp4=&lt;/store-password&gt;
                    &lt;name&gt;truststore.jks&lt;/name&gt;
                &lt;/trust-keystore&gt;
            &lt;/ssl-data&gt;
        &lt;/key-stores&gt;
        &lt;people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:people"&gt;
            &lt;person&gt;
                &lt;id&gt;CUST001&lt;/id&gt;
                &lt;age&gt;32&lt;/age&gt;
            &lt;/person&gt;
        &lt;/people&gt;
        &lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;
            &lt;car-person&gt;
                &lt;car-id&gt;TOY001&lt;/car-id&gt;
                &lt;person-id&gt;CUST001&lt;/person-id&gt;
            &lt;/car-person&gt;
        &lt;/car-people&gt;
        &lt;cars xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car"&gt;
            &lt;car-entry&gt;
                &lt;id&gt;TOY001&lt;/id&gt;
                &lt;model&gt;Toyota Corolla&lt;/model&gt;
                &lt;year&gt;2016&lt;/year&gt;
                &lt;manufacturer&gt;Toyota&lt;/manufacturer&gt;
                &lt;category&gt;sedan&lt;/category&gt;
            &lt;/car-entry&gt;
        &lt;/cars&gt;
    &lt;/data&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<msg time="2026-08-23T02:07:43.794710" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="5"&gt;
    &lt;data&gt;
        &lt;aaa-encrypt-service-config xmlns="config:aaa:...</msg>
<var>${reply}</var>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:43.741364" elapsed="0.053375"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:43.794786" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:07:43.794953" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="5"&gt;
    &lt;data&gt;
        &lt;aaa-encrypt-service-config xmlns="config:aaa:...</msg>
<var>${reply}</var>
<arg>${request}</arg>
<doc>Send message to Netconf connection and get the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:43.737162" elapsed="0.057820"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:43.795024" elapsed="0.000025"/>
</return>
<msg time="2026-08-23T02:07:43.795166" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="5"&gt;
    &lt;data&gt;
        &lt;aaa-encrypt-service-config xmlns="config:aaa:...</msg>
<var>${reply}</var>
<arg>get-config-edit-after-commit</arg>
<doc>Load a message from the data file set, send it to Netconf and return the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:43.735788" elapsed="0.059406"/>
</kw>
<kw name="Check_First_Batch_Data_Present">
<kw name="Check_First_Batch_Data">
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;TOY001&lt;/id&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:43.796388" elapsed="0.000316"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;TOY001&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:43.795954" elapsed="0.000805"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CUST001&lt;/id&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:43.797346" elapsed="0.000291"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;CUST001&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:43.796917" elapsed="0.000774"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;car-id&gt;TOY001&lt;/car-id&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:43.798270" elapsed="0.000283"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;car-id&gt;TOY001&lt;/car-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:43.797851" elapsed="0.000756"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUST001&lt;/person-id&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:43.799179" elapsed="0.000280"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUST001&lt;/person-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:43.798747" elapsed="0.000766"/>
</kw>
<arg>${reply}</arg>
<arg>BuiltIn.Should_Contain</arg>
<status status="PASS" start="2026-08-23T02:07:43.795616" elapsed="0.003954"/>
</kw>
<arg>${reply}</arg>
<status status="PASS" start="2026-08-23T02:07:43.795317" elapsed="0.004301"/>
</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-08-23T02:07:43.802571" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:43.802190" elapsed="0.000444"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:43.802166" elapsed="0.000493"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>'${SetupUtils__Known_Bug_ID}' != ''</arg>
<arg>Set_Known_Bug_Id</arg>
<arg>${EMPTY}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:07:43.802794" elapsed="0.000332"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:07:43.807760" 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-08-23T02:07:43.807354" elapsed="0.000433"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-08-23T02:07:43.808018" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:07:43.807877" elapsed="0.000199"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:43.807858" 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-08-23T02:07:43.808235" 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-08-23T02:07:43.808391" 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-08-23T02:07:43.808546" 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-08-23T02:07:43.808696" 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-08-23T02:07:43.808863" elapsed="0.000022"/>
</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-08-23T02:07:43.809027" 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-08-23T02:07:43.809177" 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-08-23T02:07:43.807064" elapsed="0.002234"/>
</kw>
<status status="PASS" start="2026-08-23T02:07:43.800221" elapsed="0.009127"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-08-23T02:07:43.799876" elapsed="0.009512"/>
</kw>
<doc>Check that the change is now in the configuration.</doc>
<status status="PASS" start="2026-08-23T02:07:43.638240" elapsed="0.171185"/>
</test>
<test id="s1-s3-s1-t13" name="Edit_Config_Create_Shall_Fail_Now" line="118">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-08-23T02:07:43.812616" elapsed="0.000207"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:07:43.812372" 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-08-23T02:07:43.813846" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:43.813724" elapsed="0.000171"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:43.813705" elapsed="0.000212"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:43.818334" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:43.818228" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:43.818210" elapsed="0.000193"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:43.819363" 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-08-23T02:07:43.818986" elapsed="0.000403"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:07:43.819828" 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-08-23T02:07:43.819535" elapsed="0.000334"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:07:43.819914" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:43.820069" 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-08-23T02:07:43.818611" elapsed="0.001483"/>
</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-08-23T02:07:43.825285" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:43.825173" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:43.825154" 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-08-23T02:07:43.826661" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:43.826554" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:43.826536" elapsed="0.000193"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:07:43.827247" level="INFO">${karaf_connection_index} = 18</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-08-23T02:07:43.826882" elapsed="0.000393"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:43.827665" level="INFO">${current_connection_index} = 23</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-08-23T02:07:43.827421" elapsed="0.000270"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:43.862427" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:43.828234" elapsed="0.034354"/>
</kw>
<msg time="2026-08-23T02:07:43.862757" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:07:43.862803" 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 "n "e "t "c "o "n "f "...</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-08-23T02:07:43.827855" elapsed="0.035006"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:07:43.885456" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "E "d "i "t "_ "C "o "n "f "i "g "_ "C "r "e "a "t "e "_ "S "h "a "l "l "_ "F "a "i "l "_ "N "o "w "[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-08-23T02:07:43.863405" elapsed="0.022228"/>
</kw>
<msg time="2026-08-23T02:07:43.885798" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:07:43.885865" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "E "d "i "t "_ "C "o "n "f "i "g "_ ...</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-08-23T02:07:43.863023" elapsed="0.022881"/>
</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-08-23T02:07:43.886222" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:43.886015" elapsed="0.000284"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:43.885995" elapsed="0.000329"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:43.886825" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "E "d "i "t "_ "C "o "n "f "i "g "_ "C "r "e "a "t "e "_ "S "h "a "l "l "_ "F "a "i "l "_ "N "o "w "[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-08-23T02:07:43.886454" elapsed="0.000463"/>
</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-08-23T02:07:43.887185" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:43.886984" elapsed="0.000277"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:43.886966" elapsed="0.000320"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:07:43.887319" 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-08-23T02:07:43.890161" elapsed="0.000149"/>
</kw>
<msg time="2026-08-23T02:07:43.890380" 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-08-23T02:07:43.889511" elapsed="0.000966"/>
</kw>
<kw name="Open 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-08-23T02:07:43.891282" elapsed="0.000037"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:43.892123" elapsed="0.000037"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:07:43.888168" elapsed="0.004074"/>
</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-08-23T02:07:43.887560" elapsed="0.004795"/>
</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-08-23T02:07:43.826251" elapsed="0.066203"/>
</kw>
<msg time="2026-08-23T02:07:43.892545" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:43.892588" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "E "d "i "t "_ "C "o "n "f "i "g "_ ...</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-08-23T02:07:43.825493" elapsed="0.067133"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:07:43.892806" elapsed="0.000024"/>
</return>
<status status="PASS" start="2026-08-23T02:07:43.892700" elapsed="0.000186"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:43.892682" elapsed="0.000228"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 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-08-23T02:07:43.893282" 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-08-23T02:07:43.893596" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:07:43.893666" 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-08-23T02:07:43.824811" elapsed="0.068962"/>
</kw>
<msg time="2026-08-23T02:07:43.894063" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:43.894109" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "E "d "i "t "_ "C "o "n "f "i "g "_ ...</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-08-23T02:07:43.820439" elapsed="0.073707"/>
</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-08-23T02:07:43.894457" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:43.894222" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:43.894204" elapsed="0.000330"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:07:43.820312" elapsed="0.074245"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:07:43.820145" elapsed="0.074440"/>
</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-08-23T02:07:43.817871" elapsed="0.076766"/>
</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-08-23T02:07:43.813444" elapsed="0.081249"/>
</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-08-23T02:07:43.813040" elapsed="0.081699"/>
</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-08-23T02:07:43.810409" elapsed="0.084417"/>
</kw>
<kw name="Perform_Test">
<kw name="Load_And_Send_Message">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:43.896315" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/create-request.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/create-request.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:43.896461" level="INFO">${data} = &lt;rpc message-id="15" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
&lt;edit-config&gt;
&lt;target&gt;
&lt;candidate/&gt;
&lt;/target&gt;
&lt;default-operation&gt;create&lt;/default-operation&gt;
&lt;config&gt;
&lt;people xmlns="urn:opendaylig...</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:43.895898" elapsed="0.000592"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:43.896538" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:43.896687" level="INFO">${request} = &lt;rpc message-id="15" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
&lt;edit-config&gt;
&lt;target&gt;
&lt;candidate/&gt;
&lt;/target&gt;
&lt;default-operation&gt;create&lt;/default-operation&gt;
&lt;config&gt;
&lt;people xmlns="urn:opendaylig...</msg>
<var>${request}</var>
<arg>${name}-request</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:43.895570" elapsed="0.001145"/>
</kw>
<kw name="Send_Message">
<kw name="Transmit_Message">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:43.899290" level="INFO">&lt;rpc message-id="15" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;</msg>
<arg>${message}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:43.897455" elapsed="0.001892"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:43.899872" level="INFO">&lt;edit-config&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:43.899487" elapsed="0.000438"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:43.902993" level="INFO">&lt;target&gt;
&lt;candidate/&gt;
&lt;/target&gt;
&lt;default-operation&gt;create&lt;/default-operation&gt;
&lt;config&gt;
&lt;people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:people"&gt;
  &lt;person&gt;
    &lt;id&gt;CUSTBAD&lt;/id&gt;
    &lt;age&gt;99&lt;/age&gt;
  &lt;/person&gt;
&lt;/people&gt;
&lt;/config&gt;
&lt;/edit-config&gt;
&lt;/rpc&gt;

]]&gt;]]&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:43.900064" elapsed="0.002990"/>
</kw>
<arg>${message}</arg>
<doc>Transmit message to Netconf connection and discard the echo of the message.</doc>
<status status="PASS" start="2026-08-23T02:07:43.897162" elapsed="0.005949"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:43.908191" level="INFO">&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply message-id="15" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
    &lt;rpc-error&gt;
        &lt;error-type&gt;protocol&lt;/error-type&gt;
        &lt;error-tag&gt;data-exists&lt;/error-tag&gt;
        &lt;error-severity&gt;error&lt;/error-severity&gt;
        &lt;error-message&gt;Data already exists, cannot execute CREATE operation&lt;/error-message&gt;
    &lt;/rpc-error&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<msg time="2026-08-23T02:07:43.908286" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply message-id="15" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
    &lt;rpc-error&gt;
        &lt;error-type&gt;protocol&lt;/error-type&gt;
     ...</msg>
<var>${reply}</var>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:43.903247" elapsed="0.005067"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:43.908361" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:07:43.908511" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply message-id="15" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
    &lt;rpc-error&gt;
        &lt;error-type&gt;protocol&lt;/error-type&gt;
     ...</msg>
<var>${reply}</var>
<arg>${request}</arg>
<doc>Send message to Netconf connection and get the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:43.896871" elapsed="0.011668"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:43.908583" elapsed="0.000025"/>
</return>
<msg time="2026-08-23T02:07:43.908725" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply message-id="15" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
    &lt;rpc-error&gt;
        &lt;error-type&gt;protocol&lt;/error-type&gt;
     ...</msg>
<var>${actual}</var>
<arg>${name}</arg>
<doc>Load a message from the data file set, send it to Netconf and return the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:43.895285" elapsed="0.013467"/>
</kw>
<kw name="Load_Expected_Reply">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:43.909700" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/create-reply.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/create-reply.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:43.909857" level="INFO">${data} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply message-id="15" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
&lt;rpc-error&gt;
&lt;error-type&gt;protocol&lt;/error-type&gt;
&lt;error-tag&gt;data-exists&lt;...</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:43.909494" elapsed="0.000393"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:43.909932" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:43.910081" level="INFO">${expected_reply} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply message-id="15" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
&lt;rpc-error&gt;
&lt;error-type&gt;protocol&lt;/error-type&gt;
&lt;error-tag&gt;data-exists&lt;...</msg>
<var>${expected_reply}</var>
<arg>${name}-reply</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:43.909194" elapsed="0.000915"/>
</kw>
<return>
<value>${expected_reply}</value>
<status status="PASS" start="2026-08-23T02:07:43.910152" elapsed="0.000025"/>
</return>
<msg time="2026-08-23T02:07:43.910295" level="INFO">${expected} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply message-id="15" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
&lt;rpc-error&gt;
&lt;error-type&gt;protocol&lt;/error-type&gt;
&lt;error-tag&gt;data-exists&lt;...</msg>
<var>${expected}</var>
<arg>${name}</arg>
<doc>Load the expected reply from the data file set and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:43.908904" elapsed="0.001418"/>
</kw>
<kw name="Remove String" owner="String">
<msg time="2026-08-23T02:07:43.910666" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply message-id="15" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
    &lt;rpc-error&gt;
        &lt;error-type&gt;protocol&lt;/error-type&gt;
     ...</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>]]&gt;]]&gt;</arg>
<doc>Removes all ``removables`` from the given ``string``.</doc>
<status status="PASS" start="2026-08-23T02:07:43.910463" elapsed="0.000270"/>
</kw>
<kw name="Strip String" owner="String">
<msg time="2026-08-23T02:07:43.911130" level="INFO">${actual} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply message-id="15" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
    &lt;rpc-error&gt;
        &lt;error-type&gt;protocol&lt;/error-type&gt;
       ...</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>mode=both</arg>
<doc>Remove leading and/or trailing whitespaces from the given string.</doc>
<status status="PASS" start="2026-08-23T02:07:43.910897" elapsed="0.000263"/>
</kw>
<kw name="Elements Should Be Equal" owner="XML">
<arg>${actual}</arg>
<arg>${expected}</arg>
<arg>normalize_whitespace=True</arg>
<doc>Verifies that the given ``source`` element is equal to ``expected``.</doc>
<status status="PASS" start="2026-08-23T02:07:43.911303" elapsed="0.000557"/>
</kw>
<return>
<value>${actual}</value>
<status status="PASS" start="2026-08-23T02:07:43.911922" elapsed="0.000029"/>
</return>
<arg>create</arg>
<doc>Load and send the request from the dataset and compare the returned reply to the one stored in the dataset.</doc>
<status status="PASS" start="2026-08-23T02:07:43.895010" elapsed="0.017039"/>
</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-08-23T02:07:43.913211" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:43.912848" elapsed="0.000425"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:43.912817" elapsed="0.000481"/>
</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-08-23T02:07:43.913432" elapsed="0.000309"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:07:43.918545" 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-08-23T02:07:43.918147" elapsed="0.000425"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-08-23T02:07:43.918787" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:07:43.918647" elapsed="0.000212"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:43.918628" 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-08-23T02:07:43.919022" 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-08-23T02:07:43.919178" 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-08-23T02:07:43.919335" elapsed="0.000019"/>
</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-08-23T02:07:43.919485" 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-08-23T02:07:43.919655" 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-08-23T02:07:43.919806" elapsed="0.000040"/>
</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-08-23T02:07:43.919981" 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-08-23T02:07:43.917857" elapsed="0.002199"/>
</kw>
<status status="PASS" start="2026-08-23T02:07:43.912629" elapsed="0.007476"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-08-23T02:07:43.912292" elapsed="0.007853"/>
</kw>
<doc>Request a "create" operation of an element that already exists and check that it fails with the correct error (RFC 6241, section 7.2, operation "create").</doc>
<status status="PASS" start="2026-08-23T02:07:43.809728" elapsed="0.110454"/>
</test>
<test id="s1-s3-s1-t14" name="Delete_First_Batch" line="122">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-08-23T02:07:43.923164" elapsed="0.000206"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:07:43.922918" elapsed="0.000505"/>
</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-08-23T02:07:43.924404" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:43.924298" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:43.924279" 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-08-23T02:07:43.928895" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:43.928774" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:43.928756" elapsed="0.000249"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:43.929974" 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-08-23T02:07:43.929579" elapsed="0.000422"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:07:43.930440" 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-08-23T02:07:43.930148" elapsed="0.000318"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:07:43.930511" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:07:43.930664" 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-08-23T02:07:43.929218" 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-08-23T02:07:43.936032" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:43.935923" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:43.935904" elapsed="0.000197"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:43.937271" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:43.937164" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:43.937146" elapsed="0.000193"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:07:43.937823" level="INFO">${karaf_connection_index} = 18</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-08-23T02:07:43.937468" elapsed="0.000399"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:43.938259" level="INFO">${current_connection_index} = 23</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-08-23T02:07:43.938013" elapsed="0.000272"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:43.972145" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:43.938810" elapsed="0.033575"/>
</kw>
<msg time="2026-08-23T02:07:43.972593" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:07:43.972640" 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 "n "e "t "c "o "n "f "...</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-08-23T02:07:43.938432" elapsed="0.034246"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:07:43.991214" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "D "e "l "e "t "e "_ "F "i "r "s "t "_ "B "a "t "c "h "[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-08-23T02:07:43.973294" elapsed="0.018092"/>
</kw>
<msg time="2026-08-23T02:07:43.991553" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:07:43.991599" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "D "e "l "e "t "e "_ "F "i "r "s "t ...</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-08-23T02:07:43.972896" elapsed="0.018740"/>
</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-08-23T02:07:43.991950" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:43.991712" elapsed="0.000315"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:43.991693" elapsed="0.000360"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:43.992596" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "D "e "l "e "t "e "_ "F "i "r "s "t "_ "B "a "t "c "h "[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-08-23T02:07:43.992183" elapsed="0.000482"/>
</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-08-23T02:07:43.992952" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:43.992732" elapsed="0.000298"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:43.992714" elapsed="0.000341"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:07:43.993089" elapsed="0.000033"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-23T02:07:43.996062" elapsed="0.000149"/>
</kw>
<msg time="2026-08-23T02:07:43.996287" 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-08-23T02:07:43.995323" elapsed="0.001062"/>
</kw>
<kw name="Open 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-08-23T02:07:43.997192" elapsed="0.000090"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:43.998076" elapsed="0.000038"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:07:43.993940" elapsed="0.004254"/>
</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-08-23T02:07:43.993350" elapsed="0.004958"/>
</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-08-23T02:07:43.936864" elapsed="0.061544"/>
</kw>
<msg time="2026-08-23T02:07:43.998513" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:43.998559" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "D "e "l "e "t "e "_ "F "i "r "s "t ...</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-08-23T02:07:43.936240" elapsed="0.062357"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:07:43.998781" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:07:43.998674" elapsed="0.000217"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:43.998654" elapsed="0.000262"/>
</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-08-23T02:07:43.999287" 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-08-23T02:07:43.999601" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:07:43.999677" 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-08-23T02:07:43.935561" elapsed="0.064223"/>
</kw>
<msg time="2026-08-23T02:07:44.000036" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:44.000083" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "D "e "l "e "t "e "_ "F "i "r "s "t ...</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-08-23T02:07:43.931052" elapsed="0.069068"/>
</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-08-23T02:07:44.000437" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:44.000201" elapsed="0.000290"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.000183" elapsed="0.000331"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:07:43.930924" elapsed="0.069613"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:07:43.930740" elapsed="0.069826"/>
</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-08-23T02:07:43.928422" elapsed="0.072197"/>
</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-08-23T02:07:43.924016" elapsed="0.076656"/>
</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-08-23T02:07:43.923580" elapsed="0.077135"/>
</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-08-23T02:07:43.920964" elapsed="0.079802"/>
</kw>
<kw name="Perform_Test">
<kw name="Load_And_Send_Message">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:44.002264" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/delete-request.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/delete-request.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:44.002416" level="INFO">${data} = &lt;rpc message-id="6" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
&lt;edit-config&gt;
    &lt;target&gt;
        &lt;candidate/&gt;
    &lt;/target&gt;
    &lt;test-option&gt;
        set
    &lt;/test-option&gt;
    &lt;default-operati...</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:44.001824" elapsed="0.000632"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:44.002505" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:44.002655" level="INFO">${request} = &lt;rpc message-id="6" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
&lt;edit-config&gt;
    &lt;target&gt;
        &lt;candidate/&gt;
    &lt;/target&gt;
    &lt;test-option&gt;
        set
    &lt;/test-option&gt;
    &lt;default-operati...</msg>
<var>${request}</var>
<arg>${name}-request</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:44.001511" elapsed="0.001172"/>
</kw>
<kw name="Send_Message">
<kw name="Transmit_Message">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:44.005213" level="INFO">&lt;rpc message-id="6" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;</msg>
<arg>${message}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:44.003435" elapsed="0.001836"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:44.005766" level="INFO">&lt;edit-config&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:44.005414" elapsed="0.000403"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:44.014233" level="INFO">&lt;target&gt;
        &lt;candidate/&gt;
    &lt;/target&gt;
    &lt;test-option&gt;
        set
    &lt;/test-option&gt;
    &lt;default-operation&gt;none&lt;/default-operation&gt;
    &lt;config xmlns:a="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
    &lt;cars xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car" a:operation="remove"&gt;
    &lt;/cars&gt;
    &lt;people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:people" a:operation="remove"&gt;
    &lt;/people&gt;
    &lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people" a:operation="remove"&gt;
    &lt;/car-people&gt;
    &lt;/config&gt;
&lt;/edit-config&gt;
&lt;/rpc&gt;

]]&gt;]]&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:44.006015" elapsed="0.008296"/>
</kw>
<arg>${message}</arg>
<doc>Transmit message to Netconf connection and discard the echo of the message.</doc>
<status status="PASS" start="2026-08-23T02:07:44.003140" elapsed="0.011229"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:44.020423" level="INFO">&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="6"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<msg time="2026-08-23T02:07:44.020515" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="6"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:44.014510" elapsed="0.006033"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:44.020589" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:07:44.020743" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="6"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${request}</arg>
<doc>Send message to Netconf connection and get the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:44.002849" elapsed="0.017922"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:44.020814" elapsed="0.000040"/>
</return>
<msg time="2026-08-23T02:07:44.020976" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="6"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${actual}</var>
<arg>${name}</arg>
<doc>Load a message from the data file set, send it to Netconf and return the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:44.001219" elapsed="0.019784"/>
</kw>
<kw name="Load_Expected_Reply">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:44.021962" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/delete-reply.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/delete-reply.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:44.022096" level="INFO">${data} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="6"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:44.021738" elapsed="0.000386"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:44.022170" elapsed="0.000043"/>
</return>
<msg time="2026-08-23T02:07:44.022337" level="INFO">${expected_reply} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="6"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected_reply}</var>
<arg>${name}-reply</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:44.021432" elapsed="0.000932"/>
</kw>
<return>
<value>${expected_reply}</value>
<status status="PASS" start="2026-08-23T02:07:44.022412" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:07:44.022568" level="INFO">${expected} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="6"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected}</var>
<arg>${name}</arg>
<doc>Load the expected reply from the data file set and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:44.021139" elapsed="0.001456"/>
</kw>
<kw name="Remove String" owner="String">
<msg time="2026-08-23T02:07:44.022962" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="6"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>]]&gt;]]&gt;</arg>
<doc>Removes all ``removables`` from the given ``string``.</doc>
<status status="PASS" start="2026-08-23T02:07:44.022742" elapsed="0.000250"/>
</kw>
<kw name="Strip String" owner="String">
<msg time="2026-08-23T02:07:44.023355" level="INFO">${actual} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="6"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>mode=both</arg>
<doc>Remove leading and/or trailing whitespaces from the given string.</doc>
<status status="PASS" start="2026-08-23T02:07:44.023136" elapsed="0.000249"/>
</kw>
<kw name="Elements Should Be Equal" owner="XML">
<arg>${actual}</arg>
<arg>${expected}</arg>
<arg>normalize_whitespace=True</arg>
<doc>Verifies that the given ``source`` element is equal to ``expected``.</doc>
<status status="PASS" start="2026-08-23T02:07:44.023533" elapsed="0.000418"/>
</kw>
<return>
<value>${actual}</value>
<status status="PASS" start="2026-08-23T02:07:44.024005" elapsed="0.000027"/>
</return>
<arg>delete</arg>
<doc>Load and send the request from the dataset and compare the returned reply to the one stored in the dataset.</doc>
<status status="PASS" start="2026-08-23T02:07:44.000938" elapsed="0.023190"/>
</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-08-23T02:07:44.025288" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:44.024927" elapsed="0.000423"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.024909" elapsed="0.000465"/>
</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-08-23T02:07:44.025507" elapsed="0.000307"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:07:44.030647" 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-08-23T02:07:44.030243" elapsed="0.000434"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-08-23T02:07:44.030917" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-23T02:07:44.030755" elapsed="0.000220"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.030737" elapsed="0.000262"/>
</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-08-23T02:07:44.031136" 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-08-23T02:07:44.031294" 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-08-23T02:07:44.031453" 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-08-23T02:07:44.031606" 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-08-23T02:07:44.031758" 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-08-23T02:07:44.031928" 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-08-23T02:07:44.032083" 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-08-23T02:07:44.029887" elapsed="0.002271"/>
</kw>
<status status="PASS" start="2026-08-23T02:07:44.024703" elapsed="0.007504"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-08-23T02:07:44.024369" elapsed="0.007878"/>
</kw>
<doc>Delete the created element from the candidate configuration and check the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:43.920441" elapsed="0.111844"/>
</test>
<test id="s1-s3-s1-t15" name="Get_Config_Running_To_Confirm_No_Delete_Before_Commit" line="126">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-08-23T02:07:44.035492" elapsed="0.000208"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:07:44.035246" elapsed="0.000508"/>
</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-08-23T02:07:44.036707" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:44.036598" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.036580" elapsed="0.000196"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:44.041277" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:44.041159" elapsed="0.000169"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.041139" elapsed="0.000215"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:44.042502" 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-08-23T02:07:44.042067" elapsed="0.000467"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:07:44.043221" 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-08-23T02:07:44.042870" elapsed="0.000380"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:07:44.043299" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T02:07:44.043466" 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-08-23T02:07:44.041601" elapsed="0.001893"/>
</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-08-23T02:07:44.049216" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:44.049107" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.049087" 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-08-23T02:07:44.050488" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:44.050380" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.050361" elapsed="0.000194"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:07:44.051063" level="INFO">${karaf_connection_index} = 18</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-08-23T02:07:44.050687" elapsed="0.000402"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:44.051523" level="INFO">${current_connection_index} = 23</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-08-23T02:07:44.051275" elapsed="0.000274"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:44.085284" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:44.052099" elapsed="0.033368"/>
</kw>
<msg time="2026-08-23T02:07:44.085650" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:07:44.085697" 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 "n "e "t "c "o "n "f "...</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-08-23T02:07:44.051696" elapsed="0.034038"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:07:44.116720" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "G "e "t "_ "C "o "n "f "i "g "_ "R "u "n "n "i "n "g "_ "T "o "_ "C "o "n "f "i "r "m "_ "N "o "_ "D "e "l "e "t "e "_ "B "e "f "o "r "e "_ "C "o "m "[78Cm "[A[78Ci
 "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-08-23T02:07:44.086290" elapsed="0.030641"/>
</kw>
<msg time="2026-08-23T02:07:44.117119" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:07:44.117173" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "G "e "t "_ "C "o "n "f "i "g "_ "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-08-23T02:07:44.085913" elapsed="0.031299"/>
</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-08-23T02:07:44.117510" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:44.117292" elapsed="0.000295"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.117271" elapsed="0.000342"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:44.118146" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "G "e "t "_ "C "o "n "f "i "g "_ "R "u "n "n "i "n "g "_ "T "o "_ "C "o "n "f "i "r "m "_ "N "o "_ "D "e "l "e "t "e "_ "B "e "f "o "r "e "_ "C "o "m "[78Cm "[A[78Ci
 "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-08-23T02:07:44.117744" elapsed="0.000482"/>
</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-08-23T02:07:44.118498" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:44.118292" elapsed="0.000282"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.118274" elapsed="0.000325"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:07:44.118632" elapsed="0.000034"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-23T02:07:44.121643" elapsed="0.000154"/>
</kw>
<msg time="2026-08-23T02:07:44.121897" 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-08-23T02:07:44.120824" elapsed="0.001175"/>
</kw>
<kw name="Open 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-08-23T02:07:44.122776" elapsed="0.000036"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:44.123602" elapsed="0.000036"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:07:44.119483" elapsed="0.004233"/>
</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-08-23T02:07:44.118911" elapsed="0.004919"/>
</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-08-23T02:07:44.050078" elapsed="0.074007"/>
</kw>
<msg time="2026-08-23T02:07:44.124177" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:44.124221" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "G "e "t "_ "C "o "n "f "i "g "_ "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-08-23T02:07:44.049427" elapsed="0.074831"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:07:44.124441" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-08-23T02:07:44.124333" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.124315" elapsed="0.000208"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:44.124936" 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-08-23T02:07:44.125255" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:07:44.125362" 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-08-23T02:07:44.048750" elapsed="0.076722"/>
</kw>
<msg time="2026-08-23T02:07:44.125564" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:44.125607" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "G "e "t "_ "C "o "n "f "i "g "_ "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-08-23T02:07:44.043919" elapsed="0.081725"/>
</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-08-23T02:07:44.126032" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:44.125718" elapsed="0.000369"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.125701" elapsed="0.000410"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:07:44.043751" elapsed="0.082383"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:07:44.043551" elapsed="0.082612"/>
</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-08-23T02:07:44.040753" elapsed="0.085463"/>
</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-08-23T02:07:44.036314" elapsed="0.089956"/>
</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-08-23T02:07:44.035912" elapsed="0.090402"/>
</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-08-23T02:07:44.033260" elapsed="0.093105"/>
</kw>
<kw name="Load_And_Send_Message">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:44.127316" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/get-config-no-delete-before-commit-request.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/get-config-no-delete-before-commit-request.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:44.127453" level="INFO">${data} = &lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="7"&gt;
    &lt;get-config&gt;
        &lt;source&gt;
            &lt;running/&gt;
        &lt;/source&gt;
    &lt;/get-config&gt;
&lt;/rpc&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:44.127104" elapsed="0.000377"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:44.127526" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:07:44.127672" level="INFO">${request} = &lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="7"&gt;
    &lt;get-config&gt;
        &lt;source&gt;
            &lt;running/&gt;
        &lt;/source&gt;
    &lt;/get-config&gt;
&lt;/rpc&gt;
</msg>
<var>${request}</var>
<arg>${name}-request</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:44.126781" elapsed="0.000920"/>
</kw>
<kw name="Send_Message">
<kw name="Transmit_Message">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:44.130361" level="INFO">&lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="7"&gt;</msg>
<arg>${message}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:44.128648" elapsed="0.001772"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:44.130943" level="INFO">&lt;get-config&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:44.130562" elapsed="0.000432"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:44.132252" level="INFO">&lt;source&gt;
            &lt;running/&gt;
        &lt;/source&gt;
    &lt;/get-config&gt;
&lt;/rpc&gt;

]]&gt;]]&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:44.131133" elapsed="0.001174"/>
</kw>
<arg>${message}</arg>
<doc>Transmit message to Netconf connection and discard the echo of the message.</doc>
<status status="PASS" start="2026-08-23T02:07:44.128352" elapsed="0.004011"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:44.190886" level="INFO">&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="7"&gt;
    &lt;data&gt;
        &lt;aaa-encrypt-service-config xmlns="config:aaa:authn:encrypt:service:config"&gt;
            &lt;encrypt-type&gt;AES&lt;/encrypt-type&gt;
            &lt;encrypt-key-length&gt;128&lt;/encrypt-key-length&gt;
            &lt;password-length&gt;12&lt;/password-length&gt;
            &lt;cipher-transforms&gt;AES/GCM/NoPadding&lt;/cipher-transforms&gt;
            &lt;encrypt-key&gt;svW8eCV45iNA&lt;/encrypt-key&gt;
            &lt;encrypt-salt&gt;szGsvGrFGnYbd9nd1t9nEw==&lt;/encrypt-salt&gt;
            &lt;auth-tag-length&gt;128&lt;/auth-tag-length&gt;
            &lt;encrypt-method&gt;PBKDF2WithHmacSHA1&lt;/encrypt-method&gt;
            &lt;encrypt-iteration-count&gt;32768&lt;/encrypt-iteration-count&gt;
        &lt;/aaa-encrypt-service-config&gt;
        &lt;key-stores xmlns="urn:opendaylight:yang:aaa:cert:mdsal"&gt;
            &lt;id&gt;KeyStores:1&lt;/id&gt;
            &lt;ssl-data&gt;
                &lt;bundle-name&gt;opendaylight&lt;/bundle-name&gt;
                &lt;tls-protocols/&gt;
                &lt;odl-keystore&gt;
                    &lt;store-password&gt;szGsvGrFGnYbd9nd1t9nE/fx+V2RdCDYC56eieY+0NUj2isn/xZEgHOUDk8=&lt;/store-password&gt;
                    &lt;sign-alg&gt;SHA1WithRSAEncryption&lt;/sign-alg&gt;
                    &lt;validity&gt;365&lt;/validity&gt;
                    &lt;alias&gt;controller&lt;/alias&gt;
                    &lt;name&gt;ctl.jks&lt;/name&gt;
                    &lt;dname&gt;CN=ODL, OU=Dev, O=LinuxFoundation, L=QC Montreal, C=CA&lt;/dname&gt;
                    &lt;keystoreFile&gt;szGsvGrFGnYbd9nd1t9nE0JpQtr6AxLteOf9yUIRItqLm3NkTNx/el6TA99g1gQs8oNL0ip4IPpl4rt7rFRRPPBAYfnI5Hkh+b8tHGDNwygXVh0qPTd02Ju1oPl0gQiXDeG3LxTe8oV0ONxVMiVDPRLInTiudW5V+NAL0c/qNo47UDfypSDuyY7eUL/QqoheS+TBVtkEivw2fS5E+lNKVmSRnedcKds+JRGqsn0ie6kCPmdOS26Zo5s8D6M2tT+r5in4jHovTq6a3RAmy5ZEJJbHJx/m+Y3778MRBkcD2nV3THNE3WXHfY8z+tUfGap/IGFvqumYYtRL35QgVchzJa3JZ2mMxPc2WLe5i2J1nYXYU6QDbT3UoksnTVzBRz0eznEzQQs47v/7gSOqx+Xug8kld3PASYNi5fZD0YmZGe+lI8ON47+4URudcRM9QmzWRu2LhIpGk8Fk0ueaJh5QF0VbVHat5S7fi1fkSNf2wHTs2pFv75hWSsg+7KDTAgfExMImhBPJ+pc8raT7kLEYiBPXy8NMvlDSksgfvSIcyyharJNj8wtxEFkBVWeX0SFzwlZy9oICi+li5ZM8WhSAbtBGTbpBJ9ADwg8WZo7uznJx+rhIUrjoziNRYqUVp/euIq6rjbE/k6jZCtKTP/qoqy0lShP6M9GfuB6O1akHdOHMWOqX2Q6G8qdVPuyAshiJrIthlJEiY5LX8xhXOQDAuGvwB5hFN/aXa0bMksLEHsTKpXSRnhLCJQxzrKpSSIuQqMzsDUQJQMzch1NGpbSFDwOySU5aeyvsTo4AYPT6Xf6YhGsYDk39B6R/CFsBVO13/4SfkiINKvhpYwQ/vfftmmF/7SXYXp/YR7nffSZTr1ooWJHAaGzqAQw+it9HIaJd7IqTROyhS23F00eX3h/OVwbsBB6PmGXh0LvOoCEfctsl0hTpnouPExetsGBZ7dfPpQIK5UiizhBZjKfr1N3dRVawGP2tFckp3xB0Fr3W8nqRCcWxi5oDGtKcK+z5LinRpCeurFbtZwatTqgh1o/KRXdpQ9E+QmJuyIUnIjoxwuFejwHujtyJR+uAvC90T+G09PnaaMGALkmiJ3kiDn5waQup2qhptMUuF1ZjNirqcbAh7MoEtU02PCQAlBmV0D9Uvp/q9Iw3EFmWhfNT8w/Y03VHw2AK7DY94gJq0vmVUD96ahn4UvWXL5CjFyzXD8ikqdV0fx3zamP53xl6LhQUwBWwiaZVZ6qpfmuSfHRBoOKn5FGmIVpQtgs1i2OYsf8CFMdds6HkzCU9ZR5bcNIUz3U7KzxhaZNpj+tBPjCe5knbuvODRT9AIIZr5NL8zkfLG0R/DySEUJEP9MZFDzaYKqwZUQK9u9lyxXBdRZ/nJJVpYkbOdjraUZOn2wX1MOv768TylMxft2elpWtyo51E7XJca0zO3FT+T6dEDLNuLf70Tjf4ZKlXIs+rbMZRzJiNPU/gOOCncjGnQg7yVNt6CXFzLloYDKyI1+nXar0j8Y7aLeRw4ANqfONtf/a/feF1rxUgkr9kpwha7YR6ZbwLsgEqRGQ1yP0UUYTN4tW9P1fKN220ZErjmNLf5y9d4E1kw0JC9Aowy1OIPHC+GoIH2GXmLp6xrwtvDNX0N9GVVtWxGfdOuRunqus5wncxwKSsJHEV7gC7CttHVSQuYxf+qSVzxDZdZhrEFRDM+2ehQr+jYPjBFDfrFrZ6APcuc6eG8uNgDwFBIT/AvuHqnX/J/C5nmpguP7J8i+L6Tq/vaE06wHDJDHx4janBzQWz38QKtnFFVvSuYlPq4xpjc4XL0w==&lt;/keystoreFile&gt;
                    &lt;key-alg&gt;RSA&lt;/key-alg&gt;
                    &lt;keysize&gt;1024&lt;/keysize&gt;
                &lt;/odl-keystore&gt;
                &lt;cipher-suites&gt;
                    &lt;suiteName/&gt;
                &lt;/cipher-suites&gt;
                &lt;trust-keystore&gt;
                    &lt;keystoreFile&gt;szGsvGrFGnYbd9nd1t9nE0JpQtr6AxLteOf9yIktC+veMTpJpq+B4qQuq9ISdPV1uRcHSk71SvQM3Yb0MmEuAA==&lt;/keystoreFile&gt;
                    &lt;store-password&gt;szGsvGrFGnYbd9nd1t9nE/re1XnJbnW5IKOJusQBPKYGj7gRRA5Mm2KIwp4=&lt;/store-password&gt;
                    &lt;name&gt;truststore.jks&lt;/name&gt;
                &lt;/trust-keystore&gt;
            &lt;/ssl-data&gt;
        &lt;/key-stores&gt;
        &lt;people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:people"&gt;
            &lt;person&gt;
                &lt;id&gt;CUST001&lt;/id&gt;
                &lt;age&gt;32&lt;/age&gt;
            &lt;/person&gt;
        &lt;/people&gt;
        &lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;
            &lt;car-person&gt;
                &lt;car-id&gt;TOY001&lt;/car-id&gt;
                &lt;person-id&gt;CUST001&lt;/person-id&gt;
            &lt;/car-person&gt;
        &lt;/car-people&gt;
        &lt;cars xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car"&gt;
            &lt;car-entry&gt;
                &lt;id&gt;TOY001&lt;/id&gt;
                &lt;model&gt;Toyota Corolla&lt;/model&gt;
                &lt;year&gt;2016&lt;/year&gt;
                &lt;manufacturer&gt;Toyota&lt;/manufacturer&gt;
                &lt;category&gt;sedan&lt;/category&gt;
            &lt;/car-entry&gt;
        &lt;/cars&gt;
    &lt;/data&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<msg time="2026-08-23T02:07:44.191100" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="7"&gt;
    &lt;data&gt;
        &lt;aaa-encrypt-service-config xmlns="config:aaa:...</msg>
<var>${reply}</var>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:44.132500" elapsed="0.058631"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:44.191179" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T02:07:44.191332" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="7"&gt;
    &lt;data&gt;
        &lt;aaa-encrypt-service-config xmlns="config:aaa:...</msg>
<var>${reply}</var>
<arg>${request}</arg>
<doc>Send message to Netconf connection and get the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:44.127854" elapsed="0.063507"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:44.191406" elapsed="0.000025"/>
</return>
<msg time="2026-08-23T02:07:44.191547" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="7"&gt;
    &lt;data&gt;
        &lt;aaa-encrypt-service-config xmlns="config:aaa:...</msg>
<var>${reply}</var>
<arg>get-config-no-delete-before-commit</arg>
<doc>Load a message from the data file set, send it to Netconf and return the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:44.126512" elapsed="0.065063"/>
</kw>
<kw name="Check_First_Batch_Data_Present">
<kw name="Check_First_Batch_Data">
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;TOY001&lt;/id&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:44.192793" elapsed="0.000321"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;TOY001&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:44.192362" elapsed="0.000807"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CUST001&lt;/id&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:44.193729" elapsed="0.000303"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;CUST001&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:44.193312" elapsed="0.000775"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;car-id&gt;TOY001&lt;/car-id&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:44.194645" elapsed="0.000301"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;car-id&gt;TOY001&lt;/car-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:44.194228" elapsed="0.000773"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUST001&lt;/person-id&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:44.195558" elapsed="0.000299"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUST001&lt;/person-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:44.195142" elapsed="0.000793"/>
</kw>
<arg>${reply}</arg>
<arg>BuiltIn.Should_Contain</arg>
<status status="PASS" start="2026-08-23T02:07:44.192039" elapsed="0.003958"/>
</kw>
<arg>${reply}</arg>
<status status="PASS" start="2026-08-23T02:07:44.191698" elapsed="0.004347"/>
</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-08-23T02:07:44.197226" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:44.196860" elapsed="0.000428"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.196826" elapsed="0.000487"/>
</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-08-23T02:07:44.197445" elapsed="0.000304"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:07:44.202365" 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-08-23T02:07:44.201962" elapsed="0.000430"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-08-23T02:07:44.202605" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-23T02:07:44.202464" elapsed="0.000199"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.202446" elapsed="0.000240"/>
</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-08-23T02:07:44.202823" elapsed="0.000037"/>
</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-08-23T02:07:44.202999" 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-08-23T02:07:44.203155" elapsed="0.000019"/>
</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-08-23T02:07:44.203304" 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-08-23T02:07:44.203453" 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-08-23T02:07:44.203602" 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-08-23T02:07:44.203752" 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-08-23T02:07:44.201658" elapsed="0.002255"/>
</kw>
<status status="PASS" start="2026-08-23T02:07:44.196636" elapsed="0.007328"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-08-23T02:07:44.196294" elapsed="0.007710"/>
</kw>
<doc>Make sure the element is still present in the running configuration as the delete command was not committed yet.</doc>
<status status="PASS" start="2026-08-23T02:07:44.032568" elapsed="0.171475"/>
</test>
<test id="s1-s3-s1-t16" name="Commit_Delete" line="131">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-08-23T02:07:44.207238" elapsed="0.000209"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:07:44.206987" 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-08-23T02:07:44.208494" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:44.208384" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.208366" 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-08-23T02:07:44.213013" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:44.212904" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.212886" elapsed="0.000195"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:44.214052" 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-08-23T02:07:44.213650" elapsed="0.000429"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:07:44.214520" 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-08-23T02:07:44.214226" elapsed="0.000320"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:07:44.214590" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:44.214744" 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-08-23T02:07:44.213289" elapsed="0.001479"/>
</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-08-23T02:07:44.219846" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:44.219718" elapsed="0.000177"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.219699" elapsed="0.000218"/>
</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-08-23T02:07:44.221164" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:44.221057" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.221039" elapsed="0.000193"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:07:44.221721" level="INFO">${karaf_connection_index} = 18</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-08-23T02:07:44.221364" elapsed="0.000383"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:44.222153" level="INFO">${current_connection_index} = 23</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-08-23T02:07:44.221909" elapsed="0.000270"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:44.257689" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:44.222704" elapsed="0.035167"/>
</kw>
<msg time="2026-08-23T02:07:44.258043" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:07:44.258088" 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 "n "e "t "c "o "n "f "...</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-08-23T02:07:44.222325" elapsed="0.035800"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:07:44.288198" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "o "m "m "i "t "_ "D "e "l "e "t "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-08-23T02:07:44.258660" elapsed="0.029709"/>
</kw>
<msg time="2026-08-23T02:07:44.288537" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:07:44.288582" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "o "m "m "i "t "_ "D "e "l "e "t ...</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-08-23T02:07:44.258281" elapsed="0.030338"/>
</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-08-23T02:07:44.288967" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:44.288731" elapsed="0.000316"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.288710" elapsed="0.000362"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:44.289577" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "o "m "m "i "t "_ "D "e "l "e "t "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-08-23T02:07:44.289205" elapsed="0.000438"/>
</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-08-23T02:07:44.289936" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:44.289714" elapsed="0.000298"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.289696" elapsed="0.000341"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:07:44.290070" 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-08-23T02:07:44.292955" elapsed="0.000149"/>
</kw>
<msg time="2026-08-23T02:07:44.293174" 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-08-23T02:07:44.292281" elapsed="0.000991"/>
</kw>
<kw name="Open 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-08-23T02:07:44.294082" elapsed="0.000038"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:44.294925" elapsed="0.000038"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:07:44.290942" elapsed="0.004099"/>
</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-08-23T02:07:44.290315" elapsed="0.004839"/>
</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-08-23T02:07:44.220657" elapsed="0.074596"/>
</kw>
<msg time="2026-08-23T02:07:44.295344" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:44.295387" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "o "m "m "i "t "_ "D "e "l "e "t ...</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-08-23T02:07:44.220056" elapsed="0.075368"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:07:44.295605" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:07:44.295499" elapsed="0.000164"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.295481" elapsed="0.000206"/>
</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-08-23T02:07:44.296255" 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-08-23T02:07:44.296572" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:07:44.296642" 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-08-23T02:07:44.219354" elapsed="0.077394"/>
</kw>
<msg time="2026-08-23T02:07:44.296856" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:44.296901" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "o "m "m "i "t "_ "D "e "l "e "t ...</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-08-23T02:07:44.215137" elapsed="0.081801"/>
</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-08-23T02:07:44.297247" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:44.297012" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.296995" elapsed="0.000329"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:07:44.215007" elapsed="0.082339"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:07:44.214820" elapsed="0.082555"/>
</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-08-23T02:07:44.212528" elapsed="0.084899"/>
</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-08-23T02:07:44.208098" elapsed="0.089383"/>
</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-08-23T02:07:44.207639" elapsed="0.089886"/>
</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-08-23T02:07:44.204785" elapsed="0.092790"/>
</kw>
<kw name="Perform_Test">
<kw name="Load_And_Send_Message">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:44.298923" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/commit-delete-request.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/commit-delete-request.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:44.299077" level="INFO">${data} = &lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="8"&gt;
&lt;commit/&gt;
&lt;/rpc&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:44.298685" elapsed="0.000419"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:44.299151" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:44.299297" level="INFO">${request} = &lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="8"&gt;
&lt;commit/&gt;
&lt;/rpc&gt;
</msg>
<var>${request}</var>
<arg>${name}-request</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:44.298369" elapsed="0.000954"/>
</kw>
<kw name="Send_Message">
<kw name="Transmit_Message">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:44.301760" level="INFO">&lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="8"&gt;</msg>
<arg>${message}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:44.300063" elapsed="0.001754"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:44.302288" level="INFO">&lt;commit/&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:44.301975" elapsed="0.000364"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:44.303024" level="INFO">&lt;/rpc&gt;

]]&gt;]]&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:44.302478" elapsed="0.000600"/>
</kw>
<arg>${message}</arg>
<doc>Transmit message to Netconf connection and discard the echo of the message.</doc>
<status status="PASS" start="2026-08-23T02:07:44.299750" elapsed="0.003384"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:44.310549" level="INFO">&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="8"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<msg time="2026-08-23T02:07:44.310643" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="8"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:44.303273" elapsed="0.007398"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:44.310717" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T02:07:44.310892" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="8"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${request}</arg>
<doc>Send message to Netconf connection and get the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:44.299462" elapsed="0.011458"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:44.310963" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:07:44.311107" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="8"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${actual}</var>
<arg>${name}</arg>
<doc>Load a message from the data file set, send it to Netconf and return the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:44.298081" elapsed="0.013054"/>
</kw>
<kw name="Load_Expected_Reply">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:44.312315" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/commit-delete-reply.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/commit-delete-reply.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:44.312444" level="INFO">${data} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="8"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:44.312106" elapsed="0.000365"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:44.312517" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:07:44.312665" level="INFO">${expected_reply} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="8"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected_reply}</var>
<arg>${name}-reply</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:44.311780" elapsed="0.000913"/>
</kw>
<return>
<value>${expected_reply}</value>
<status status="PASS" start="2026-08-23T02:07:44.312737" elapsed="0.000025"/>
</return>
<msg time="2026-08-23T02:07:44.312901" level="INFO">${expected} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="8"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected}</var>
<arg>${name}</arg>
<doc>Load the expected reply from the data file set and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:44.311270" elapsed="0.001658"/>
</kw>
<kw name="Remove String" owner="String">
<msg time="2026-08-23T02:07:44.313268" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="8"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>]]&gt;]]&gt;</arg>
<doc>Removes all ``removables`` from the given ``string``.</doc>
<status status="PASS" start="2026-08-23T02:07:44.313071" elapsed="0.000226"/>
</kw>
<kw name="Strip String" owner="String">
<msg time="2026-08-23T02:07:44.313657" level="INFO">${actual} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="8"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>mode=both</arg>
<doc>Remove leading and/or trailing whitespaces from the given string.</doc>
<status status="PASS" start="2026-08-23T02:07:44.313439" elapsed="0.000246"/>
</kw>
<kw name="Elements Should Be Equal" owner="XML">
<arg>${actual}</arg>
<arg>${expected}</arg>
<arg>normalize_whitespace=True</arg>
<doc>Verifies that the given ``source`` element is equal to ``expected``.</doc>
<status status="PASS" start="2026-08-23T02:07:44.313829" elapsed="0.000426"/>
</kw>
<return>
<value>${actual}</value>
<status status="PASS" start="2026-08-23T02:07:44.314307" elapsed="0.000027"/>
</return>
<arg>commit-delete</arg>
<doc>Load and send the request from the dataset and compare the returned reply to the one stored in the dataset.</doc>
<status status="PASS" start="2026-08-23T02:07:44.297777" elapsed="0.016677"/>
</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-08-23T02:07:44.315655" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:44.315297" elapsed="0.000420"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.315279" elapsed="0.000462"/>
</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-08-23T02:07:44.315890" elapsed="0.000312"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:07:44.320852" 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-08-23T02:07:44.320435" elapsed="0.000446"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-08-23T02:07:44.321097" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:07:44.320955" elapsed="0.000199"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.320937" elapsed="0.000240"/>
</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-08-23T02:07:44.321313" 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-08-23T02:07:44.321469" 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-08-23T02:07:44.321624" 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-08-23T02:07:44.321774" 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-08-23T02:07:44.321948" 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-08-23T02:07:44.322101" 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-08-23T02:07:44.322260" 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-08-23T02:07:44.320144" elapsed="0.002192"/>
</kw>
<status status="PASS" start="2026-08-23T02:07:44.315091" elapsed="0.007295"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-08-23T02:07:44.314732" elapsed="0.007694"/>
</kw>
<doc>Commit the deletion of the element and check the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:44.204311" elapsed="0.118158"/>
</test>
<test id="s1-s3-s1-t17" name="Get_Config_Running_To_Confirm_Delete_After_Commit" line="135">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-08-23T02:07:44.326978" elapsed="0.000207"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:07:44.326707" elapsed="0.000532"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:44.328180" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:44.328073" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.328054" 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-08-23T02:07:44.332766" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:44.332662" elapsed="0.000150"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.332644" elapsed="0.000203"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:44.333789" 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-08-23T02:07:44.333413" elapsed="0.000402"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:07:44.334303" 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-08-23T02:07:44.333981" elapsed="0.000347"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:07:44.334372" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:44.334525" 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-08-23T02:07:44.333055" elapsed="0.001495"/>
</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-08-23T02:07:44.339731" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:44.339624" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.339605" 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-08-23T02:07:44.340991" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:44.340884" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.340864" elapsed="0.000195"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:07:44.341543" level="INFO">${karaf_connection_index} = 18</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-08-23T02:07:44.341188" elapsed="0.000381"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:44.341975" level="INFO">${current_connection_index} = 23</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-08-23T02:07:44.341712" elapsed="0.000300"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:44.374567" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:44.342537" elapsed="0.032199"/>
</kw>
<msg time="2026-08-23T02:07:44.374925" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:07:44.374972" 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 "n "e "t "c "o "n "f "...</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-08-23T02:07:44.342161" elapsed="0.032847"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:07:44.401847" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "G "e "t "_ "C "o "n "f "i "g "_ "R "u "n "n "i "n "g "_ "T "o "_ "C "o "n "f "i "r "m "_ "D "e "l "e "t "e "_ "A "f "t "e "r "_ "C "o "m "m "i "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-08-23T02:07:44.375567" elapsed="0.026466"/>
</kw>
<msg time="2026-08-23T02:07:44.402201" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:07:44.402247" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "G "e "t "_ "C "o "n "f "i "g "_ "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-08-23T02:07:44.375165" elapsed="0.027118"/>
</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-08-23T02:07:44.402565" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:44.402359" elapsed="0.000280"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.402340" elapsed="0.000325"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:44.403190" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "G "e "t "_ "C "o "n "f "i "g "_ "R "u "n "n "i "n "g "_ "T "o "_ "C "o "n "f "i "r "m "_ "D "e "l "e "t "e "_ "A "f "t "e "r "_ "C "o "m "m "i "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-08-23T02:07:44.402798" elapsed="0.000470"/>
</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-08-23T02:07:44.403535" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:44.403333" elapsed="0.000276"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.403315" elapsed="0.000320"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:07:44.403668" 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-08-23T02:07:44.406496" elapsed="0.000148"/>
</kw>
<msg time="2026-08-23T02:07:44.406712" 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-08-23T02:07:44.405864" elapsed="0.000944"/>
</kw>
<kw name="Open 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-08-23T02:07:44.407604" elapsed="0.000036"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:44.408436" elapsed="0.000036"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:07:44.404486" elapsed="0.004065"/>
</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-08-23T02:07:44.403925" elapsed="0.004740"/>
</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-08-23T02:07:44.340563" elapsed="0.068198"/>
</kw>
<msg time="2026-08-23T02:07:44.408874" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:44.408920" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "G "e "t "_ "C "o "n "f "i "g "_ "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-08-23T02:07:44.339957" elapsed="0.069000"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:07:44.409198" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:07:44.409068" elapsed="0.000190"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.409049" elapsed="0.000233"/>
</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-08-23T02:07:44.409652" 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-08-23T02:07:44.410160" elapsed="0.000026"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:07:44.410234" 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-08-23T02:07:44.339287" elapsed="0.071055"/>
</kw>
<msg time="2026-08-23T02:07:44.410434" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:44.410478" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "G "e "t "_ "C "o "n "f "i "g "_ "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-08-23T02:07:44.334913" elapsed="0.075602"/>
</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-08-23T02:07:44.410823" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:44.410588" elapsed="0.000306"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.410571" elapsed="0.000346"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:07:44.334764" elapsed="0.076177"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:07:44.334601" elapsed="0.076368"/>
</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-08-23T02:07:44.332307" elapsed="0.078714"/>
</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-08-23T02:07:44.327773" elapsed="0.083300"/>
</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-08-23T02:07:44.327374" elapsed="0.083742"/>
</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-08-23T02:07:44.323279" elapsed="0.087886"/>
</kw>
<kw name="Check_Test_Objects_Not_Present_In_Config">
<kw name="Load_And_Send_Message">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:44.412404" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/get-config-delete-after-commit-request.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/get-config-delete-after-commit-request.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:44.412593" level="INFO">${data} = &lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="empty"&gt;
    &lt;get-config&gt;
        &lt;source&gt;
            &lt;running/&gt;
        &lt;/source&gt;
    &lt;/get-config&gt;
&lt;/rpc&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:44.412192" elapsed="0.000430"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:44.412668" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T02:07:44.412820" level="INFO">${request} = &lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="empty"&gt;
    &lt;get-config&gt;
        &lt;source&gt;
            &lt;running/&gt;
        &lt;/source&gt;
    &lt;/get-config&gt;
&lt;/rpc&gt;
</msg>
<var>${request}</var>
<arg>${name}-request</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:44.411890" elapsed="0.000975"/>
</kw>
<kw name="Send_Message">
<kw name="Transmit_Message">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:44.415324" level="INFO">&lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="empty"&gt;</msg>
<arg>${message}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:44.413612" elapsed="0.001770"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:44.415901" level="INFO">&lt;get-config&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:44.415524" elapsed="0.000428"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:44.417278" level="INFO">&lt;source&gt;
            &lt;running/&gt;
        &lt;/source&gt;
    &lt;/get-config&gt;
&lt;/rpc&gt;

]]&gt;]]&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:44.416113" elapsed="0.001222"/>
</kw>
<arg>${message}</arg>
<doc>Transmit message to Netconf connection and discard the echo of the message.</doc>
<status status="PASS" start="2026-08-23T02:07:44.413317" elapsed="0.004076"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:44.461471" level="INFO">&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="empty"&gt;
    &lt;data&gt;
        &lt;aaa-encrypt-service-config xmlns="config:aaa:authn:encrypt:service:config"&gt;
            &lt;encrypt-type&gt;AES&lt;/encrypt-type&gt;
            &lt;encrypt-key-length&gt;128&lt;/encrypt-key-length&gt;
            &lt;password-length&gt;12&lt;/password-length&gt;
            &lt;cipher-transforms&gt;AES/GCM/NoPadding&lt;/cipher-transforms&gt;
            &lt;encrypt-key&gt;svW8eCV45iNA&lt;/encrypt-key&gt;
            &lt;encrypt-salt&gt;szGsvGrFGnYbd9nd1t9nEw==&lt;/encrypt-salt&gt;
            &lt;auth-tag-length&gt;128&lt;/auth-tag-length&gt;
            &lt;encrypt-method&gt;PBKDF2WithHmacSHA1&lt;/encrypt-method&gt;
            &lt;encrypt-iteration-count&gt;32768&lt;/encrypt-iteration-count&gt;
        &lt;/aaa-encrypt-service-config&gt;
        &lt;key-stores xmlns="urn:opendaylight:yang:aaa:cert:mdsal"&gt;
            &lt;id&gt;KeyStores:1&lt;/id&gt;
            &lt;ssl-data&gt;
                &lt;bundle-name&gt;opendaylight&lt;/bundle-name&gt;
                &lt;tls-protocols/&gt;
                &lt;odl-keystore&gt;
                    &lt;store-password&gt;szGsvGrFGnYbd9nd1t9nE/fx+V2RdCDYC56eieY+0NUj2isn/xZEgHOUDk8=&lt;/store-password&gt;
                    &lt;sign-alg&gt;SHA1WithRSAEncryption&lt;/sign-alg&gt;
                    &lt;validity&gt;365&lt;/validity&gt;
                    &lt;alias&gt;controller&lt;/alias&gt;
                    &lt;name&gt;ctl.jks&lt;/name&gt;
                    &lt;dname&gt;CN=ODL, OU=Dev, O=LinuxFoundation, L=QC Montreal, C=CA&lt;/dname&gt;
                    &lt;keystoreFile&gt;szGsvGrFGnYbd9nd1t9nE0JpQtr6AxLteOf9yUIRItqLm3NkTNx/el6TA99g1gQs8oNL0ip4IPpl4rt7rFRRPPBAYfnI5Hkh+b8tHGDNwygXVh0qPTd02Ju1oPl0gQiXDeG3LxTe8oV0ONxVMiVDPRLInTiudW5V+NAL0c/qNo47UDfypSDuyY7eUL/QqoheS+TBVtkEivw2fS5E+lNKVmSRnedcKds+JRGqsn0ie6kCPmdOS26Zo5s8D6M2tT+r5in4jHovTq6a3RAmy5ZEJJbHJx/m+Y3778MRBkcD2nV3THNE3WXHfY8z+tUfGap/IGFvqumYYtRL35QgVchzJa3JZ2mMxPc2WLe5i2J1nYXYU6QDbT3UoksnTVzBRz0eznEzQQs47v/7gSOqx+Xug8kld3PASYNi5fZD0YmZGe+lI8ON47+4URudcRM9QmzWRu2LhIpGk8Fk0ueaJh5QF0VbVHat5S7fi1fkSNf2wHTs2pFv75hWSsg+7KDTAgfExMImhBPJ+pc8raT7kLEYiBPXy8NMvlDSksgfvSIcyyharJNj8wtxEFkBVWeX0SFzwlZy9oICi+li5ZM8WhSAbtBGTbpBJ9ADwg8WZo7uznJx+rhIUrjoziNRYqUVp/euIq6rjbE/k6jZCtKTP/qoqy0lShP6M9GfuB6O1akHdOHMWOqX2Q6G8qdVPuyAshiJrIthlJEiY5LX8xhXOQDAuGvwB5hFN/aXa0bMksLEHsTKpXSRnhLCJQxzrKpSSIuQqMzsDUQJQMzch1NGpbSFDwOySU5aeyvsTo4AYPT6Xf6YhGsYDk39B6R/CFsBVO13/4SfkiINKvhpYwQ/vfftmmF/7SXYXp/YR7nffSZTr1ooWJHAaGzqAQw+it9HIaJd7IqTROyhS23F00eX3h/OVwbsBB6PmGXh0LvOoCEfctsl0hTpnouPExetsGBZ7dfPpQIK5UiizhBZjKfr1N3dRVawGP2tFckp3xB0Fr3W8nqRCcWxi5oDGtKcK+z5LinRpCeurFbtZwatTqgh1o/KRXdpQ9E+QmJuyIUnIjoxwuFejwHujtyJR+uAvC90T+G09PnaaMGALkmiJ3kiDn5waQup2qhptMUuF1ZjNirqcbAh7MoEtU02PCQAlBmV0D9Uvp/q9Iw3EFmWhfNT8w/Y03VHw2AK7DY94gJq0vmVUD96ahn4UvWXL5CjFyzXD8ikqdV0fx3zamP53xl6LhQUwBWwiaZVZ6qpfmuSfHRBoOKn5FGmIVpQtgs1i2OYsf8CFMdds6HkzCU9ZR5bcNIUz3U7KzxhaZNpj+tBPjCe5knbuvODRT9AIIZr5NL8zkfLG0R/DySEUJEP9MZFDzaYKqwZUQK9u9lyxXBdRZ/nJJVpYkbOdjraUZOn2wX1MOv768TylMxft2elpWtyo51E7XJca0zO3FT+T6dEDLNuLf70Tjf4ZKlXIs+rbMZRzJiNPU/gOOCncjGnQg7yVNt6CXFzLloYDKyI1+nXar0j8Y7aLeRw4ANqfONtf/a/feF1rxUgkr9kpwha7YR6ZbwLsgEqRGQ1yP0UUYTN4tW9P1fKN220ZErjmNLf5y9d4E1kw0JC9Aowy1OIPHC+GoIH2GXmLp6xrwtvDNX0N9GVVtWxGfdOuRunqus5wncxwKSsJHEV7gC7CttHVSQuYxf+qSVzxDZdZhrEFRDM+2ehQr+jYPjBFDfrFrZ6APcuc6eG8uNgDwFBIT/AvuHqnX/J/C5nmpguP7J8i+L6Tq/vaE06wHDJDHx4janBzQWz38QKtnFFVvSuYlPq4xpjc4XL0w==&lt;/keystoreFile&gt;
                    &lt;key-alg&gt;RSA&lt;/key-alg&gt;
                    &lt;keysize&gt;1024&lt;/keysize&gt;
                &lt;/odl-keystore&gt;
                &lt;cipher-suites&gt;
                    &lt;suiteName/&gt;
                &lt;/cipher-suites&gt;
                &lt;trust-keystore&gt;
                    &lt;keystoreFile&gt;szGsvGrFGnYbd9nd1t9nE0JpQtr6AxLteOf9yIktC+veMTpJpq+B4qQuq9ISdPV1uRcHSk71SvQM3Yb0MmEuAA==&lt;/keystoreFile&gt;
                    &lt;store-password&gt;szGsvGrFGnYbd9nd1t9nE/re1XnJbnW5IKOJusQBPKYGj7gRRA5Mm2KIwp4=&lt;/store-password&gt;
                    &lt;name&gt;truststore.jks&lt;/name&gt;
                &lt;/trust-keystore&gt;
            &lt;/ssl-data&gt;
        &lt;/key-stores&gt;
    &lt;/data&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<msg time="2026-08-23T02:07:44.461648" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="empty"&gt;
    &lt;data&gt;
        &lt;aaa-encrypt-service-config xmlns="config:...</msg>
<var>${reply}</var>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:44.417531" elapsed="0.044146"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:44.461724" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:07:44.461892" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="empty"&gt;
    &lt;data&gt;
        &lt;aaa-encrypt-service-config xmlns="config:...</msg>
<var>${reply}</var>
<arg>${request}</arg>
<doc>Send message to Netconf connection and get the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:44.413006" elapsed="0.048916"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:44.461966" elapsed="0.000025"/>
</return>
<msg time="2026-08-23T02:07:44.462108" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="empty"&gt;
    &lt;data&gt;
        &lt;aaa-encrypt-service-config xmlns="config:...</msg>
<var>${reply}</var>
<arg>${name}</arg>
<doc>Load a message from the data file set, send it to Netconf and return the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:44.411588" elapsed="0.050548"/>
</kw>
<kw name="Check_Test_Objects_Absent">
<kw name="Check_First_Batch_Data_Not_Present">
<kw name="Check_First_Batch_Data">
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;TOY001&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:44.463829" elapsed="0.000311"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;TOY001&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:44.463398" elapsed="0.000798"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CUST001&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:44.464807" elapsed="0.000313"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;CUST001&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:44.464338" elapsed="0.000836"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;car-id&gt;TOY001&lt;/car-id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:44.465737" elapsed="0.000310"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;car-id&gt;TOY001&lt;/car-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:44.465316" elapsed="0.000787"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUST001&lt;/person-id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:44.466661" elapsed="0.000300"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUST001&lt;/person-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:44.466245" elapsed="0.000771"/>
</kw>
<arg>${reply}</arg>
<arg>BuiltIn.Should_Not_Contain</arg>
<status status="PASS" start="2026-08-23T02:07:44.463081" elapsed="0.003992"/>
</kw>
<arg>${reply}</arg>
<status status="PASS" start="2026-08-23T02:07:44.462558" elapsed="0.004564"/>
</kw>
<kw name="Check_Second_Batch_Data">
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;OLD001&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:44.468008" elapsed="0.000286"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;OLD001&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:44.467572" elapsed="0.000802"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CUST002&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:44.468959" elapsed="0.000285"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;CUST002&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:44.468518" elapsed="0.000780"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;car-id&gt;OLD001&lt;/car-id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:44.469871" elapsed="0.000284"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;car-id&gt;OLD001&lt;/car-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:44.469439" elapsed="0.000771"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUST002&lt;/person-id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:44.470767" elapsed="0.000301"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUST002&lt;/person-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:44.470350" elapsed="0.000772"/>
</kw>
<arg>${reply}</arg>
<arg>BuiltIn.Should_not_Contain</arg>
<status status="PASS" start="2026-08-23T02:07:44.467253" elapsed="0.003925"/>
</kw>
<kw name="Check_Multiple_Batch_Data_Absent">
<kw name="Check_Multiple_Batch_Data">
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CAROLD&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:44.472419" elapsed="0.000284"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;CAROLD&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:44.471989" elapsed="0.000769"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CUSTOLD&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:44.473335" elapsed="0.000280"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;CUSTOLD&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:44.472919" elapsed="0.000750"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;car-id&gt;CAROLD&lt;/car-id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:44.474237" elapsed="0.000278"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;car-id&gt;CAROLD&lt;/car-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:44.473810" elapsed="0.000759"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUSTOLD&lt;/person-id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:44.475183" elapsed="0.000281"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUSTOLD&lt;/person-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:44.474748" elapsed="0.000770"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CARYOUNG&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:44.476096" elapsed="0.000306"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;CARYOUNG&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:44.475660" elapsed="0.000797"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CUSTYOUNG&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:44.477035" elapsed="0.000280"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;CUSTYOUNG&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:44.476598" elapsed="0.000772"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;car-id&gt;CARYOUNG&lt;/car-id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:44.477942" elapsed="0.000284"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;car-id&gt;CARYOUNG&lt;/car-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:44.477511" elapsed="0.000768"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUSTYOUNG&lt;/person-id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:44.478855" elapsed="0.000284"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUSTYOUNG&lt;/person-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:44.478421" elapsed="0.000773"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CARMID&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:44.479748" elapsed="0.000298"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;CARMID&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:44.479335" elapsed="0.000765"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CUSTMID&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:44.480697" elapsed="0.000302"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;CUSTMID&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:44.480267" elapsed="0.000787"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;car-id&gt;CARMID&lt;/car-id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:44.481605" elapsed="0.000295"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;car-id&gt;CARMID&lt;/car-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:44.481194" elapsed="0.000760"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUSTMID&lt;/person-id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:44.482507" elapsed="0.000279"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUSTMID&lt;/person-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:44.482094" elapsed="0.000760"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CAROLD2&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:44.483409" elapsed="0.000415"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;CAROLD2&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:44.482997" elapsed="0.000898"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CUSTOLD2&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:44.484471" elapsed="0.000281"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;CUSTOLD2&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:44.484038" elapsed="0.000768"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;car-id&gt;CAROLD2&lt;/car-id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:44.485386" elapsed="0.000280"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;car-id&gt;CAROLD2&lt;/car-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:44.484970" elapsed="0.000749"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUSTOLD2&lt;/person-id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:44.486291" elapsed="0.000281"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUSTOLD2&lt;/person-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:44.485873" elapsed="0.000753"/>
</kw>
<arg>${reply}</arg>
<arg>BuiltIn.Should_not_Contain</arg>
<status status="PASS" start="2026-08-23T02:07:44.471652" elapsed="0.015030"/>
</kw>
<arg>${reply}</arg>
<status status="PASS" start="2026-08-23T02:07:44.471297" elapsed="0.015433"/>
</kw>
<kw name="Check_Auxiliary_Data">
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CUSTBAD&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:44.487610" elapsed="0.000299"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;CUSTBAD&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:44.487188" elapsed="0.000776"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;test&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:44.488534" elapsed="0.000280"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;test&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:44.488117" elapsed="0.000810"/>
</kw>
<arg>${reply}</arg>
<arg>BuiltIn.Should_not_Contain</arg>
<status status="PASS" start="2026-08-23T02:07:44.486866" elapsed="0.002119"/>
</kw>
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;test&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:44.489118" elapsed="0.000285"/>
</kw>
<arg>${reply}</arg>
<status status="PASS" start="2026-08-23T02:07:44.462280" elapsed="0.027183"/>
</kw>
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;REPLACE&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:44.489594" elapsed="0.000297"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:44.489941" elapsed="0.000028"/>
</return>
<arg>get-config-delete-after-commit</arg>
<doc>Use dataset with the specified name to get the configuration and check that none of our test objects are there.</doc>
<status status="PASS" start="2026-08-23T02:07:44.411315" elapsed="0.078748"/>
</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-08-23T02:07:44.491228" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:44.490864" elapsed="0.000425"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.490829" 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-08-23T02:07:44.491447" elapsed="0.000307"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:07:44.496441" 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-08-23T02:07:44.496027" elapsed="0.000443"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-08-23T02:07:44.496687" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-08-23T02:07:44.496544" elapsed="0.000199"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.496526" 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-08-23T02:07:44.496922" 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-08-23T02:07:44.497080" 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-08-23T02:07:44.497236" elapsed="0.000019"/>
</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-08-23T02:07:44.497386" 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-08-23T02:07:44.497536" 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-08-23T02:07:44.497684" 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-08-23T02:07:44.497845" 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-08-23T02:07:44.495706" elapsed="0.002217"/>
</kw>
<status status="PASS" start="2026-08-23T02:07:44.490642" elapsed="0.007330"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-08-23T02:07:44.490305" elapsed="0.007707"/>
</kw>
<doc>Check that the element is gone.</doc>
<status status="PASS" start="2026-08-23T02:07:44.322754" elapsed="0.175296"/>
</test>
<test id="s1-s3-s1-t18" name="Commit_No_Transaction" line="139">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-08-23T02:07:44.501121" elapsed="0.000205"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:07:44.500873" elapsed="0.000506"/>
</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-08-23T02:07:44.502325" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:44.502216" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.502198" elapsed="0.000196"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:44.507134" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:44.507028" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.507010" elapsed="0.000192"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:44.508193" 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-08-23T02:07:44.507776" elapsed="0.000445"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:07:44.508704" 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-08-23T02:07:44.508405" elapsed="0.000326"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:07:44.508776" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:44.508950" 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-08-23T02:07:44.507412" elapsed="0.001564"/>
</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-08-23T02:07:44.514039" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:44.513931" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.513912" 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-08-23T02:07:44.515286" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:44.515179" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.515160" elapsed="0.000193"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:07:44.515890" level="INFO">${karaf_connection_index} = 18</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-08-23T02:07:44.515485" elapsed="0.000433"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:44.516307" level="INFO">${current_connection_index} = 23</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-08-23T02:07:44.516064" elapsed="0.000269"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:44.550546" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:44.516873" elapsed="0.033844"/>
</kw>
<msg time="2026-08-23T02:07:44.550904" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:07:44.550951" 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 "n "e "t "c "o "n "f "...</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-08-23T02:07:44.516479" elapsed="0.034510"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:07:44.571013" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "o "m "m "i "t "_ "N "o "_ "T "r "a "n "s "a "c "t "i "o "n "[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-08-23T02:07:44.551552" elapsed="0.019651"/>
</kw>
<msg time="2026-08-23T02:07:44.571378" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:07:44.571425" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "o "m "m "i "t "_ "N "o "_ "T "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-08-23T02:07:44.551146" elapsed="0.020316"/>
</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-08-23T02:07:44.571757" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:44.571538" elapsed="0.000317"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.571518" elapsed="0.000365"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:44.572382" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "o "m "m "i "t "_ "N "o "_ "T "r "a "n "s "a "c "t "i "o "n "[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-08-23T02:07:44.572012" elapsed="0.000437"/>
</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-08-23T02:07:44.572716" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:44.572513" elapsed="0.000279"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.572496" elapsed="0.000321"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:07:44.572870" 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-08-23T02:07:44.575740" elapsed="0.000170"/>
</kw>
<msg time="2026-08-23T02:07:44.575980" 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-08-23T02:07:44.575080" elapsed="0.000997"/>
</kw>
<kw name="Open 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-08-23T02:07:44.576882" elapsed="0.000038"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:44.577723" elapsed="0.000037"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:07:44.573681" elapsed="0.004212"/>
</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-08-23T02:07:44.573118" elapsed="0.004892"/>
</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-08-23T02:07:44.514878" elapsed="0.063232"/>
</kw>
<msg time="2026-08-23T02:07:44.578202" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:44.578246" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "o "m "m "i "t "_ "N "o "_ "T "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-08-23T02:07:44.514248" elapsed="0.064035"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:07:44.578633" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-08-23T02:07:44.578360" elapsed="0.000350"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.578341" elapsed="0.000399"/>
</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-08-23T02:07:44.579166" 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-08-23T02:07:44.579490" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:07:44.579563" 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-08-23T02:07:44.513580" elapsed="0.066091"/>
</kw>
<msg time="2026-08-23T02:07:44.579763" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:44.579807" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "o "m "m "i "t "_ "N "o "_ "T "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-08-23T02:07:44.509323" elapsed="0.070715"/>
</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-08-23T02:07:44.580358" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:44.580118" elapsed="0.000294"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.580100" elapsed="0.000335"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:07:44.509195" elapsed="0.071264"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:07:44.509028" elapsed="0.071460"/>
</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-08-23T02:07:44.506642" elapsed="0.073898"/>
</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-08-23T02:07:44.501934" elapsed="0.078659"/>
</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-08-23T02:07:44.501512" elapsed="0.079125"/>
</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-08-23T02:07:44.498904" elapsed="0.081783"/>
</kw>
<kw name="Perform_Test">
<kw name="Load_And_Send_Message">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:44.581953" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/commit-no-transaction-request.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/commit-no-transaction-request.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:44.582082" level="INFO">${data} = &lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="10"&gt;
&lt;commit/&gt;
&lt;/rpc&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:44.581724" elapsed="0.000385"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:44.582155" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:07:44.582300" level="INFO">${request} = &lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="10"&gt;
&lt;commit/&gt;
&lt;/rpc&gt;
</msg>
<var>${request}</var>
<arg>${name}-request</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:44.581425" elapsed="0.000902"/>
</kw>
<kw name="Send_Message">
<kw name="Transmit_Message">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:44.584815" level="INFO">&lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="10"&gt;</msg>
<arg>${message}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:44.583103" elapsed="0.001783"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:44.585334" level="INFO">&lt;commit/&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:44.585025" elapsed="0.000360"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:44.585999" level="INFO">&lt;/rpc&gt;

]]&gt;]]&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:44.585522" elapsed="0.000531"/>
</kw>
<arg>${message}</arg>
<doc>Transmit message to Netconf connection and discard the echo of the message.</doc>
<status status="PASS" start="2026-08-23T02:07:44.582783" elapsed="0.003326"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:44.590335" level="INFO">&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="10"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<msg time="2026-08-23T02:07:44.590427" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="10"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:44.586282" elapsed="0.004172"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:44.590502" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:44.590649" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="10"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${request}</arg>
<doc>Send message to Netconf connection and get the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:44.582488" elapsed="0.008189"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:44.590719" elapsed="0.000039"/>
</return>
<msg time="2026-08-23T02:07:44.590910" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="10"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${actual}</var>
<arg>${name}</arg>
<doc>Load a message from the data file set, send it to Netconf and return the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:44.581138" elapsed="0.009804"/>
</kw>
<kw name="Load_Expected_Reply">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:44.591911" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/commit-no-transaction-reply.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/commit-no-transaction-reply.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:44.592039" level="INFO">${data} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="10"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:44.591684" elapsed="0.000383"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:44.592113" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:44.592263" level="INFO">${expected_reply} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="10"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected_reply}</var>
<arg>${name}-reply</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:44.591379" elapsed="0.000911"/>
</kw>
<return>
<value>${expected_reply}</value>
<status status="PASS" start="2026-08-23T02:07:44.592332" elapsed="0.000025"/>
</return>
<msg time="2026-08-23T02:07:44.592475" level="INFO">${expected} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="10"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected}</var>
<arg>${name}</arg>
<doc>Load the expected reply from the data file set and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:44.591082" elapsed="0.001420"/>
</kw>
<kw name="Remove String" owner="String">
<msg time="2026-08-23T02:07:44.592855" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="10"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>]]&gt;]]&gt;</arg>
<doc>Removes all ``removables`` from the given ``string``.</doc>
<status status="PASS" start="2026-08-23T02:07:44.592642" elapsed="0.000243"/>
</kw>
<kw name="Strip String" owner="String">
<msg time="2026-08-23T02:07:44.593248" level="INFO">${actual} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="10"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>mode=both</arg>
<doc>Remove leading and/or trailing whitespaces from the given string.</doc>
<status status="PASS" start="2026-08-23T02:07:44.593028" elapsed="0.000249"/>
</kw>
<kw name="Elements Should Be Equal" owner="XML">
<arg>${actual}</arg>
<arg>${expected}</arg>
<arg>normalize_whitespace=True</arg>
<doc>Verifies that the given ``source`` element is equal to ``expected``.</doc>
<status status="PASS" start="2026-08-23T02:07:44.593418" elapsed="0.000399"/>
</kw>
<return>
<value>${actual}</value>
<status status="PASS" start="2026-08-23T02:07:44.593886" elapsed="0.000029"/>
</return>
<arg>commit-no-transaction</arg>
<doc>Load and send the request from the dataset and compare the returned reply to the one stored in the dataset.</doc>
<status status="PASS" start="2026-08-23T02:07:44.580859" elapsed="0.013152"/>
</kw>
<kw name="Report Failure Due To Bug" owner="Utils" type="TEARDOWN">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:07:44.595374" 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-08-23T02:07:44.594719" elapsed="0.000683"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-08-23T02:07:44.595621" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:07:44.595477" elapsed="0.000201"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.595459" elapsed="0.000243"/>
</if>
<kw name="Comment" owner="BuiltIn">
<arg>Jira tickets are {PROJECT}-{NUMBER} while Bugzilla tickets are {NUMBER}</arg>
<doc>Displays the given messages in the log file as keyword arguments.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:44.595867" elapsed="0.000023"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${match}</var>
<arg>Should Contain</arg>
<arg>${number}</arg>
<arg>-</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:44.596035" elapsed="0.000021"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${bug_url}</var>
<arg>${match}</arg>
<arg>https://jira.opendaylight.org/browse/${number}</arg>
<arg>https://bugs.opendaylight.org/show_bug.cgi?id=${number}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:44.596202" elapsed="0.000020"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${msg}</var>
<arg>This test fails due to ${bug_url}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:44.596359" elapsed="0.000020"/>
</kw>
<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-08-23T02:07:44.596511" elapsed="0.000019"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<arg>${msg}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:44.596658" elapsed="0.000020"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${msg}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:44.596861" elapsed="0.000022"/>
</kw>
<if>
<branch type="IF" condition="&quot;${include_bug_in_tags}&quot;==&quot;True&quot;">
<kw name="Set Tags" owner="BuiltIn">
<arg>${bug_url}</arg>
<doc>Adds given ``tags`` for the current test or all tests in a suite.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:44.597094" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:44.596947" elapsed="0.000198"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:07:44.596931" elapsed="0.000238"/>
</if>
<arg>4455</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="PASS" start="2026-08-23T02:07:44.594371" elapsed="0.002847"/>
</kw>
<doc>Attempt to perform "commit" when there are no changes in the candidate configuration and check that it returns OK status.</doc>
<status status="PASS" start="2026-08-23T02:07:44.498308" elapsed="0.098955"/>
</test>
<test id="s1-s3-s1-t19" name="Edit_Config_Second_Batch_Merge" line="144">
<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-08-23T02:07:44.600318" elapsed="0.000207"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:07:44.600071" elapsed="0.000508"/>
</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-08-23T02:07:44.601531" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:44.601423" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.601405" elapsed="0.000195"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:44.606073" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:44.605965" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.605945" elapsed="0.000198"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:44.607143" 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-08-23T02:07:44.606734" elapsed="0.000436"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:07:44.607608" 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-08-23T02:07:44.607315" elapsed="0.000319"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:07:44.607679" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T02:07:44.607852" 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-08-23T02:07:44.606352" elapsed="0.001527"/>
</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-08-23T02:07:44.613062" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:44.612954" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.612935" 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-08-23T02:07:44.614312" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:44.614205" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.614187" elapsed="0.000193"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:07:44.614909" level="INFO">${karaf_connection_index} = 18</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-08-23T02:07:44.614529" elapsed="0.000407"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:44.615323" level="INFO">${current_connection_index} = 23</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-08-23T02:07:44.615081" elapsed="0.000269"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:44.640866" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:44.615888" elapsed="0.025150"/>
</kw>
<msg time="2026-08-23T02:07:44.641206" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:07:44.641251" 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 "n "e "t "c "o "n "f "...</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-08-23T02:07:44.615495" elapsed="0.025793"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:07:44.658014" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "E "d "i "t "_ "C "o "n "f "i "g "_ "S "e "c "o "n "d "_ "B "a "t "c "h "_ "M "e "r "g "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-08-23T02:07:44.641821" elapsed="0.016373"/>
</kw>
<msg time="2026-08-23T02:07:44.658360" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:07:44.658406" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "E "d "i "t "_ "C "o "n "f "i "g "_ ...</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-08-23T02:07:44.641445" elapsed="0.017030"/>
</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-08-23T02:07:44.658770" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:44.658555" elapsed="0.000313"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.658535" elapsed="0.000360"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:44.659399" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "E "d "i "t "_ "C "o "n "f "i "g "_ "S "e "c "o "n "d "_ "B "a "t "c "h "_ "M "e "r "g "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-08-23T02:07:44.659026" elapsed="0.000444"/>
</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-08-23T02:07:44.659738" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:44.659536" elapsed="0.000277"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.659518" elapsed="0.000335"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:07:44.659889" 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-08-23T02:07:44.662714" elapsed="0.000175"/>
</kw>
<msg time="2026-08-23T02:07:44.662960" 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-08-23T02:07:44.662083" elapsed="0.000973"/>
</kw>
<kw name="Open 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-08-23T02:07:44.663828" elapsed="0.000071"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:44.664662" elapsed="0.000038"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:07:44.660696" elapsed="0.004085"/>
</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-08-23T02:07:44.660132" elapsed="0.004788"/>
</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-08-23T02:07:44.613907" elapsed="0.051113"/>
</kw>
<msg time="2026-08-23T02:07:44.665112" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:44.665156" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "E "d "i "t "_ "C "o "n "f "i "g "_ ...</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-08-23T02:07:44.613268" elapsed="0.051925"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:07:44.665376" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-23T02:07:44.665269" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.665250" elapsed="0.000210"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:44.666059" 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-08-23T02:07:44.666381" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:07:44.666453" 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-08-23T02:07:44.612599" elapsed="0.053964"/>
</kw>
<msg time="2026-08-23T02:07:44.666655" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:44.666698" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "E "d "i "t "_ "C "o "n "f "i "g "_ ...</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-08-23T02:07:44.608223" elapsed="0.058511"/>
</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-08-23T02:07:44.667067" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:44.666809" elapsed="0.000313"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.666792" elapsed="0.000353"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:07:44.608095" elapsed="0.059074"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:07:44.607930" elapsed="0.059268"/>
</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-08-23T02:07:44.605577" elapsed="0.061673"/>
</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-08-23T02:07:44.601143" elapsed="0.066160"/>
</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-08-23T02:07:44.600714" elapsed="0.066633"/>
</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-08-23T02:07:44.598054" elapsed="0.069382"/>
</kw>
<kw name="Perform_Test">
<kw name="Load_And_Send_Message">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:44.668905" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-2-request.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-2-request.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:44.669041" level="INFO">${data} = &lt;rpc message-id="20" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
&lt;edit-config&gt;
&lt;target&gt;
&lt;candidate/&gt;
&lt;/target&gt;
&lt;default-operation&gt;merge&lt;/default-operation&gt;
&lt;config&gt;
&lt;cars xmlns="urn:opendaylight:...</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:44.668486" elapsed="0.000583"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:44.669117" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:44.669267" level="INFO">${request} = &lt;rpc message-id="20" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
&lt;edit-config&gt;
&lt;target&gt;
&lt;candidate/&gt;
&lt;/target&gt;
&lt;default-operation&gt;merge&lt;/default-operation&gt;
&lt;config&gt;
&lt;cars xmlns="urn:opendaylight:...</msg>
<var>${request}</var>
<arg>${name}-request</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:44.668183" elapsed="0.001112"/>
</kw>
<kw name="Send_Message">
<kw name="Transmit_Message">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:44.671789" level="INFO">&lt;rpc message-id="20" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;</msg>
<arg>${message}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:44.670086" elapsed="0.001773"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:44.672349" level="INFO">&lt;edit-config&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:44.672002" elapsed="0.000398"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:44.680812" level="INFO">&lt;target&gt;
&lt;candidate/&gt;
&lt;/target&gt;
&lt;default-operation&gt;merge&lt;/default-operation&gt;
&lt;config&gt;
&lt;cars xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car"&gt;
  &lt;car-entry&gt;
    &lt;id&gt;OLD001&lt;/id&gt;
    &lt;model&gt;Skoda MB&lt;/model&gt;
    &lt;manufacturer&gt;Skoda Mlada Boleslav&lt;/manufacturer&gt;
    &lt;category&gt;sedan&lt;/category&gt;
  &lt;/car-entry&gt;
&lt;/cars&gt;
&lt;people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:people"&gt;
  &lt;person&gt;
    &lt;id&gt;CUST002&lt;/id&gt;
    &lt;gender&gt;male&lt;/gender&gt;
    &lt;age&gt;28&lt;/age&gt;
  &lt;/person&gt;
&lt;/people&gt;
&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;
  &lt;car-person&gt;
    &lt;car-id&gt;OLD001&lt;/car-id&gt;
    &lt;person-id&gt;CUST002&lt;/person-id&gt;
  &lt;/car-person&gt;
&lt;/car-people&gt;
&lt;/config&gt;
&lt;/edit-config&gt;
&lt;/rpc&gt;

]]&gt;]]&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:44.672537" elapsed="0.008359"/>
</kw>
<arg>${message}</arg>
<doc>Transmit message to Netconf connection and discard the echo of the message.</doc>
<status status="PASS" start="2026-08-23T02:07:44.669751" elapsed="0.011202"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:44.682787" level="INFO">&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="20"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<msg time="2026-08-23T02:07:44.682890" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="20"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:44.681093" elapsed="0.001826"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:44.682966" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:44.683113" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="20"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${request}</arg>
<doc>Send message to Netconf connection and get the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:44.669437" elapsed="0.013704"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:44.683185" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:07:44.683327" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="20"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${actual}</var>
<arg>${name}</arg>
<doc>Load a message from the data file set, send it to Netconf and return the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:44.667891" elapsed="0.015463"/>
</kw>
<kw name="Load_Expected_Reply">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:44.684305" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-2-reply.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-2-reply.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:44.684432" level="INFO">${data} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="20"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:44.684098" elapsed="0.000361"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:44.684505" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:07:44.684651" level="INFO">${expected_reply} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="20"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected_reply}</var>
<arg>${name}-reply</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:44.683779" elapsed="0.000899"/>
</kw>
<return>
<value>${expected_reply}</value>
<status status="PASS" start="2026-08-23T02:07:44.684721" elapsed="0.000024"/>
</return>
<msg time="2026-08-23T02:07:44.684881" level="INFO">${expected} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="20"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected}</var>
<arg>${name}</arg>
<doc>Load the expected reply from the data file set and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:44.683489" elapsed="0.001420"/>
</kw>
<kw name="Remove String" owner="String">
<msg time="2026-08-23T02:07:44.685283" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="20"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>]]&gt;]]&gt;</arg>
<doc>Removes all ``removables`` from the given ``string``.</doc>
<status status="PASS" start="2026-08-23T02:07:44.685083" elapsed="0.000229"/>
</kw>
<kw name="Strip String" owner="String">
<msg time="2026-08-23T02:07:44.685689" level="INFO">${actual} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="20"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>mode=both</arg>
<doc>Remove leading and/or trailing whitespaces from the given string.</doc>
<status status="PASS" start="2026-08-23T02:07:44.685455" elapsed="0.000267"/>
</kw>
<kw name="Elements Should Be Equal" owner="XML">
<arg>${actual}</arg>
<arg>${expected}</arg>
<arg>normalize_whitespace=True</arg>
<doc>Verifies that the given ``source`` element is equal to ``expected``.</doc>
<status status="PASS" start="2026-08-23T02:07:44.685893" elapsed="0.000399"/>
</kw>
<return>
<value>${actual}</value>
<status status="PASS" start="2026-08-23T02:07:44.686346" elapsed="0.000028"/>
</return>
<arg>merge-2</arg>
<doc>Load and send the request from the dataset and compare the returned reply to the one stored in the dataset.</doc>
<status status="PASS" start="2026-08-23T02:07:44.667593" elapsed="0.018878"/>
</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-08-23T02:07:44.687634" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:44.687275" elapsed="0.000421"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.687257" elapsed="0.000464"/>
</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-08-23T02:07:44.687874" elapsed="0.000311"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:07:44.692997" 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-08-23T02:07:44.692581" elapsed="0.000444"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-08-23T02:07:44.693239" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:07:44.693098" elapsed="0.000197"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.693080" 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-08-23T02:07:44.693477" 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-08-23T02:07:44.693636" 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-08-23T02:07:44.693793" elapsed="0.000019"/>
</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-08-23T02:07:44.693968" 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-08-23T02:07:44.694119" 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-08-23T02:07:44.694268" 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-08-23T02:07:44.694417" 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-08-23T02:07:44.692290" elapsed="0.002201"/>
</kw>
<status status="PASS" start="2026-08-23T02:07:44.687069" elapsed="0.007471"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-08-23T02:07:44.686713" elapsed="0.007867"/>
</kw>
<doc>Create an element to be discarded and check the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:44.597520" elapsed="0.097098"/>
</test>
<test id="s1-s3-s1-t20" name="Get_And_Check_Config_Candidate_For_Discard" line="148">
<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-08-23T02:07:44.697674" elapsed="0.000230"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:07:44.697427" elapsed="0.000531"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:44.698903" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:44.698778" elapsed="0.000173"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.698760" elapsed="0.000213"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:44.703372" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:44.703266" elapsed="0.000187"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.703248" elapsed="0.000231"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:44.704448" 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-08-23T02:07:44.704069" elapsed="0.000406"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:07:44.704933" 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-08-23T02:07:44.704623" elapsed="0.000337"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:07:44.705005" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:44.705160" 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-08-23T02:07:44.703690" elapsed="0.001496"/>
</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-08-23T02:07:44.710397" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:44.710289" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.710270" elapsed="0.000197"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:44.711637" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:44.711532" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.711514" elapsed="0.000192"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:07:44.712216" level="INFO">${karaf_connection_index} = 18</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-08-23T02:07:44.711860" elapsed="0.000382"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:44.712630" level="INFO">${current_connection_index} = 23</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-08-23T02:07:44.712388" elapsed="0.000267"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:44.743808" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:44.713216" elapsed="0.030775"/>
</kw>
<msg time="2026-08-23T02:07:44.744182" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:07:44.744228" 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 "n "e "t "c "o "n "f "...</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-08-23T02:07:44.712801" elapsed="0.031463"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:07:44.768694" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "G "e "t "_ "A "n "d "_ "C "h "e "c "k "_ "C "o "n "f "i "g "_ "C "a "n "d "i "d "a "t "e "_ "F "o "r "_ "D "i "s "c "a "r "d "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-08-23T02:07:44.744854" elapsed="0.024048"/>
</kw>
<msg time="2026-08-23T02:07:44.769069" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:07:44.769114" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "G "e "t "_ "A "n "d "_ "C "h "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-08-23T02:07:44.744421" elapsed="0.024729"/>
</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-08-23T02:07:44.769431" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:44.769225" elapsed="0.000281"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.769206" elapsed="0.000326"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:44.770047" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "G "e "t "_ "A "n "d "_ "C "h "e "c "k "_ "C "o "n "f "i "g "_ "C "a "n "d "i "d "a "t "e "_ "F "o "r "_ "D "i "s "c "a "r "d "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:07:44.769660" elapsed="0.000463"/>
</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-08-23T02:07:44.770390" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:44.770188" elapsed="0.000277"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.770171" elapsed="0.000319"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:07:44.770524" 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-08-23T02:07:44.773366" elapsed="0.000147"/>
</kw>
<msg time="2026-08-23T02:07:44.773583" 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-08-23T02:07:44.772704" elapsed="0.000978"/>
</kw>
<kw name="Open 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-08-23T02:07:44.774522" elapsed="0.000037"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:44.775343" elapsed="0.000036"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:07:44.771357" elapsed="0.004100"/>
</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-08-23T02:07:44.770763" elapsed="0.004808"/>
</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-08-23T02:07:44.711233" elapsed="0.064436"/>
</kw>
<msg time="2026-08-23T02:07:44.775759" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:44.775802" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "G "e "t "_ "A "n "d "_ "C "h "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-08-23T02:07:44.710604" elapsed="0.065277"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:07:44.776067" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-08-23T02:07:44.775960" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.775941" elapsed="0.000208"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:44.776552" 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-08-23T02:07:44.776924" elapsed="0.000026"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:07:44.776998" 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-08-23T02:07:44.709953" elapsed="0.067152"/>
</kw>
<msg time="2026-08-23T02:07:44.777198" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:44.777241" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "G "e "t "_ "A "n "d "_ "C "h "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-08-23T02:07:44.705565" elapsed="0.071713"/>
</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-08-23T02:07:44.777588" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:44.777352" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.777335" elapsed="0.000330"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:07:44.705433" elapsed="0.072255"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:07:44.705261" elapsed="0.072460"/>
</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-08-23T02:07:44.702910" elapsed="0.074864"/>
</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-08-23T02:07:44.698496" elapsed="0.079331"/>
</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-08-23T02:07:44.698092" elapsed="0.079937"/>
</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-08-23T02:07:44.695454" elapsed="0.082628"/>
</kw>
<kw name="Load_And_Send_Message">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:44.779028" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/get-config-candidate-request.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/get-config-candidate-request.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:44.779158" level="INFO">${data} = &lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="21"&gt;
    &lt;get-config&gt;
        &lt;source&gt;
            &lt;candidate/&gt;
        &lt;/source&gt;
    &lt;/get-config&gt;
&lt;/rpc&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:44.778799" elapsed="0.000387"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:44.779232" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:44.779378" level="INFO">${request} = &lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="21"&gt;
    &lt;get-config&gt;
        &lt;source&gt;
            &lt;candidate/&gt;
        &lt;/source&gt;
    &lt;/get-config&gt;
&lt;/rpc&gt;
</msg>
<var>${request}</var>
<arg>${name}-request</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:44.778493" elapsed="0.000913"/>
</kw>
<kw name="Send_Message">
<kw name="Transmit_Message">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:44.782235" level="INFO">&lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="21"&gt;</msg>
<arg>${message}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:44.780365" elapsed="0.001928"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:44.782800" level="INFO">&lt;get-config&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:44.782435" elapsed="0.000431"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:44.784170" level="INFO">&lt;source&gt;
            &lt;candidate/&gt;
        &lt;/source&gt;
    &lt;/get-config&gt;
&lt;/rpc&gt;

]]&gt;]]&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:44.783040" elapsed="0.001197"/>
</kw>
<arg>${message}</arg>
<doc>Transmit message to Netconf connection and discard the echo of the message.</doc>
<status status="PASS" start="2026-08-23T02:07:44.780055" elapsed="0.004239"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:44.836598" level="INFO">&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="21"&gt;
    &lt;data&gt;
        &lt;aaa-encrypt-service-config xmlns="config:aaa:authn:encrypt:service:config"&gt;
            &lt;encrypt-type&gt;AES&lt;/encrypt-type&gt;
            &lt;encrypt-key-length&gt;128&lt;/encrypt-key-length&gt;
            &lt;password-length&gt;12&lt;/password-length&gt;
            &lt;cipher-transforms&gt;AES/GCM/NoPadding&lt;/cipher-transforms&gt;
            &lt;encrypt-key&gt;svW8eCV45iNA&lt;/encrypt-key&gt;
            &lt;encrypt-salt&gt;szGsvGrFGnYbd9nd1t9nEw==&lt;/encrypt-salt&gt;
            &lt;auth-tag-length&gt;128&lt;/auth-tag-length&gt;
            &lt;encrypt-method&gt;PBKDF2WithHmacSHA1&lt;/encrypt-method&gt;
            &lt;encrypt-iteration-count&gt;32768&lt;/encrypt-iteration-count&gt;
        &lt;/aaa-encrypt-service-config&gt;
        &lt;key-stores xmlns="urn:opendaylight:yang:aaa:cert:mdsal"&gt;
            &lt;id&gt;KeyStores:1&lt;/id&gt;
            &lt;ssl-data&gt;
                &lt;bundle-name&gt;opendaylight&lt;/bundle-name&gt;
                &lt;tls-protocols/&gt;
                &lt;odl-keystore&gt;
                    &lt;store-password&gt;szGsvGrFGnYbd9nd1t9nE/fx+V2RdCDYC56eieY+0NUj2isn/xZEgHOUDk8=&lt;/store-password&gt;
                    &lt;sign-alg&gt;SHA1WithRSAEncryption&lt;/sign-alg&gt;
                    &lt;validity&gt;365&lt;/validity&gt;
                    &lt;alias&gt;controller&lt;/alias&gt;
                    &lt;name&gt;ctl.jks&lt;/name&gt;
                    &lt;dname&gt;CN=ODL, OU=Dev, O=LinuxFoundation, L=QC Montreal, C=CA&lt;/dname&gt;
                    &lt;keystoreFile&gt;szGsvGrFGnYbd9nd1t9nE0JpQtr6AxLteOf9yUIRItqLm3NkTNx/el6TA99g1gQs8oNL0ip4IPpl4rt7rFRRPPBAYfnI5Hkh+b8tHGDNwygXVh0qPTd02Ju1oPl0gQiXDeG3LxTe8oV0ONxVMiVDPRLInTiudW5V+NAL0c/qNo47UDfypSDuyY7eUL/QqoheS+TBVtkEivw2fS5E+lNKVmSRnedcKds+JRGqsn0ie6kCPmdOS26Zo5s8D6M2tT+r5in4jHovTq6a3RAmy5ZEJJbHJx/m+Y3778MRBkcD2nV3THNE3WXHfY8z+tUfGap/IGFvqumYYtRL35QgVchzJa3JZ2mMxPc2WLe5i2J1nYXYU6QDbT3UoksnTVzBRz0eznEzQQs47v/7gSOqx+Xug8kld3PASYNi5fZD0YmZGe+lI8ON47+4URudcRM9QmzWRu2LhIpGk8Fk0ueaJh5QF0VbVHat5S7fi1fkSNf2wHTs2pFv75hWSsg+7KDTAgfExMImhBPJ+pc8raT7kLEYiBPXy8NMvlDSksgfvSIcyyharJNj8wtxEFkBVWeX0SFzwlZy9oICi+li5ZM8WhSAbtBGTbpBJ9ADwg8WZo7uznJx+rhIUrjoziNRYqUVp/euIq6rjbE/k6jZCtKTP/qoqy0lShP6M9GfuB6O1akHdOHMWOqX2Q6G8qdVPuyAshiJrIthlJEiY5LX8xhXOQDAuGvwB5hFN/aXa0bMksLEHsTKpXSRnhLCJQxzrKpSSIuQqMzsDUQJQMzch1NGpbSFDwOySU5aeyvsTo4AYPT6Xf6YhGsYDk39B6R/CFsBVO13/4SfkiINKvhpYwQ/vfftmmF/7SXYXp/YR7nffSZTr1ooWJHAaGzqAQw+it9HIaJd7IqTROyhS23F00eX3h/OVwbsBB6PmGXh0LvOoCEfctsl0hTpnouPExetsGBZ7dfPpQIK5UiizhBZjKfr1N3dRVawGP2tFckp3xB0Fr3W8nqRCcWxi5oDGtKcK+z5LinRpCeurFbtZwatTqgh1o/KRXdpQ9E+QmJuyIUnIjoxwuFejwHujtyJR+uAvC90T+G09PnaaMGALkmiJ3kiDn5waQup2qhptMUuF1ZjNirqcbAh7MoEtU02PCQAlBmV0D9Uvp/q9Iw3EFmWhfNT8w/Y03VHw2AK7DY94gJq0vmVUD96ahn4UvWXL5CjFyzXD8ikqdV0fx3zamP53xl6LhQUwBWwiaZVZ6qpfmuSfHRBoOKn5FGmIVpQtgs1i2OYsf8CFMdds6HkzCU9ZR5bcNIUz3U7KzxhaZNpj+tBPjCe5knbuvODRT9AIIZr5NL8zkfLG0R/DySEUJEP9MZFDzaYKqwZUQK9u9lyxXBdRZ/nJJVpYkbOdjraUZOn2wX1MOv768TylMxft2elpWtyo51E7XJca0zO3FT+T6dEDLNuLf70Tjf4ZKlXIs+rbMZRzJiNPU/gOOCncjGnQg7yVNt6CXFzLloYDKyI1+nXar0j8Y7aLeRw4ANqfONtf/a/feF1rxUgkr9kpwha7YR6ZbwLsgEqRGQ1yP0UUYTN4tW9P1fKN220ZErjmNLf5y9d4E1kw0JC9Aowy1OIPHC+GoIH2GXmLp6xrwtvDNX0N9GVVtWxGfdOuRunqus5wncxwKSsJHEV7gC7CttHVSQuYxf+qSVzxDZdZhrEFRDM+2ehQr+jYPjBFDfrFrZ6APcuc6eG8uNgDwFBIT/AvuHqnX/J/C5nmpguP7J8i+L6Tq/vaE06wHDJDHx4janBzQWz38QKtnFFVvSuYlPq4xpjc4XL0w==&lt;/keystoreFile&gt;
                    &lt;key-alg&gt;RSA&lt;/key-alg&gt;
                    &lt;keysize&gt;1024&lt;/keysize&gt;
                &lt;/odl-keystore&gt;
                &lt;cipher-suites&gt;
                    &lt;suiteName/&gt;
                &lt;/cipher-suites&gt;
                &lt;trust-keystore&gt;
                    &lt;keystoreFile&gt;szGsvGrFGnYbd9nd1t9nE0JpQtr6AxLteOf9yIktC+veMTpJpq+B4qQuq9ISdPV1uRcHSk71SvQM3Yb0MmEuAA==&lt;/keystoreFile&gt;
                    &lt;store-password&gt;szGsvGrFGnYbd9nd1t9nE/re1XnJbnW5IKOJusQBPKYGj7gRRA5Mm2KIwp4=&lt;/store-password&gt;
                    &lt;name&gt;truststore.jks&lt;/name&gt;
                &lt;/trust-keystore&gt;
            &lt;/ssl-data&gt;
        &lt;/key-stores&gt;
        &lt;people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:people"&gt;
            &lt;person&gt;
                &lt;id&gt;CUST002&lt;/id&gt;
                &lt;gender&gt;male&lt;/gender&gt;
                &lt;age&gt;28&lt;/age&gt;
            &lt;/person&gt;
        &lt;/people&gt;
        &lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;
            &lt;car-person&gt;
                &lt;car-id&gt;OLD001&lt;/car-id&gt;
                &lt;person-id&gt;CUST002&lt;/person-id&gt;
            &lt;/car-person&gt;
        &lt;/car-people&gt;
        &lt;cars xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car"&gt;
            &lt;car-entry&gt;
                &lt;id&gt;OLD001&lt;/id&gt;
                &lt;model&gt;Skoda MB&lt;/model&gt;
                &lt;manufacturer&gt;Skoda Mlada Boleslav&lt;/manufacturer&gt;
                &lt;category&gt;sedan&lt;/category&gt;
            &lt;/car-entry&gt;
        &lt;/cars&gt;
    &lt;/data&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<msg time="2026-08-23T02:07:44.836748" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="21"&gt;
    &lt;data&gt;
        &lt;aaa-encrypt-service-config xmlns="config:aaa...</msg>
<var>${reply}</var>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:44.784435" elapsed="0.052341"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:44.836823" elapsed="0.000044"/>
</return>
<msg time="2026-08-23T02:07:44.836992" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="21"&gt;
    &lt;data&gt;
        &lt;aaa-encrypt-service-config xmlns="config:aaa...</msg>
<var>${reply}</var>
<arg>${request}</arg>
<doc>Send message to Netconf connection and get the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:44.779547" elapsed="0.057474"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:44.837064" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:07:44.837207" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="21"&gt;
    &lt;data&gt;
        &lt;aaa-encrypt-service-config xmlns="config:aaa...</msg>
<var>${reply}</var>
<arg>get-config-candidate</arg>
<doc>Load a message from the data file set, send it to Netconf and return the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:44.778226" elapsed="0.059009"/>
</kw>
<kw name="Check_First_Batch_Data_Not_Present">
<kw name="Check_First_Batch_Data">
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;TOY001&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:44.838457" elapsed="0.000298"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;TOY001&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:44.837988" elapsed="0.000822"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CUST001&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:44.839392" elapsed="0.000307"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;CUST001&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:44.838970" elapsed="0.000783"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;car-id&gt;TOY001&lt;/car-id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:44.840339" elapsed="0.000280"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;car-id&gt;TOY001&lt;/car-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:44.839919" elapsed="0.000759"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUST001&lt;/person-id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:44.841249" elapsed="0.000279"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUST001&lt;/person-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:44.840819" elapsed="0.000762"/>
</kw>
<arg>${reply}</arg>
<arg>BuiltIn.Should_Not_Contain</arg>
<status status="PASS" start="2026-08-23T02:07:44.837653" elapsed="0.003985"/>
</kw>
<arg>${reply}</arg>
<status status="PASS" start="2026-08-23T02:07:44.837357" elapsed="0.004329"/>
</kw>
<kw name="Check_Second_Batch_Data_Present">
<kw name="Check_Second_Batch_Data">
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;OLD001&lt;/id&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:44.842862" elapsed="0.000284"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;OLD001&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:44.842428" elapsed="0.000773"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CUST002&lt;/id&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:44.843779" elapsed="0.000317"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;CUST002&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:44.843340" elapsed="0.000810"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;car-id&gt;OLD001&lt;/car-id&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:44.844708" elapsed="0.000299"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;car-id&gt;OLD001&lt;/car-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:44.844290" elapsed="0.000771"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUST002&lt;/person-id&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:44.845617" elapsed="0.000295"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUST002&lt;/person-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:44.845201" elapsed="0.000765"/>
</kw>
<arg>${reply}</arg>
<arg>BuiltIn.Should_Contain</arg>
<status status="PASS" start="2026-08-23T02:07:44.842115" elapsed="0.003907"/>
</kw>
<arg>${reply}</arg>
<status status="PASS" start="2026-08-23T02:07:44.841802" elapsed="0.004269"/>
</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-08-23T02:07:44.847229" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:44.846868" elapsed="0.000422"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.846848" elapsed="0.000466"/>
</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-08-23T02:07:44.847466" elapsed="0.000311"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:07:44.853803" 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-08-23T02:07:44.853393" elapsed="0.000452"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-08-23T02:07:44.854066" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:07:44.853922" elapsed="0.000200"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.853903" elapsed="0.000243"/>
</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-08-23T02:07:44.854281" 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-08-23T02:07:44.854436" 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-08-23T02:07:44.854594" 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-08-23T02:07:44.854746" 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-08-23T02:07:44.854915" 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-08-23T02:07:44.855119" 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-08-23T02:07:44.855270" 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-08-23T02:07:44.853097" elapsed="0.002268"/>
</kw>
<status status="PASS" start="2026-08-23T02:07:44.846645" elapsed="0.008774"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-08-23T02:07:44.846308" elapsed="0.009152"/>
</kw>
<doc>Check that the element to be discarded is present in the candidate configuration.</doc>
<status status="PASS" start="2026-08-23T02:07:44.694889" elapsed="0.160608"/>
</test>
<test id="s1-s3-s1-t21" name="Discard_Changes_Using_Discard_Request" line="154">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-08-23T02:07:44.858513" elapsed="0.000205"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:07:44.858268" elapsed="0.000503"/>
</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-08-23T02:07:44.859754" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:44.859646" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.859627" elapsed="0.000195"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:44.864252" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:44.864147" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.864130" elapsed="0.000191"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:44.865280" 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-08-23T02:07:44.864903" elapsed="0.000404"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:07:44.865745" 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-08-23T02:07:44.865453" elapsed="0.000318"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:07:44.865815" elapsed="0.000043"/>
</return>
<msg time="2026-08-23T02:07:44.865987" 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-08-23T02:07:44.864527" elapsed="0.001485"/>
</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-08-23T02:07:44.871228" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:44.871095" elapsed="0.000180"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.871075" elapsed="0.000222"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:44.872489" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:44.872382" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.872363" elapsed="0.000194"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:07:44.873116" level="INFO">${karaf_connection_index} = 18</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-08-23T02:07:44.872688" elapsed="0.000455"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:44.873533" level="INFO">${current_connection_index} = 23</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-08-23T02:07:44.873288" elapsed="0.000271"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:44.906711" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:44.874110" elapsed="0.032823"/>
</kw>
<msg time="2026-08-23T02:07:44.907111" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:07:44.907158" 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 "n "e "t "c "o "n "f "...</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-08-23T02:07:44.873705" elapsed="0.033489"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:07:44.931671" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "D "i "s "c "a "r "d "_ "C "h "a "n "g "e "s "_ "U "s "i "n "g "_ "D "i "s "c "a "r "d "_ "R "e "q "u "e "s "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-08-23T02:07:44.907728" elapsed="0.024142"/>
</kw>
<msg time="2026-08-23T02:07:44.932078" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:07:44.932124" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "D "i "s "c "a "r "d "_ "C "h "a "n ...</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-08-23T02:07:44.907352" elapsed="0.024809"/>
</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-08-23T02:07:44.932445" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:44.932237" elapsed="0.000284"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.932219" elapsed="0.000327"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:44.933070" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "D "i "s "c "a "r "d "_ "C "h "a "n "g "e "s "_ "U "s "i "n "g "_ "D "i "s "c "a "r "d "_ "R "e "q "u "e "s "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-08-23T02:07:44.932674" elapsed="0.000470"/>
</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-08-23T02:07:44.933410" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:44.933211" elapsed="0.000275"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.933193" elapsed="0.000318"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:07:44.933545" 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-08-23T02:07:44.936402" elapsed="0.000147"/>
</kw>
<msg time="2026-08-23T02:07:44.936619" 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-08-23T02:07:44.935748" elapsed="0.000967"/>
</kw>
<kw name="Open 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-08-23T02:07:44.937519" elapsed="0.000036"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:44.938339" elapsed="0.000036"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:07:44.934377" elapsed="0.004088"/>
</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-08-23T02:07:44.933787" elapsed="0.004798"/>
</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-08-23T02:07:44.872080" elapsed="0.066609"/>
</kw>
<msg time="2026-08-23T02:07:44.938781" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:44.938824" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "D "i "s "c "a "r "d "_ "C "h "a "n ...</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-08-23T02:07:44.871436" elapsed="0.067600"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:07:44.939221" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-08-23T02:07:44.939114" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.939095" elapsed="0.000208"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:44.939676" 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-08-23T02:07:44.940017" elapsed="0.000026"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:07:44.940090" 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-08-23T02:07:44.870739" elapsed="0.069459"/>
</kw>
<msg time="2026-08-23T02:07:44.940291" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:44.940334" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "D "i "s "c "a "r "d "_ "C "h "a "n ...</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-08-23T02:07:44.866357" elapsed="0.074014"/>
</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-08-23T02:07:44.940678" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:44.940443" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.940426" elapsed="0.000329"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:07:44.866229" elapsed="0.074549"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:07:44.866063" elapsed="0.074744"/>
</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-08-23T02:07:44.863768" elapsed="0.077153"/>
</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-08-23T02:07:44.859347" elapsed="0.081669"/>
</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-08-23T02:07:44.858923" elapsed="0.082137"/>
</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-08-23T02:07:44.856306" elapsed="0.084806"/>
</kw>
<kw name="Perform_Test">
<kw name="Load_And_Send_Message">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:44.942589" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/commit-discard-request.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/commit-discard-request.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:44.942726" level="INFO">${data} = &lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="22"&gt;
    &lt;discard-changes/&gt;
&lt;/rpc&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:44.942158" elapsed="0.000595"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:44.942800" elapsed="0.000053"/>
</return>
<msg time="2026-08-23T02:07:44.942977" level="INFO">${request} = &lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="22"&gt;
    &lt;discard-changes/&gt;
&lt;/rpc&gt;
</msg>
<var>${request}</var>
<arg>${name}-request</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:44.941852" elapsed="0.001152"/>
</kw>
<kw name="Send_Message">
<kw name="Transmit_Message">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:44.945830" level="INFO">&lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="22"&gt;</msg>
<arg>${message}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:44.943729" elapsed="0.002171"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:44.946466" level="INFO">&lt;discard-changes/&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:44.946042" elapsed="0.000476"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:44.947131" level="INFO">&lt;/rpc&gt;

]]&gt;]]&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:44.946655" elapsed="0.000530"/>
</kw>
<arg>${message}</arg>
<doc>Transmit message to Netconf connection and discard the echo of the message.</doc>
<status status="PASS" start="2026-08-23T02:07:44.943434" elapsed="0.003807"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:44.954076" level="INFO">&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="22"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<msg time="2026-08-23T02:07:44.954168" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="22"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:44.947379" elapsed="0.006818"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:44.954267" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T02:07:44.954430" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="22"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${request}</arg>
<doc>Send message to Netconf connection and get the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:44.943146" elapsed="0.011316"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:44.954509" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:07:44.954654" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="22"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${actual}</var>
<arg>${name}</arg>
<doc>Load a message from the data file set, send it to Netconf and return the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:44.941548" elapsed="0.013134"/>
</kw>
<kw name="Load_Expected_Reply">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:44.955645" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/commit-discard-reply.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/commit-discard-reply.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:44.955805" level="INFO">${data} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="22"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:44.955436" elapsed="0.000412"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:44.955897" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:44.956047" level="INFO">${expected_reply} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="22"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected_reply}</var>
<arg>${name}-reply</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:44.955132" elapsed="0.000942"/>
</kw>
<return>
<value>${expected_reply}</value>
<status status="PASS" start="2026-08-23T02:07:44.956118" elapsed="0.000025"/>
</return>
<msg time="2026-08-23T02:07:44.956261" level="INFO">${expected} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="22"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected}</var>
<arg>${name}</arg>
<doc>Load the expected reply from the data file set and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:44.954818" elapsed="0.001469"/>
</kw>
<kw name="Remove String" owner="String">
<msg time="2026-08-23T02:07:44.956621" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="22"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>]]&gt;]]&gt;</arg>
<doc>Removes all ``removables`` from the given ``string``.</doc>
<status status="PASS" start="2026-08-23T02:07:44.956427" elapsed="0.000224"/>
</kw>
<kw name="Strip String" owner="String">
<msg time="2026-08-23T02:07:44.957025" level="INFO">${actual} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="22"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>mode=both</arg>
<doc>Remove leading and/or trailing whitespaces from the given string.</doc>
<status status="PASS" start="2026-08-23T02:07:44.956791" elapsed="0.000297"/>
</kw>
<kw name="Elements Should Be Equal" owner="XML">
<arg>${actual}</arg>
<arg>${expected}</arg>
<arg>normalize_whitespace=True</arg>
<doc>Verifies that the given ``source`` element is equal to ``expected``.</doc>
<status status="PASS" start="2026-08-23T02:07:44.957233" elapsed="0.000402"/>
</kw>
<return>
<value>${actual}</value>
<status status="PASS" start="2026-08-23T02:07:44.957689" elapsed="0.000028"/>
</return>
<arg>commit-discard</arg>
<doc>Load and send the request from the dataset and compare the returned reply to the one stored in the dataset.</doc>
<status status="PASS" start="2026-08-23T02:07:44.941270" elapsed="0.016548"/>
</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-08-23T02:07:44.959022" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:44.958640" elapsed="0.000445"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.958623" elapsed="0.000488"/>
</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-08-23T02:07:44.959247" elapsed="0.000310"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:07:44.964345" 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-08-23T02:07:44.963946" elapsed="0.000427"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-08-23T02:07:44.964588" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:07:44.964447" elapsed="0.000197"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.964429" 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-08-23T02:07:44.964804" 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-08-23T02:07:44.964978" 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-08-23T02:07:44.965135" 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-08-23T02:07:44.965286" 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-08-23T02:07:44.965437" 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-08-23T02:07:44.965587" 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-08-23T02:07:44.965737" 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-08-23T02:07:44.963634" elapsed="0.002178"/>
</kw>
<status status="PASS" start="2026-08-23T02:07:44.958430" elapsed="0.007447"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-08-23T02:07:44.958079" elapsed="0.007840"/>
</kw>
<doc>Ask the server to discard the candidate and check the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:44.855765" elapsed="0.110194"/>
</test>
<test id="s1-s3-s1-t22" name="Get_And_Check_Config_Candidate_To_Confirm_Discard" line="158">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-08-23T02:07:44.969311" elapsed="0.000207"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:07:44.969065" elapsed="0.000507"/>
</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-08-23T02:07:44.970557" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:44.970446" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.970426" elapsed="0.000200"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:44.975056" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:44.974949" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.974931" elapsed="0.000193"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:44.976082" 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-08-23T02:07:44.975689" elapsed="0.000419"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:07:44.976550" 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-08-23T02:07:44.976255" elapsed="0.000321"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:07:44.976656" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T02:07:44.976817" 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-08-23T02:07:44.975330" elapsed="0.001528"/>
</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-08-23T02:07:44.982060" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:44.981949" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.981929" elapsed="0.000201"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:44.983315" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:44.983208" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:44.983190" elapsed="0.000193"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:07:44.983885" level="INFO">${karaf_connection_index} = 18</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-08-23T02:07:44.983514" elapsed="0.000400"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:44.984303" level="INFO">${current_connection_index} = 23</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-08-23T02:07:44.984059" elapsed="0.000270"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:45.029121" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:44.984869" elapsed="0.044417"/>
</kw>
<msg time="2026-08-23T02:07:45.029482" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:07:45.029528" 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 "n "e "t "c "o "n "f "...</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-08-23T02:07:44.984475" elapsed="0.045090"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:07:45.064801" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "G "e "t "_ "A "n "d "_ "C "h "e "c "k "_ "C "o "n "f "i "g "_ "C "a "n "d "i "d "a "t "e "_ "T "o "_ "C "o "n "f "i "r "m "_ "D "i "s "c "a "r "d "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-08-23T02:07:45.030132" elapsed="0.034892"/>
</kw>
<msg time="2026-08-23T02:07:45.065202" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:07:45.065248" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "G "e "t "_ "A "n "d "_ "C "h "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-08-23T02:07:45.029722" elapsed="0.035562"/>
</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-08-23T02:07:45.065566" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:45.065360" elapsed="0.000281"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.065341" elapsed="0.000325"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:45.066182" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "G "e "t "_ "A "n "d "_ "C "h "e "c "k "_ "C "o "n "f "i "g "_ "C "a "n "d "i "d "a "t "e "_ "T "o "_ "C "o "n "f "i "r "m "_ "D "i "s "c "a "r "d "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:07:45.065794" elapsed="0.000467"/>
</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-08-23T02:07:45.066529" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:45.066326" elapsed="0.000278"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.066308" elapsed="0.000321"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:07:45.066663" 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-08-23T02:07:45.069490" elapsed="0.000148"/>
</kw>
<msg time="2026-08-23T02:07:45.069709" 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-08-23T02:07:45.068826" elapsed="0.000980"/>
</kw>
<kw name="Open 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-08-23T02:07:45.070618" elapsed="0.000037"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:45.071448" elapsed="0.000036"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:07:45.067493" elapsed="0.004069"/>
</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-08-23T02:07:45.066929" elapsed="0.004748"/>
</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-08-23T02:07:44.982907" elapsed="0.088908"/>
</kw>
<msg time="2026-08-23T02:07:45.072072" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:45.072117" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "G "e "t "_ "A "n "d "_ "C "h "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-08-23T02:07:44.982271" elapsed="0.089883"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:07:45.072337" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-08-23T02:07:45.072230" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.072212" elapsed="0.000208"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:45.072794" 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-08-23T02:07:45.073159" elapsed="0.000026"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:07:45.073232" 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-08-23T02:07:44.981572" elapsed="0.091768"/>
</kw>
<msg time="2026-08-23T02:07:45.073432" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:45.073475" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "G "e "t "_ "A "n "d "_ "C "h "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-08-23T02:07:44.977209" elapsed="0.096303"/>
</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-08-23T02:07:45.073822" elapsed="0.000089"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:45.073586" elapsed="0.000360"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.073568" elapsed="0.000403"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:07:44.977081" elapsed="0.096913"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:07:44.976912" elapsed="0.097112"/>
</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-08-23T02:07:44.974574" elapsed="0.099502"/>
</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-08-23T02:07:44.970149" elapsed="0.103981"/>
</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-08-23T02:07:44.969709" elapsed="0.104464"/>
</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-08-23T02:07:44.967051" elapsed="0.107173"/>
</kw>
<kw name="Check_Test_Objects_Not_Present_In_Config">
<kw name="Load_And_Send_Message">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:45.075661" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/get-config-candidate-discard-request.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/get-config-candidate-discard-request.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:45.075793" level="INFO">${data} = &lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="empty"&gt;
    &lt;get-config&gt;
        &lt;source&gt;
            &lt;candidate/&gt;
        &lt;/source&gt;
    &lt;/get-config&gt;
&lt;/rpc&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:45.075255" elapsed="0.000566"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:45.075885" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:07:45.076035" level="INFO">${request} = &lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="empty"&gt;
    &lt;get-config&gt;
        &lt;source&gt;
            &lt;candidate/&gt;
        &lt;/source&gt;
    &lt;/get-config&gt;
&lt;/rpc&gt;
</msg>
<var>${request}</var>
<arg>${name}-request</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:45.074953" elapsed="0.001109"/>
</kw>
<kw name="Send_Message">
<kw name="Transmit_Message">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:45.078855" level="INFO">&lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="empty"&gt;</msg>
<arg>${message}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:45.076787" elapsed="0.002126"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:45.079421" level="INFO">&lt;get-config&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:45.079055" elapsed="0.000417"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:45.080755" level="INFO">&lt;source&gt;
            &lt;candidate/&gt;
        &lt;/source&gt;
    &lt;/get-config&gt;
&lt;/rpc&gt;

]]&gt;]]&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:45.079608" elapsed="0.001203"/>
</kw>
<arg>${message}</arg>
<doc>Transmit message to Netconf connection and discard the echo of the message.</doc>
<status status="PASS" start="2026-08-23T02:07:45.076492" elapsed="0.004392"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:45.123579" level="INFO">&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="empty"&gt;
    &lt;data&gt;
        &lt;aaa-encrypt-service-config xmlns="config:aaa:authn:encrypt:service:config"&gt;
            &lt;encrypt-type&gt;AES&lt;/encrypt-type&gt;
            &lt;encrypt-key-length&gt;128&lt;/encrypt-key-length&gt;
            &lt;password-length&gt;12&lt;/password-length&gt;
            &lt;cipher-transforms&gt;AES/GCM/NoPadding&lt;/cipher-transforms&gt;
            &lt;encrypt-key&gt;svW8eCV45iNA&lt;/encrypt-key&gt;
            &lt;encrypt-salt&gt;szGsvGrFGnYbd9nd1t9nEw==&lt;/encrypt-salt&gt;
            &lt;auth-tag-length&gt;128&lt;/auth-tag-length&gt;
            &lt;encrypt-method&gt;PBKDF2WithHmacSHA1&lt;/encrypt-method&gt;
            &lt;encrypt-iteration-count&gt;32768&lt;/encrypt-iteration-count&gt;
        &lt;/aaa-encrypt-service-config&gt;
        &lt;key-stores xmlns="urn:opendaylight:yang:aaa:cert:mdsal"&gt;
            &lt;id&gt;KeyStores:1&lt;/id&gt;
            &lt;ssl-data&gt;
                &lt;bundle-name&gt;opendaylight&lt;/bundle-name&gt;
                &lt;tls-protocols/&gt;
                &lt;odl-keystore&gt;
                    &lt;store-password&gt;szGsvGrFGnYbd9nd1t9nE/fx+V2RdCDYC56eieY+0NUj2isn/xZEgHOUDk8=&lt;/store-password&gt;
                    &lt;sign-alg&gt;SHA1WithRSAEncryption&lt;/sign-alg&gt;
                    &lt;validity&gt;365&lt;/validity&gt;
                    &lt;alias&gt;controller&lt;/alias&gt;
                    &lt;name&gt;ctl.jks&lt;/name&gt;
                    &lt;dname&gt;CN=ODL, OU=Dev, O=LinuxFoundation, L=QC Montreal, C=CA&lt;/dname&gt;
                    &lt;keystoreFile&gt;szGsvGrFGnYbd9nd1t9nE0JpQtr6AxLteOf9yUIRItqLm3NkTNx/el6TA99g1gQs8oNL0ip4IPpl4rt7rFRRPPBAYfnI5Hkh+b8tHGDNwygXVh0qPTd02Ju1oPl0gQiXDeG3LxTe8oV0ONxVMiVDPRLInTiudW5V+NAL0c/qNo47UDfypSDuyY7eUL/QqoheS+TBVtkEivw2fS5E+lNKVmSRnedcKds+JRGqsn0ie6kCPmdOS26Zo5s8D6M2tT+r5in4jHovTq6a3RAmy5ZEJJbHJx/m+Y3778MRBkcD2nV3THNE3WXHfY8z+tUfGap/IGFvqumYYtRL35QgVchzJa3JZ2mMxPc2WLe5i2J1nYXYU6QDbT3UoksnTVzBRz0eznEzQQs47v/7gSOqx+Xug8kld3PASYNi5fZD0YmZGe+lI8ON47+4URudcRM9QmzWRu2LhIpGk8Fk0ueaJh5QF0VbVHat5S7fi1fkSNf2wHTs2pFv75hWSsg+7KDTAgfExMImhBPJ+pc8raT7kLEYiBPXy8NMvlDSksgfvSIcyyharJNj8wtxEFkBVWeX0SFzwlZy9oICi+li5ZM8WhSAbtBGTbpBJ9ADwg8WZo7uznJx+rhIUrjoziNRYqUVp/euIq6rjbE/k6jZCtKTP/qoqy0lShP6M9GfuB6O1akHdOHMWOqX2Q6G8qdVPuyAshiJrIthlJEiY5LX8xhXOQDAuGvwB5hFN/aXa0bMksLEHsTKpXSRnhLCJQxzrKpSSIuQqMzsDUQJQMzch1NGpbSFDwOySU5aeyvsTo4AYPT6Xf6YhGsYDk39B6R/CFsBVO13/4SfkiINKvhpYwQ/vfftmmF/7SXYXp/YR7nffSZTr1ooWJHAaGzqAQw+it9HIaJd7IqTROyhS23F00eX3h/OVwbsBB6PmGXh0LvOoCEfctsl0hTpnouPExetsGBZ7dfPpQIK5UiizhBZjKfr1N3dRVawGP2tFckp3xB0Fr3W8nqRCcWxi5oDGtKcK+z5LinRpCeurFbtZwatTqgh1o/KRXdpQ9E+QmJuyIUnIjoxwuFejwHujtyJR+uAvC90T+G09PnaaMGALkmiJ3kiDn5waQup2qhptMUuF1ZjNirqcbAh7MoEtU02PCQAlBmV0D9Uvp/q9Iw3EFmWhfNT8w/Y03VHw2AK7DY94gJq0vmVUD96ahn4UvWXL5CjFyzXD8ikqdV0fx3zamP53xl6LhQUwBWwiaZVZ6qpfmuSfHRBoOKn5FGmIVpQtgs1i2OYsf8CFMdds6HkzCU9ZR5bcNIUz3U7KzxhaZNpj+tBPjCe5knbuvODRT9AIIZr5NL8zkfLG0R/DySEUJEP9MZFDzaYKqwZUQK9u9lyxXBdRZ/nJJVpYkbOdjraUZOn2wX1MOv768TylMxft2elpWtyo51E7XJca0zO3FT+T6dEDLNuLf70Tjf4ZKlXIs+rbMZRzJiNPU/gOOCncjGnQg7yVNt6CXFzLloYDKyI1+nXar0j8Y7aLeRw4ANqfONtf/a/feF1rxUgkr9kpwha7YR6ZbwLsgEqRGQ1yP0UUYTN4tW9P1fKN220ZErjmNLf5y9d4E1kw0JC9Aowy1OIPHC+GoIH2GXmLp6xrwtvDNX0N9GVVtWxGfdOuRunqus5wncxwKSsJHEV7gC7CttHVSQuYxf+qSVzxDZdZhrEFRDM+2ehQr+jYPjBFDfrFrZ6APcuc6eG8uNgDwFBIT/AvuHqnX/J/C5nmpguP7J8i+L6Tq/vaE06wHDJDHx4janBzQWz38QKtnFFVvSuYlPq4xpjc4XL0w==&lt;/keystoreFile&gt;
                    &lt;key-alg&gt;RSA&lt;/key-alg&gt;
                    &lt;keysize&gt;1024&lt;/keysize&gt;
                &lt;/odl-keystore&gt;
                &lt;cipher-suites&gt;
                    &lt;suiteName/&gt;
                &lt;/cipher-suites&gt;
                &lt;trust-keystore&gt;
                    &lt;keystoreFile&gt;szGsvGrFGnYbd9nd1t9nE0JpQtr6AxLteOf9yIktC+veMTpJpq+B4qQuq9ISdPV1uRcHSk71SvQM3Yb0MmEuAA==&lt;/keystoreFile&gt;
                    &lt;store-password&gt;szGsvGrFGnYbd9nd1t9nE/re1XnJbnW5IKOJusQBPKYGj7gRRA5Mm2KIwp4=&lt;/store-password&gt;
                    &lt;name&gt;truststore.jks&lt;/name&gt;
                &lt;/trust-keystore&gt;
            &lt;/ssl-data&gt;
        &lt;/key-stores&gt;
    &lt;/data&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<msg time="2026-08-23T02:07:45.123752" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="empty"&gt;
    &lt;data&gt;
        &lt;aaa-encrypt-service-config xmlns="config:...</msg>
<var>${reply}</var>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:45.081029" elapsed="0.042751"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:45.123827" elapsed="0.000043"/>
</return>
<msg time="2026-08-23T02:07:45.123995" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="empty"&gt;
    &lt;data&gt;
        &lt;aaa-encrypt-service-config xmlns="config:...</msg>
<var>${reply}</var>
<arg>${request}</arg>
<doc>Send message to Netconf connection and get the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:45.076202" elapsed="0.047822"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:45.124067" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:07:45.124210" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="empty"&gt;
    &lt;data&gt;
        &lt;aaa-encrypt-service-config xmlns="config:...</msg>
<var>${reply}</var>
<arg>${name}</arg>
<doc>Load a message from the data file set, send it to Netconf and return the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:45.074650" elapsed="0.049607"/>
</kw>
<kw name="Check_Test_Objects_Absent">
<kw name="Check_First_Batch_Data_Not_Present">
<kw name="Check_First_Batch_Data">
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;TOY001&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:45.125743" elapsed="0.000312"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;TOY001&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:45.125314" elapsed="0.000797"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CUST001&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:45.126676" elapsed="0.000301"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;CUST001&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:45.126254" elapsed="0.000779"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;car-id&gt;TOY001&lt;/car-id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:45.127596" elapsed="0.000297"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;car-id&gt;TOY001&lt;/car-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:45.127177" elapsed="0.000771"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUST001&lt;/person-id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:45.128535" elapsed="0.000282"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUST001&lt;/person-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:45.128093" elapsed="0.000798"/>
</kw>
<arg>${reply}</arg>
<arg>BuiltIn.Should_Not_Contain</arg>
<status status="PASS" start="2026-08-23T02:07:45.124996" elapsed="0.003987"/>
</kw>
<arg>${reply}</arg>
<status status="PASS" start="2026-08-23T02:07:45.124683" elapsed="0.004349"/>
</kw>
<kw name="Check_Second_Batch_Data">
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;OLD001&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:45.129918" elapsed="0.000288"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;OLD001&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:45.129483" elapsed="0.000779"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CUST002&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:45.130820" elapsed="0.000299"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;CUST002&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:45.130405" elapsed="0.000768"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;car-id&gt;OLD001&lt;/car-id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:45.131729" elapsed="0.000298"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;car-id&gt;OLD001&lt;/car-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:45.131316" elapsed="0.000765"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUST002&lt;/person-id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:45.132661" elapsed="0.000299"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUST002&lt;/person-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:45.132245" elapsed="0.000770"/>
</kw>
<arg>${reply}</arg>
<arg>BuiltIn.Should_not_Contain</arg>
<status status="PASS" start="2026-08-23T02:07:45.129161" elapsed="0.003910"/>
</kw>
<kw name="Check_Multiple_Batch_Data_Absent">
<kw name="Check_Multiple_Batch_Data">
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CAROLD&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:45.134285" elapsed="0.000453"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;CAROLD&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:45.133866" elapsed="0.000927"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CUSTOLD&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:45.135376" elapsed="0.000282"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;CUSTOLD&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:45.134954" elapsed="0.000759"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;car-id&gt;CAROLD&lt;/car-id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:45.136303" elapsed="0.000282"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;car-id&gt;CAROLD&lt;/car-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:45.135870" elapsed="0.000770"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUSTOLD&lt;/person-id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:45.137224" elapsed="0.000284"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUSTOLD&lt;/person-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:45.136780" elapsed="0.000783"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CARYOUNG&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:45.138149" elapsed="0.000282"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;CARYOUNG&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:45.137706" elapsed="0.000779"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CUSTYOUNG&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:45.139062" elapsed="0.000284"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;CUSTYOUNG&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:45.138627" elapsed="0.000773"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;car-id&gt;CARYOUNG&lt;/car-id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:45.139977" elapsed="0.000311"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;car-id&gt;CARYOUNG&lt;/car-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:45.139541" elapsed="0.000802"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUSTYOUNG&lt;/person-id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:45.140922" elapsed="0.000283"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUSTYOUNG&lt;/person-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:45.140485" elapsed="0.000774"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CARMID&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:45.141819" elapsed="0.000300"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;CARMID&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:45.141401" elapsed="0.000774"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CUSTMID&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:45.142733" elapsed="0.000297"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;CUSTMID&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:45.142317" elapsed="0.000767"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;car-id&gt;CARMID&lt;/car-id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:45.143686" elapsed="0.000298"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;car-id&gt;CARMID&lt;/car-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:45.143267" elapsed="0.000794"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUSTMID&lt;/person-id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:45.144632" elapsed="0.000296"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUSTMID&lt;/person-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:45.144209" elapsed="0.000773"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CAROLD2&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:45.145540" elapsed="0.000280"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;CAROLD2&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:45.145126" elapsed="0.000765"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CUSTOLD2&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:45.146447" elapsed="0.000282"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;CUSTOLD2&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:45.146034" elapsed="0.000748"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;car-id&gt;CAROLD2&lt;/car-id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:45.147355" elapsed="0.000281"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;car-id&gt;CAROLD2&lt;/car-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:45.146939" elapsed="0.000752"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUSTOLD2&lt;/person-id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:45.148282" elapsed="0.000281"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUSTOLD2&lt;/person-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:45.147848" elapsed="0.000769"/>
</kw>
<arg>${reply}</arg>
<arg>BuiltIn.Should_not_Contain</arg>
<status status="PASS" start="2026-08-23T02:07:45.133537" elapsed="0.015137"/>
</kw>
<arg>${reply}</arg>
<status status="PASS" start="2026-08-23T02:07:45.133186" elapsed="0.015536"/>
</kw>
<kw name="Check_Auxiliary_Data">
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CUSTBAD&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:45.149596" elapsed="0.000301"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;CUSTBAD&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:45.149177" elapsed="0.000775"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;test&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:45.150507" elapsed="0.000281"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;test&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:45.150091" elapsed="0.000766"/>
</kw>
<arg>${reply}</arg>
<arg>BuiltIn.Should_not_Contain</arg>
<status status="PASS" start="2026-08-23T02:07:45.148855" elapsed="0.002061"/>
</kw>
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;test&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:45.151050" elapsed="0.000283"/>
</kw>
<arg>${reply}</arg>
<status status="PASS" start="2026-08-23T02:07:45.124405" elapsed="0.026988"/>
</kw>
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;REPLACE&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:45.151524" elapsed="0.000281"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:45.151871" elapsed="0.000030"/>
</return>
<arg>get-config-candidate-discard</arg>
<doc>Use dataset with the specified name to get the configuration and check that none of our test objects are there.</doc>
<status status="PASS" start="2026-08-23T02:07:45.074371" elapsed="0.077640"/>
</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-08-23T02:07:45.153179" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:45.152795" elapsed="0.000446"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.152777" elapsed="0.000488"/>
</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-08-23T02:07:45.153397" elapsed="0.000304"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:07:45.158604" 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-08-23T02:07:45.158203" elapsed="0.000429"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-08-23T02:07:45.158862" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-23T02:07:45.158705" elapsed="0.000216"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.158687" elapsed="0.000259"/>
</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-08-23T02:07:45.159083" 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-08-23T02:07:45.159240" elapsed="0.000057"/>
</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-08-23T02:07:45.159442" 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-08-23T02:07:45.159597" 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-08-23T02:07:45.159755" 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-08-23T02:07:45.159932" 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-08-23T02:07:45.160100" 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-08-23T02:07:45.157909" elapsed="0.002269"/>
</kw>
<status status="PASS" start="2026-08-23T02:07:45.152590" elapsed="0.007639"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-08-23T02:07:45.152253" elapsed="0.008017"/>
</kw>
<doc>Check that the element was really discarded.</doc>
<status status="PASS" start="2026-08-23T02:07:44.966540" elapsed="0.193767"/>
</test>
<test id="s1-s3-s1-t23" name="Edit_Config_Multiple_Batch_Merge_Create" line="162">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-08-23T02:07:45.163316" elapsed="0.000208"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:07:45.163071" elapsed="0.000507"/>
</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-08-23T02:07:45.164552" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:45.164444" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.164425" elapsed="0.000196"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:45.169100" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:45.168993" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.168974" elapsed="0.000195"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:45.170129" 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-08-23T02:07:45.169732" elapsed="0.000424"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:07:45.170593" 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-08-23T02:07:45.170302" elapsed="0.000317"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:07:45.170662" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:45.170814" 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-08-23T02:07:45.169375" elapsed="0.001485"/>
</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-08-23T02:07:45.176071" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:45.175962" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.175942" 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-08-23T02:07:45.177324" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:45.177217" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.177198" elapsed="0.000193"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:07:45.177896" level="INFO">${karaf_connection_index} = 18</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-08-23T02:07:45.177521" elapsed="0.000402"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:45.178311" level="INFO">${current_connection_index} = 23</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-08-23T02:07:45.178069" elapsed="0.000268"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:45.217297" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:45.178880" elapsed="0.038578"/>
</kw>
<msg time="2026-08-23T02:07:45.217642" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:07:45.217688" 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 "n "e "t "c "o "n "f "...</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-08-23T02:07:45.178484" elapsed="0.039281"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:07:45.243738" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "E "d "i "t "_ "C "o "n "f "i "g "_ "M "u "l "t "i "p "l "e "_ "B "a "t "c "h "_ "M "e "r "g "e "_ "C "r "e "a "t "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-08-23T02:07:45.218335" elapsed="0.025606"/>
</kw>
<msg time="2026-08-23T02:07:45.244110" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:07:45.244155" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "E "d "i "t "_ "C "o "n "f "i "g "_ ...</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-08-23T02:07:45.217948" elapsed="0.026244"/>
</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-08-23T02:07:45.244478" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:45.244269" elapsed="0.000285"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.244249" elapsed="0.000330"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:45.245109" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "E "d "i "t "_ "C "o "n "f "i "g "_ "M "u "l "t "i "p "l "e "_ "B "a "t "c "h "_ "M "e "r "g "e "_ "C "r "e "a "t "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-08-23T02:07:45.244712" elapsed="0.000473"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:45.245454" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:45.245251" elapsed="0.000278"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.245233" elapsed="0.000321"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:07:45.245588" 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-08-23T02:07:45.248407" elapsed="0.000147"/>
</kw>
<msg time="2026-08-23T02:07:45.248624" 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-08-23T02:07:45.247756" elapsed="0.000965"/>
</kw>
<kw name="Open 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-08-23T02:07:45.249524" elapsed="0.000037"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:45.250350" elapsed="0.000036"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:07:45.246415" elapsed="0.004048"/>
</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-08-23T02:07:45.245830" elapsed="0.004747"/>
</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-08-23T02:07:45.176917" elapsed="0.073757"/>
</kw>
<msg time="2026-08-23T02:07:45.250766" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:45.251010" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "E "d "i "t "_ "C "o "n "f "i "g "_ ...</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-08-23T02:07:45.176281" elapsed="0.074770"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:07:45.251236" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:07:45.251129" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.251110" elapsed="0.000208"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:45.251688" 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-08-23T02:07:45.252024" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:07:45.252097" 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-08-23T02:07:45.175574" elapsed="0.076631"/>
</kw>
<msg time="2026-08-23T02:07:45.252297" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:45.252340" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "E "d "i "t "_ "C "o "n "f "i "g "_ ...</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-08-23T02:07:45.171208" elapsed="0.081169"/>
</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-08-23T02:07:45.252724" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:45.252452" elapsed="0.000327"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.252434" elapsed="0.000369"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:07:45.171080" elapsed="0.081746"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:07:45.170914" elapsed="0.082005"/>
</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-08-23T02:07:45.168562" elapsed="0.084411"/>
</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-08-23T02:07:45.164155" elapsed="0.088872"/>
</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-08-23T02:07:45.163713" elapsed="0.089357"/>
</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-08-23T02:07:45.161126" elapsed="0.091994"/>
</kw>
<kw name="Perform_Test">
<kw name="Load_And_Send_Message">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:45.254568" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-multiple-create-request.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-multiple-create-request.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:45.254708" level="INFO">${data} = &lt;rpc message-id="115" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
&lt;edit-config&gt;
&lt;target&gt;
&lt;candidate/&gt;
&lt;/target&gt;
&lt;default-operation&gt;create&lt;/default-operation&gt;
&lt;config&gt;
&lt;people xmlns="urn:opendayli...</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:45.254170" elapsed="0.000579"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:45.254797" elapsed="0.000052"/>
</return>
<msg time="2026-08-23T02:07:45.254982" level="INFO">${request} = &lt;rpc message-id="115" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
&lt;edit-config&gt;
&lt;target&gt;
&lt;candidate/&gt;
&lt;/target&gt;
&lt;default-operation&gt;create&lt;/default-operation&gt;
&lt;config&gt;
&lt;people xmlns="urn:opendayli...</msg>
<var>${request}</var>
<arg>${name}-request</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:45.253865" elapsed="0.001150"/>
</kw>
<kw name="Send_Message">
<kw name="Transmit_Message">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:45.257635" level="INFO">&lt;rpc message-id="115" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;</msg>
<arg>${message}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:45.255742" elapsed="0.001950"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:45.258196" level="INFO">&lt;edit-config&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:45.257850" elapsed="0.000397"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:45.264994" level="INFO">&lt;target&gt;
&lt;candidate/&gt;
&lt;/target&gt;
&lt;default-operation&gt;create&lt;/default-operation&gt;
&lt;config&gt;
&lt;people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:people"&gt;
  &lt;person&gt;
    &lt;id&gt;CUSTOLD&lt;/id&gt;
    &lt;age&gt;99&lt;/age&gt;
  &lt;/person&gt;
&lt;/people&gt;
&lt;cars xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car"&gt;
  &lt;car-entry&gt;
    &lt;id&gt;CAROLD&lt;/id&gt;
    &lt;manufacturer&gt;Ford&lt;/manufacturer&gt;
    &lt;year&gt;1950&lt;/year&gt;
  &lt;/car-entry&gt;
&lt;/cars&gt;
&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;
  &lt;car-person&gt;
    &lt;car-id&gt;CAROLD&lt;/car-id&gt;
    &lt;person-id&gt;CUSTOLD&lt;/person-id&gt;
  &lt;/car-person&gt;
&lt;/car-people&gt;
&lt;/config&gt;
&lt;/edit-config&gt;
&lt;/rpc&gt;

]]&gt;]]&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:45.258385" elapsed="0.006679"/>
</kw>
<arg>${message}</arg>
<doc>Transmit message to Netconf connection and discard the echo of the message.</doc>
<status status="PASS" start="2026-08-23T02:07:45.255446" elapsed="0.009674"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:45.266986" level="INFO">&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="115"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<msg time="2026-08-23T02:07:45.267076" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="115"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:45.265260" elapsed="0.001844"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:45.267150" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:45.267297" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="115"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${request}</arg>
<doc>Send message to Netconf connection and get the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:45.255157" elapsed="0.012168"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:45.267369" elapsed="0.000025"/>
</return>
<msg time="2026-08-23T02:07:45.267510" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="115"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${actual}</var>
<arg>${name}</arg>
<doc>Load a message from the data file set, send it to Netconf and return the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:45.253556" elapsed="0.013982"/>
</kw>
<kw name="Load_Expected_Reply">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:45.268496" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-multiple-create-reply.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-multiple-create-reply.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:45.268623" level="INFO">${data} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="115"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:45.268289" elapsed="0.000405"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:45.268744" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:45.268913" level="INFO">${expected_reply} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="115"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected_reply}</var>
<arg>${name}-reply</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:45.267984" elapsed="0.000957"/>
</kw>
<return>
<value>${expected_reply}</value>
<status status="PASS" start="2026-08-23T02:07:45.268985" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:07:45.269130" level="INFO">${expected} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="115"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected}</var>
<arg>${name}</arg>
<doc>Load the expected reply from the data file set and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:45.267673" elapsed="0.001484"/>
</kw>
<kw name="Remove String" owner="String">
<msg time="2026-08-23T02:07:45.269498" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="115"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>]]&gt;]]&gt;</arg>
<doc>Removes all ``removables`` from the given ``string``.</doc>
<status status="PASS" start="2026-08-23T02:07:45.269300" elapsed="0.000227"/>
</kw>
<kw name="Strip String" owner="String">
<msg time="2026-08-23T02:07:45.269905" level="INFO">${actual} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="115"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>mode=both</arg>
<doc>Remove leading and/or trailing whitespaces from the given string.</doc>
<status status="PASS" start="2026-08-23T02:07:45.269671" elapsed="0.000265"/>
</kw>
<kw name="Elements Should Be Equal" owner="XML">
<arg>${actual}</arg>
<arg>${expected}</arg>
<arg>normalize_whitespace=True</arg>
<doc>Verifies that the given ``source`` element is equal to ``expected``.</doc>
<status status="PASS" start="2026-08-23T02:07:45.270081" elapsed="0.000395"/>
</kw>
<return>
<value>${actual}</value>
<status status="PASS" start="2026-08-23T02:07:45.270529" elapsed="0.000040"/>
</return>
<arg>merge-multiple-create</arg>
<doc>Load and send the request from the dataset and compare the returned reply to the one stored in the dataset.</doc>
<status status="PASS" start="2026-08-23T02:07:45.253279" elapsed="0.017387"/>
</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-08-23T02:07:45.271870" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:45.271485" elapsed="0.000449"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.271464" 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-08-23T02:07:45.272096" elapsed="0.000308"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:07:45.277236" 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-08-23T02:07:45.276819" elapsed="0.000445"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-08-23T02:07:45.277479" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:07:45.277338" elapsed="0.000198"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.277319" 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-08-23T02:07:45.277698" 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-08-23T02:07:45.277872" 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-08-23T02:07:45.278034" elapsed="0.000019"/>
</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-08-23T02:07:45.278186" 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-08-23T02:07:45.278338" 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-08-23T02:07:45.278502" 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-08-23T02:07:45.278652" 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-08-23T02:07:45.276529" elapsed="0.002198"/>
</kw>
<status status="PASS" start="2026-08-23T02:07:45.271276" elapsed="0.007502"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-08-23T02:07:45.270937" elapsed="0.007880"/>
</kw>
<doc>Use a create request with the third batch to create the infrastructure.</doc>
<status status="PASS" start="2026-08-23T02:07:45.160565" elapsed="0.118315"/>
</test>
<test id="s1-s3-s1-t24" name="Edit_Config_Multiple_Batch_Merge_Third" line="166">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-08-23T02:07:45.281947" elapsed="0.000209"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:07:45.281683" elapsed="0.000527"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:45.283197" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:45.283087" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.283067" 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-08-23T02:07:45.287674" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:45.287567" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.287548" elapsed="0.000193"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:45.288700" 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-08-23T02:07:45.288323" elapsed="0.000407"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:07:45.289189" 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-08-23T02:07:45.288894" elapsed="0.000321"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:07:45.289260" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:45.289412" 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-08-23T02:07:45.287964" elapsed="0.001473"/>
</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-08-23T02:07:45.294622" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:45.294513" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.294494" 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-08-23T02:07:45.295886" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:45.295755" elapsed="0.000179"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.295737" elapsed="0.000219"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:07:45.296438" level="INFO">${karaf_connection_index} = 18</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-08-23T02:07:45.296087" elapsed="0.000378"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:45.296869" level="INFO">${current_connection_index} = 23</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-08-23T02:07:45.296611" elapsed="0.000285"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:45.331913" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:45.297417" elapsed="0.034664"/>
</kw>
<msg time="2026-08-23T02:07:45.332256" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:07:45.332304" 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 "n "e "t "c "o "n "f "...</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-08-23T02:07:45.297043" elapsed="0.035297"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:07:45.358230" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "E "d "i "t "_ "C "o "n "f "i "g "_ "M "u "l "t "i "p "l "e "_ "B "a "t "c "h "_ "M "e "r "g "e "_ "T "h "i "r "d "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-08-23T02:07:45.332925" elapsed="0.025484"/>
</kw>
<msg time="2026-08-23T02:07:45.358579" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:07:45.358625" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "E "d "i "t "_ "C "o "n "f "i "g "_ ...</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-08-23T02:07:45.332502" elapsed="0.026160"/>
</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-08-23T02:07:45.358981" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:45.358744" elapsed="0.000313"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.358722" elapsed="0.000361"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:45.359587" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "E "d "i "t "_ "C "o "n "f "i "g "_ "M "u "l "t "i "p "l "e "_ "B "a "t "c "h "_ "M "e "r "g "e "_ "T "h "i "r "d "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:07:45.359213" elapsed="0.000448"/>
</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-08-23T02:07:45.359985" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:45.359727" elapsed="0.000335"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.359710" elapsed="0.000378"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:07:45.360123" 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-08-23T02:07:45.363017" elapsed="0.000148"/>
</kw>
<msg time="2026-08-23T02:07:45.363235" 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-08-23T02:07:45.362369" elapsed="0.000964"/>
</kw>
<kw name="Open 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-08-23T02:07:45.364144" elapsed="0.000037"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:45.364975" elapsed="0.000038"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:07:45.361007" elapsed="0.004085"/>
</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-08-23T02:07:45.360415" elapsed="0.004792"/>
</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-08-23T02:07:45.295458" elapsed="0.069846"/>
</kw>
<msg time="2026-08-23T02:07:45.365396" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:45.365440" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "E "d "i "t "_ "C "o "n "f "i "g "_ ...</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-08-23T02:07:45.294854" elapsed="0.070633"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:07:45.365677" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:07:45.365564" elapsed="0.000172"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.365545" elapsed="0.000216"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 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-08-23T02:07:45.366325" 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-08-23T02:07:45.366641" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:07:45.366712" 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-08-23T02:07:45.294159" elapsed="0.072660"/>
</kw>
<msg time="2026-08-23T02:07:45.366934" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:45.366977" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "E "d "i "t "_ "C "o "n "f "i "g "_ ...</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-08-23T02:07:45.289780" elapsed="0.077234"/>
</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-08-23T02:07:45.367323" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:45.367087" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.367070" elapsed="0.000329"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:07:45.289652" elapsed="0.077769"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:07:45.289487" elapsed="0.077963"/>
</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-08-23T02:07:45.287212" elapsed="0.080289"/>
</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-08-23T02:07:45.282778" elapsed="0.084777"/>
</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-08-23T02:07:45.282345" elapsed="0.085253"/>
</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-08-23T02:07:45.279712" elapsed="0.087936"/>
</kw>
<kw name="Perform_Test">
<kw name="Load_And_Send_Message">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:45.370350" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-multiple-1-request.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-multiple-1-request.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:45.370538" level="INFO">${data} = &lt;rpc message-id="50" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
&lt;edit-config&gt;
&lt;target&gt;
&lt;candidate/&gt;
&lt;/target&gt;
&lt;default-operation&gt;merge&lt;/default-operation&gt;
&lt;config&gt;
&lt;cars xmlns="urn:opendaylight:...</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:45.370134" elapsed="0.000434"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:45.370647" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T02:07:45.370801" level="INFO">${request} = &lt;rpc message-id="50" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
&lt;edit-config&gt;
&lt;target&gt;
&lt;candidate/&gt;
&lt;/target&gt;
&lt;default-operation&gt;merge&lt;/default-operation&gt;
&lt;config&gt;
&lt;cars xmlns="urn:opendaylight:...</msg>
<var>${request}</var>
<arg>${name}-request</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:45.368405" elapsed="0.002424"/>
</kw>
<kw name="Send_Message">
<kw name="Transmit_Message">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:45.373605" level="INFO">&lt;rpc message-id="50" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;</msg>
<arg>${message}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:45.371569" elapsed="0.002097"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:45.374178" level="INFO">&lt;edit-config&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:45.373811" elapsed="0.000418"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:45.381482" level="INFO">&lt;target&gt;
&lt;candidate/&gt;
&lt;/target&gt;
&lt;default-operation&gt;merge&lt;/default-operation&gt;
&lt;config&gt;
&lt;cars xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car"&gt;
  &lt;car-entry&gt;
    &lt;id&gt;CARYOUNG&lt;/id&gt;
    &lt;model&gt;Toyota Prius&lt;/model&gt;
    &lt;manufacturer&gt;Toyota&lt;/manufacturer&gt;
    &lt;year&gt;2016&lt;/year&gt;
    &lt;category&gt;sedan&lt;/category&gt;
  &lt;/car-entry&gt;
&lt;/cars&gt;
&lt;people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:people"&gt;
  &lt;person&gt;
    &lt;id&gt;CUSTYOUNG&lt;/id&gt;
    &lt;age&gt;27&lt;/age&gt;
  &lt;/person&gt;
&lt;/people&gt;
&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;
  &lt;car-person&gt;
    &lt;car-id&gt;CARYOUNG&lt;/car-id&gt;
    &lt;person-id&gt;CUSTYOUNG&lt;/person-id&gt;
  &lt;/car-person&gt;
&lt;/car-people&gt;
&lt;/config&gt;
&lt;/edit-config&gt;
&lt;/rpc&gt;

]]&gt;]]&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:45.374368" elapsed="0.007184"/>
</kw>
<arg>${message}</arg>
<doc>Transmit message to Netconf connection and discard the echo of the message.</doc>
<status status="PASS" start="2026-08-23T02:07:45.371280" elapsed="0.010329"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:45.383807" level="INFO">&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="50"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<msg time="2026-08-23T02:07:45.383910" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="50"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:45.381749" elapsed="0.002189"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:45.383984" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:45.384130" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="50"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${request}</arg>
<doc>Send message to Netconf connection and get the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:45.370990" elapsed="0.013168"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:45.384200" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:07:45.384340" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="50"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${actual}</var>
<arg>${name}</arg>
<doc>Load a message from the data file set, send it to Netconf and return the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:45.368114" elapsed="0.016254"/>
</kw>
<kw name="Load_Expected_Reply">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:45.385354" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-multiple-1-reply.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-multiple-1-reply.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:45.385498" level="INFO">${data} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="50"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:45.385116" elapsed="0.000410"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:45.385572" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:07:45.385721" level="INFO">${expected_reply} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="50"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected_reply}</var>
<arg>${name}-reply</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:45.384795" elapsed="0.000954"/>
</kw>
<return>
<value>${expected_reply}</value>
<status status="PASS" start="2026-08-23T02:07:45.385792" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:07:45.385958" level="INFO">${expected} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="50"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected}</var>
<arg>${name}</arg>
<doc>Load the expected reply from the data file set and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:45.384503" elapsed="0.001482"/>
</kw>
<kw name="Remove String" owner="String">
<msg time="2026-08-23T02:07:45.386326" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="50"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>]]&gt;]]&gt;</arg>
<doc>Removes all ``removables`` from the given ``string``.</doc>
<status status="PASS" start="2026-08-23T02:07:45.386128" elapsed="0.000226"/>
</kw>
<kw name="Strip String" owner="String">
<msg time="2026-08-23T02:07:45.386715" level="INFO">${actual} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="50"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>mode=both</arg>
<doc>Remove leading and/or trailing whitespaces from the given string.</doc>
<status status="PASS" start="2026-08-23T02:07:45.386498" elapsed="0.000246"/>
</kw>
<kw name="Elements Should Be Equal" owner="XML">
<arg>${actual}</arg>
<arg>${expected}</arg>
<arg>normalize_whitespace=True</arg>
<doc>Verifies that the given ``source`` element is equal to ``expected``.</doc>
<status status="PASS" start="2026-08-23T02:07:45.386901" elapsed="0.000409"/>
</kw>
<return>
<value>${actual}</value>
<status status="PASS" start="2026-08-23T02:07:45.387397" elapsed="0.000029"/>
</return>
<arg>merge-multiple-1</arg>
<doc>Load and send the request from the dataset and compare the returned reply to the one stored in the dataset.</doc>
<status status="PASS" start="2026-08-23T02:07:45.367805" elapsed="0.019719"/>
</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-08-23T02:07:45.388701" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:45.388341" elapsed="0.000422"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.388324" elapsed="0.000463"/>
</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-08-23T02:07:45.388936" elapsed="0.000330"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:07:45.394079" 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-08-23T02:07:45.393663" elapsed="0.000445"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-08-23T02:07:45.394325" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:07:45.394181" elapsed="0.000201"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.394163" elapsed="0.000244"/>
</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-08-23T02:07:45.394543" 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-08-23T02:07:45.394701" 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-08-23T02:07:45.394873" 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-08-23T02:07:45.395028" 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-08-23T02:07:45.395181" 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-08-23T02:07:45.395331" 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-08-23T02:07:45.395480" 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-08-23T02:07:45.393369" elapsed="0.002185"/>
</kw>
<status status="PASS" start="2026-08-23T02:07:45.388134" elapsed="0.007470"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-08-23T02:07:45.387768" elapsed="0.007877"/>
</kw>
<doc>Use a create request with the third batch to create the infrastructure.</doc>
<status status="PASS" start="2026-08-23T02:07:45.279140" elapsed="0.116546"/>
</test>
<test id="s1-s3-s1-t25" name="Edit_Config_Multiple_Batch_Merge_Fourth" line="170">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-08-23T02:07:45.398771" elapsed="0.000233"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:07:45.398518" elapsed="0.000540"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:45.400004" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:45.399894" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.399874" 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-08-23T02:07:45.404491" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:45.404386" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.404368" elapsed="0.000191"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:45.405539" 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-08-23T02:07:45.405162" elapsed="0.000403"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:07:45.406021" 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-08-23T02:07:45.405710" elapsed="0.000337"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:07:45.406092" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:07:45.406244" 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-08-23T02:07:45.404768" elapsed="0.001501"/>
</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-08-23T02:07:45.411494" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:45.411387" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.411368" 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-08-23T02:07:45.412735" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:45.412629" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.412611" elapsed="0.000192"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:07:45.413331" level="INFO">${karaf_connection_index} = 18</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-08-23T02:07:45.412970" elapsed="0.000388"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:45.413746" level="INFO">${current_connection_index} = 23</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-08-23T02:07:45.413504" elapsed="0.000268"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:45.447353" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:45.414337" elapsed="0.033190"/>
</kw>
<msg time="2026-08-23T02:07:45.447695" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:07:45.447741" 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 "n "e "t "c "o "n "f "...</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-08-23T02:07:45.413937" elapsed="0.033840"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:07:45.475227" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "E "d "i "t "_ "C "o "n "f "i "g "_ "M "u "l "t "i "p "l "e "_ "B "a "t "c "h "_ "M "e "r "g "e "_ "F "o "u "r "t "h "[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-08-23T02:07:45.448330" elapsed="0.027295"/>
</kw>
<msg time="2026-08-23T02:07:45.476036" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:07:45.476138" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "E "d "i "t "_ "C "o "n "f "i "g "_ ...</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-08-23T02:07:45.447954" elapsed="0.028300"/>
</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-08-23T02:07:45.476941" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:45.476438" elapsed="0.000672"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.476393" elapsed="0.000774"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:45.478302" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "E "d "i "t "_ "C "o "n "f "i "g "_ "M "u "l "t "i "p "l "e "_ "B "a "t "c "h "_ "M "e "r "g "e "_ "F "o "u "r "t "h "[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-08-23T02:07:45.477452" elapsed="0.001015"/>
</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-08-23T02:07:45.479118" elapsed="0.000047"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:45.478613" elapsed="0.000671"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.478574" elapsed="0.000765"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:07:45.479413" elapsed="0.000061"/>
</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-08-23T02:07:45.483112" elapsed="0.000147"/>
</kw>
<msg time="2026-08-23T02:07:45.483330" 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-08-23T02:07:45.482321" elapsed="0.001107"/>
</kw>
<kw name="Open 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-08-23T02:07:45.484249" elapsed="0.000037"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:45.485136" elapsed="0.000037"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:07:45.481000" elapsed="0.004252"/>
</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-08-23T02:07:45.479987" elapsed="0.005378"/>
</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-08-23T02:07:45.412330" elapsed="0.073132"/>
</kw>
<msg time="2026-08-23T02:07:45.485556" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:45.485600" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "E "d "i "t "_ "C "o "n "f "i "g "_ ...</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-08-23T02:07:45.411703" elapsed="0.073966"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:07:45.486009" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-23T02:07:45.485753" elapsed="0.000317"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.485734" elapsed="0.000360"/>
</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-08-23T02:07:45.486467" 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-08-23T02:07:45.486783" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:07:45.486872" 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-08-23T02:07:45.411049" elapsed="0.075933"/>
</kw>
<msg time="2026-08-23T02:07:45.487076" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:45.487120" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "E "d "i "t "_ "C "o "n "f "i "g "_ ...</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-08-23T02:07:45.406651" elapsed="0.080506"/>
</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-08-23T02:07:45.487466" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:45.487232" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.487215" elapsed="0.000329"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:07:45.406523" elapsed="0.081045"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:07:45.406356" elapsed="0.081241"/>
</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-08-23T02:07:45.404030" elapsed="0.083618"/>
</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-08-23T02:07:45.399594" elapsed="0.088115"/>
</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-08-23T02:07:45.399194" elapsed="0.088559"/>
</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-08-23T02:07:45.396522" elapsed="0.091281"/>
</kw>
<kw name="Perform_Test">
<kw name="Load_And_Send_Message">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:45.489300" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-multiple-2-request.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-multiple-2-request.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:45.489433" level="INFO">${data} = &lt;rpc message-id="51" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
&lt;edit-config&gt;
&lt;target&gt;
&lt;candidate/&gt;
&lt;/target&gt;
&lt;default-operation&gt;merge&lt;/default-operation&gt;
&lt;config&gt;
&lt;cars xmlns="urn:opendaylight:...</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:45.488894" elapsed="0.000567"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:45.489510" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:07:45.489657" level="INFO">${request} = &lt;rpc message-id="51" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
&lt;edit-config&gt;
&lt;target&gt;
&lt;candidate/&gt;
&lt;/target&gt;
&lt;default-operation&gt;merge&lt;/default-operation&gt;
&lt;config&gt;
&lt;cars xmlns="urn:opendaylight:...</msg>
<var>${request}</var>
<arg>${name}-request</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:45.488575" elapsed="0.001110"/>
</kw>
<kw name="Send_Message">
<kw name="Transmit_Message">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:45.492386" level="INFO">&lt;rpc message-id="51" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;</msg>
<arg>${message}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:45.490422" elapsed="0.002023"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:45.492947" level="INFO">&lt;edit-config&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:45.492588" elapsed="0.000411"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:45.500161" level="INFO">&lt;target&gt;
&lt;candidate/&gt;
&lt;/target&gt;
&lt;default-operation&gt;merge&lt;/default-operation&gt;
&lt;config&gt;
&lt;cars xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car"&gt;
  &lt;car-entry&gt;
    &lt;id&gt;CARMID&lt;/id&gt;
    &lt;model&gt;Toyota Aurion&lt;/model&gt;
    &lt;manufacturer&gt;Toyota&lt;/manufacturer&gt;
    &lt;year&gt;2006&lt;/year&gt;
    &lt;category&gt;sedan&lt;/category&gt;
  &lt;/car-entry&gt;
&lt;/cars&gt;
&lt;people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:people"&gt;
  &lt;person&gt;
    &lt;id&gt;CUSTMID&lt;/id&gt;
    &lt;age&gt;40&lt;/age&gt;
  &lt;/person&gt;
&lt;/people&gt;
&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;
  &lt;car-person&gt;
    &lt;car-id&gt;CARMID&lt;/car-id&gt;
    &lt;person-id&gt;CUSTMID&lt;/person-id&gt;
  &lt;/car-person&gt;
&lt;/car-people&gt;
&lt;/config&gt;
&lt;/edit-config&gt;
&lt;/rpc&gt;

]]&gt;]]&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:45.493139" elapsed="0.007092"/>
</kw>
<arg>${message}</arg>
<doc>Transmit message to Netconf connection and discard the echo of the message.</doc>
<status status="PASS" start="2026-08-23T02:07:45.490131" elapsed="0.010157"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:45.502121" level="INFO">&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="51"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<msg time="2026-08-23T02:07:45.502210" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="51"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:45.500473" elapsed="0.001765"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:45.502285" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:45.502433" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="51"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${request}</arg>
<doc>Send message to Netconf connection and get the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:45.489825" elapsed="0.012635"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:45.502503" elapsed="0.000025"/>
</return>
<msg time="2026-08-23T02:07:45.502643" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="51"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${actual}</var>
<arg>${name}</arg>
<doc>Load a message from the data file set, send it to Netconf and return the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:45.488288" elapsed="0.014383"/>
</kw>
<kw name="Load_Expected_Reply">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:45.503630" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-multiple-2-reply.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-multiple-2-reply.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:45.503762" level="INFO">${data} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="51"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:45.503421" elapsed="0.000371"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:45.503871" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T02:07:45.504025" level="INFO">${expected_reply} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="51"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected_reply}</var>
<arg>${name}-reply</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:45.503117" elapsed="0.000936"/>
</kw>
<return>
<value>${expected_reply}</value>
<status status="PASS" start="2026-08-23T02:07:45.504096" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:07:45.504241" level="INFO">${expected} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="51"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected}</var>
<arg>${name}</arg>
<doc>Load the expected reply from the data file set and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:45.502808" elapsed="0.001460"/>
</kw>
<kw name="Remove String" owner="String">
<msg time="2026-08-23T02:07:45.504607" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="51"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>]]&gt;]]&gt;</arg>
<doc>Removes all ``removables`` from the given ``string``.</doc>
<status status="PASS" start="2026-08-23T02:07:45.504411" elapsed="0.000225"/>
</kw>
<kw name="Strip String" owner="String">
<msg time="2026-08-23T02:07:45.505015" level="INFO">${actual} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="51"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>mode=both</arg>
<doc>Remove leading and/or trailing whitespaces from the given string.</doc>
<status status="PASS" start="2026-08-23T02:07:45.504780" elapsed="0.000264"/>
</kw>
<kw name="Elements Should Be Equal" owner="XML">
<arg>${actual}</arg>
<arg>${expected}</arg>
<arg>normalize_whitespace=True</arg>
<doc>Verifies that the given ``source`` element is equal to ``expected``.</doc>
<status status="PASS" start="2026-08-23T02:07:45.505189" elapsed="0.000393"/>
</kw>
<return>
<value>${actual}</value>
<status status="PASS" start="2026-08-23T02:07:45.505635" elapsed="0.000027"/>
</return>
<arg>merge-multiple-2</arg>
<doc>Load and send the request from the dataset and compare the returned reply to the one stored in the dataset.</doc>
<status status="PASS" start="2026-08-23T02:07:45.487998" elapsed="0.017760"/>
</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-08-23T02:07:45.506938" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:45.506562" elapsed="0.000439"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.506544" elapsed="0.000482"/>
</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-08-23T02:07:45.507159" elapsed="0.000308"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:07:45.512270" 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-08-23T02:07:45.511860" elapsed="0.000437"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-08-23T02:07:45.512516" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:07:45.512373" elapsed="0.000200"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.512355" 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-08-23T02:07:45.512734" 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-08-23T02:07:45.512948" 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-08-23T02:07:45.513112" 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-08-23T02:07:45.513266" 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-08-23T02:07:45.513421" 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-08-23T02:07:45.513575" 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-08-23T02:07:45.513727" 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-08-23T02:07:45.511537" elapsed="0.002266"/>
</kw>
<status status="PASS" start="2026-08-23T02:07:45.506356" elapsed="0.007514"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-08-23T02:07:45.506017" elapsed="0.007896"/>
</kw>
<doc>Use a merge request with the third batch to create the infrastructure.</doc>
<status status="PASS" start="2026-08-23T02:07:45.395977" elapsed="0.117974"/>
</test>
<test id="s1-s3-s1-t26" name="Edit_Config_Multiple_Batch_Merge_Fifth" line="174">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-08-23T02:07:45.516979" elapsed="0.000206"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:07:45.516718" 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-08-23T02:07:45.518178" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:45.518069" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.518050" elapsed="0.000196"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:45.522690" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:45.522584" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.522566" elapsed="0.000198"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:45.523751" 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-08-23T02:07:45.523349" elapsed="0.000429"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:07:45.524285" 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-08-23T02:07:45.523976" elapsed="0.000336"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:07:45.524357" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:45.524512" 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-08-23T02:07:45.522989" elapsed="0.001548"/>
</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-08-23T02:07:45.529762" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:45.529654" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.529635" elapsed="0.000210"/>
</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-08-23T02:07:45.531029" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:45.530922" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.530903" elapsed="0.000195"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:07:45.531597" level="INFO">${karaf_connection_index} = 18</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-08-23T02:07:45.531231" elapsed="0.000393"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:45.532046" level="INFO">${current_connection_index} = 23</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-08-23T02:07:45.531775" elapsed="0.000297"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:45.563714" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:45.532599" elapsed="0.031308"/>
</kw>
<msg time="2026-08-23T02:07:45.564079" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:07:45.564125" 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 "n "e "t "c "o "n "f "...</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-08-23T02:07:45.532221" elapsed="0.031984"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:07:45.598295" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "E "d "i "t "_ "C "o "n "f "i "g "_ "M "u "l "t "i "p "l "e "_ "B "a "t "c "h "_ "M "e "r "g "e "_ "F "i "f "t "h "[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-08-23T02:07:45.564754" elapsed="0.033746"/>
</kw>
<msg time="2026-08-23T02:07:45.598683" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:07:45.598729" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "E "d "i "t "_ "C "o "n "f "i "g "_ ...</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-08-23T02:07:45.564369" elapsed="0.034421"/>
</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-08-23T02:07:45.599139" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:45.598907" elapsed="0.000313"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.598884" elapsed="0.000363"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:45.599775" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "E "d "i "t "_ "C "o "n "f "i "g "_ "M "u "l "t "i "p "l "e "_ "B "a "t "c "h "_ "M "e "r "g "e "_ "F "i "f "t "h "[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-08-23T02:07:45.599380" elapsed="0.000488"/>
</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-08-23T02:07:45.600139" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:45.599936" elapsed="0.000280"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.599918" elapsed="0.000323"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:07:45.600277" 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-08-23T02:07:45.603271" elapsed="0.000151"/>
</kw>
<msg time="2026-08-23T02:07:45.603495" 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-08-23T02:07:45.602538" elapsed="0.001059"/>
</kw>
<kw name="Open 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-08-23T02:07:45.604422" elapsed="0.000038"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:45.605254" elapsed="0.000038"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:07:45.601166" elapsed="0.004205"/>
</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-08-23T02:07:45.600547" elapsed="0.004939"/>
</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-08-23T02:07:45.530597" elapsed="0.074988"/>
</kw>
<msg time="2026-08-23T02:07:45.605681" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:45.605726" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "E "d "i "t "_ "C "o "n "f "i "g "_ ...</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-08-23T02:07:45.529988" elapsed="0.075778"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:07:45.606125" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:07:45.606012" elapsed="0.000173"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.605824" elapsed="0.000385"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 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-08-23T02:07:45.606600" 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-08-23T02:07:45.606977" elapsed="0.000026"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:07:45.607052" 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-08-23T02:07:45.529318" elapsed="0.077845"/>
</kw>
<msg time="2026-08-23T02:07:45.607258" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:45.607302" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "E "d "i "t "_ "C "o "n "f "i "g "_ ...</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-08-23T02:07:45.524902" elapsed="0.082441"/>
</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-08-23T02:07:45.607710" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:45.607462" elapsed="0.000304"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.607443" elapsed="0.000347"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:07:45.524755" elapsed="0.083060"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:07:45.524588" elapsed="0.083316"/>
</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-08-23T02:07:45.522228" elapsed="0.085737"/>
</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-08-23T02:07:45.517770" elapsed="0.090254"/>
</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-08-23T02:07:45.517373" elapsed="0.090698"/>
</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-08-23T02:07:45.514733" elapsed="0.093393"/>
</kw>
<kw name="Perform_Test">
<kw name="Load_And_Send_Message">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:45.609643" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-multiple-3-request.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-multiple-3-request.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:45.609804" level="INFO">${data} = &lt;rpc message-id="52" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
&lt;edit-config&gt;
&lt;target&gt;
&lt;candidate/&gt;
&lt;/target&gt;
&lt;default-operation&gt;merge&lt;/default-operation&gt;
&lt;config&gt;
&lt;cars xmlns="urn:opendaylight:...</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:45.609205" elapsed="0.000642"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:45.609898" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:45.610049" level="INFO">${request} = &lt;rpc message-id="52" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
&lt;edit-config&gt;
&lt;target&gt;
&lt;candidate/&gt;
&lt;/target&gt;
&lt;default-operation&gt;merge&lt;/default-operation&gt;
&lt;config&gt;
&lt;cars xmlns="urn:opendaylight:...</msg>
<var>${request}</var>
<arg>${name}-request</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:45.608895" elapsed="0.001182"/>
</kw>
<kw name="Send_Message">
<kw name="Transmit_Message">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:45.612806" level="INFO">&lt;rpc message-id="52" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;</msg>
<arg>${message}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:45.610859" elapsed="0.002020"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:45.613371" level="INFO">&lt;edit-config&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:45.613023" elapsed="0.000399"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:45.620532" level="INFO">&lt;target&gt;
&lt;candidate/&gt;
&lt;/target&gt;
&lt;default-operation&gt;merge&lt;/default-operation&gt;
&lt;config&gt;
&lt;cars xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car"&gt;
  &lt;car-entry&gt;
    &lt;id&gt;CAROLD2&lt;/id&gt;
    &lt;model&gt;Camry&lt;/model&gt;
    &lt;manufacturer&gt;Toyota&lt;/manufacturer&gt;
    &lt;year&gt;1982&lt;/year&gt;
  &lt;/car-entry&gt;
&lt;/cars&gt;
&lt;people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:people"&gt;
  &lt;person&gt;
    &lt;id&gt;CUSTOLD2&lt;/id&gt;
    &lt;age&gt;65&lt;/age&gt;
  &lt;/person&gt;
&lt;/people&gt;
&lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;
  &lt;car-person&gt;
    &lt;car-id&gt;CAROLD2&lt;/car-id&gt;
    &lt;person-id&gt;CUSTOLD2&lt;/person-id&gt;
  &lt;/car-person&gt;
&lt;/car-people&gt;
&lt;/config&gt;
&lt;/edit-config&gt;
&lt;/rpc&gt;

]]&gt;]]&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:45.613563" elapsed="0.007040"/>
</kw>
<arg>${message}</arg>
<doc>Transmit message to Netconf connection and discard the echo of the message.</doc>
<status status="PASS" start="2026-08-23T02:07:45.610512" elapsed="0.010149"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:45.622568" level="INFO">&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="52"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<msg time="2026-08-23T02:07:45.622660" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="52"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:45.620802" elapsed="0.001886"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:45.622735" elapsed="0.000033"/>
</return>
<msg time="2026-08-23T02:07:45.622912" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="52"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${request}</arg>
<doc>Send message to Netconf connection and get the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:45.610220" elapsed="0.012721"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:45.622986" elapsed="0.000025"/>
</return>
<msg time="2026-08-23T02:07:45.623127" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="52"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${actual}</var>
<arg>${name}</arg>
<doc>Load a message from the data file set, send it to Netconf and return the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:45.608583" elapsed="0.014573"/>
</kw>
<kw name="Load_Expected_Reply">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:45.624117" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-multiple-3-reply.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-multiple-3-reply.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:45.624247" level="INFO">${data} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="52"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:45.623907" elapsed="0.000400"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:45.624355" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:45.624506" level="INFO">${expected_reply} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="52"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected_reply}</var>
<arg>${name}-reply</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:45.623586" elapsed="0.000947"/>
</kw>
<return>
<value>${expected_reply}</value>
<status status="PASS" start="2026-08-23T02:07:45.624577" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:07:45.624724" level="INFO">${expected} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="52"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected}</var>
<arg>${name}</arg>
<doc>Load the expected reply from the data file set and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:45.623294" elapsed="0.001457"/>
</kw>
<kw name="Remove String" owner="String">
<msg time="2026-08-23T02:07:45.625120" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="52"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>]]&gt;]]&gt;</arg>
<doc>Removes all ``removables`` from the given ``string``.</doc>
<status status="PASS" start="2026-08-23T02:07:45.624912" elapsed="0.000237"/>
</kw>
<kw name="Strip String" owner="String">
<msg time="2026-08-23T02:07:45.625525" level="INFO">${actual} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="52"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>mode=both</arg>
<doc>Remove leading and/or trailing whitespaces from the given string.</doc>
<status status="PASS" start="2026-08-23T02:07:45.625299" elapsed="0.000255"/>
</kw>
<kw name="Elements Should Be Equal" owner="XML">
<arg>${actual}</arg>
<arg>${expected}</arg>
<arg>normalize_whitespace=True</arg>
<doc>Verifies that the given ``source`` element is equal to ``expected``.</doc>
<status status="PASS" start="2026-08-23T02:07:45.625699" elapsed="0.000458"/>
</kw>
<return>
<value>${actual}</value>
<status status="PASS" start="2026-08-23T02:07:45.626209" elapsed="0.000028"/>
</return>
<arg>merge-multiple-3</arg>
<doc>Load and send the request from the dataset and compare the returned reply to the one stored in the dataset.</doc>
<status status="PASS" start="2026-08-23T02:07:45.608298" elapsed="0.018034"/>
</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-08-23T02:07:45.627564" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:45.627188" elapsed="0.000440"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.627169" 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-08-23T02:07:45.627789" elapsed="0.000332"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:07:45.633033" 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-08-23T02:07:45.632598" elapsed="0.000463"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-08-23T02:07:45.633279" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:07:45.633135" elapsed="0.000200"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.633117" elapsed="0.000243"/>
</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-08-23T02:07:45.633498" 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-08-23T02:07:45.633656" 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-08-23T02:07:45.633814" elapsed="0.000034"/>
</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-08-23T02:07:45.633987" 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-08-23T02:07:45.634138" 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-08-23T02:07:45.634286" 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-08-23T02:07:45.634460" 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-08-23T02:07:45.632305" elapsed="0.002235"/>
</kw>
<status status="PASS" start="2026-08-23T02:07:45.626976" elapsed="0.007620"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-08-23T02:07:45.626604" elapsed="0.008032"/>
</kw>
<doc>Add a "name4" subelement to the element and check the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:45.514209" elapsed="0.120466"/>
</test>
<test id="s1-s3-s1-t27" name="Commit_Multiple_Merge" line="178">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-08-23T02:07:45.637733" elapsed="0.000227"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:07:45.637485" elapsed="0.000529"/>
</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-08-23T02:07:45.639020" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:45.638907" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.638887" elapsed="0.000201"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:45.643523" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:45.643415" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.643397" elapsed="0.000193"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:45.644571" 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-08-23T02:07:45.644186" elapsed="0.000412"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:07:45.645060" 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-08-23T02:07:45.644746" elapsed="0.000340"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:07:45.645131" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:45.645285" 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-08-23T02:07:45.643803" elapsed="0.001507"/>
</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-08-23T02:07:45.650549" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:45.650441" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.650421" elapsed="0.000197"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:45.651794" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:45.651687" elapsed="0.000177"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.651669" elapsed="0.000219"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:07:45.652384" level="INFO">${karaf_connection_index} = 18</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-08-23T02:07:45.652022" elapsed="0.000389"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:45.652801" level="INFO">${current_connection_index} = 23</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-08-23T02:07:45.652557" elapsed="0.000270"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:45.681820" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:45.653368" elapsed="0.028647"/>
</kw>
<msg time="2026-08-23T02:07:45.682184" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:07:45.682230" 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 "n "e "t "c "o "n "f "...</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-08-23T02:07:45.652994" elapsed="0.029273"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:07:45.704237" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "o "m "m "i "t "_ "M "u "l "t "i "p "l "e "_ "M "e "r "g "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-08-23T02:07:45.682802" elapsed="0.021614"/>
</kw>
<msg time="2026-08-23T02:07:45.704583" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:07:45.704628" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "o "m "m "i "t "_ "M "u "l "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-08-23T02:07:45.682423" elapsed="0.022242"/>
</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-08-23T02:07:45.704982" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:45.704747" elapsed="0.000312"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.704726" elapsed="0.000358"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:45.705613" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "o "m "m "i "t "_ "M "u "l "t "i "p "l "e "_ "M "e "r "g "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-08-23T02:07:45.705217" elapsed="0.000466"/>
</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-08-23T02:07:45.706017" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:45.705785" elapsed="0.000310"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.705766" elapsed="0.000354"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:07:45.706154" 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-08-23T02:07:45.708992" elapsed="0.000146"/>
</kw>
<msg time="2026-08-23T02:07:45.709209" 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-08-23T02:07:45.708333" elapsed="0.000975"/>
</kw>
<kw name="Open 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-08-23T02:07:45.710133" elapsed="0.000037"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:45.710963" elapsed="0.000038"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:07:45.706993" elapsed="0.004085"/>
</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-08-23T02:07:45.706404" elapsed="0.004788"/>
</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-08-23T02:07:45.651388" elapsed="0.059901"/>
</kw>
<msg time="2026-08-23T02:07:45.711381" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:45.711424" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "o "m "m "i "t "_ "M "u "l "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-08-23T02:07:45.650757" elapsed="0.060705"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:07:45.711643" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-08-23T02:07:45.711537" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.711518" elapsed="0.000208"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:45.712291" 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-08-23T02:07:45.712614" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:07:45.712685" 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-08-23T02:07:45.650080" elapsed="0.062712"/>
</kw>
<msg time="2026-08-23T02:07:45.712905" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:45.712949" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "o "m "m "i "t "_ "M "u "l "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-08-23T02:07:45.645672" elapsed="0.067314"/>
</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-08-23T02:07:45.713299" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:45.713063" elapsed="0.000290"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.713045" elapsed="0.000331"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:07:45.645541" elapsed="0.067858"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:07:45.645366" elapsed="0.068063"/>
</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-08-23T02:07:45.643056" elapsed="0.070438"/>
</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-08-23T02:07:45.638588" elapsed="0.074960"/>
</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-08-23T02:07:45.638151" elapsed="0.075441"/>
</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-08-23T02:07:45.635513" elapsed="0.078139"/>
</kw>
<kw name="Perform_Test">
<kw name="Load_And_Send_Message">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:45.715155" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-multiple-commit-request.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-multiple-commit-request.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:45.715287" level="INFO">${data} = &lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="53"&gt;
&lt;commit/&gt;
&lt;/rpc&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:45.714729" elapsed="0.000586"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:45.715393" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T02:07:45.715544" level="INFO">${request} = &lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="53"&gt;
&lt;commit/&gt;
&lt;/rpc&gt;
</msg>
<var>${request}</var>
<arg>${name}-request</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:45.714421" elapsed="0.001151"/>
</kw>
<kw name="Send_Message">
<kw name="Transmit_Message">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:45.718144" level="INFO">&lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="53"&gt;</msg>
<arg>${message}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:45.716324" elapsed="0.001879"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:45.718661" level="INFO">&lt;commit/&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:45.718347" elapsed="0.000365"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:45.719327" level="INFO">&lt;/rpc&gt;

]]&gt;]]&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:45.718865" elapsed="0.000516"/>
</kw>
<arg>${message}</arg>
<doc>Transmit message to Netconf connection and discard the echo of the message.</doc>
<status status="PASS" start="2026-08-23T02:07:45.716030" elapsed="0.003406"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:45.731091" level="INFO">&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="53"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<msg time="2026-08-23T02:07:45.731184" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="53"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:45.719574" elapsed="0.011638"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:45.731259" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:07:45.731407" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="53"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${request}</arg>
<doc>Send message to Netconf connection and get the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:45.715714" elapsed="0.015720"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:45.731477" elapsed="0.000025"/>
</return>
<msg time="2026-08-23T02:07:45.731617" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="53"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${actual}</var>
<arg>${name}</arg>
<doc>Load a message from the data file set, send it to Netconf and return the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:45.714128" elapsed="0.017516"/>
</kw>
<kw name="Load_Expected_Reply">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:45.732598" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-multiple-commit-reply.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-multiple-commit-reply.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:45.732725" level="INFO">${data} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="53"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:45.732392" elapsed="0.000361"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:45.732798" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:07:45.732964" level="INFO">${expected_reply} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="53"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected_reply}</var>
<arg>${name}-reply</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:45.732089" elapsed="0.000903"/>
</kw>
<return>
<value>${expected_reply}</value>
<status status="PASS" start="2026-08-23T02:07:45.733034" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:07:45.733179" level="INFO">${expected} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="53"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected}</var>
<arg>${name}</arg>
<doc>Load the expected reply from the data file set and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:45.731780" elapsed="0.001440"/>
</kw>
<kw name="Remove String" owner="String">
<msg time="2026-08-23T02:07:45.733563" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="53"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>]]&gt;]]&gt;</arg>
<doc>Removes all ``removables`` from the given ``string``.</doc>
<status status="PASS" start="2026-08-23T02:07:45.733369" elapsed="0.000222"/>
</kw>
<kw name="Strip String" owner="String">
<msg time="2026-08-23T02:07:45.733966" level="INFO">${actual} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="53"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>mode=both</arg>
<doc>Remove leading and/or trailing whitespaces from the given string.</doc>
<status status="PASS" start="2026-08-23T02:07:45.733732" elapsed="0.000263"/>
</kw>
<kw name="Elements Should Be Equal" owner="XML">
<arg>${actual}</arg>
<arg>${expected}</arg>
<arg>normalize_whitespace=True</arg>
<doc>Verifies that the given ``source`` element is equal to ``expected``.</doc>
<status status="PASS" start="2026-08-23T02:07:45.734139" elapsed="0.000395"/>
</kw>
<return>
<value>${actual}</value>
<status status="PASS" start="2026-08-23T02:07:45.734586" elapsed="0.000028"/>
</return>
<arg>merge-multiple-commit</arg>
<doc>Load and send the request from the dataset and compare the returned reply to the one stored in the dataset.</doc>
<status status="PASS" start="2026-08-23T02:07:45.713813" elapsed="0.020895"/>
</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-08-23T02:07:45.735903" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:45.735522" elapsed="0.000477"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.735503" elapsed="0.000524"/>
</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-08-23T02:07:45.736165" elapsed="0.000313"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:07:45.741329" 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-08-23T02:07:45.740904" elapsed="0.000453"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-08-23T02:07:45.741573" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:07:45.741431" elapsed="0.000198"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.741413" elapsed="0.000240"/>
</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-08-23T02:07:45.741789" 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-08-23T02:07:45.741967" 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-08-23T02:07:45.742125" 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-08-23T02:07:45.742277" 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-08-23T02:07:45.742430" 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-08-23T02:07:45.742581" 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-08-23T02:07:45.742731" 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-08-23T02:07:45.740596" elapsed="0.002215"/>
</kw>
<status status="PASS" start="2026-08-23T02:07:45.735312" elapsed="0.007564"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-08-23T02:07:45.734968" elapsed="0.007950"/>
</kw>
<doc>Commit the changes and check the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:45.635025" elapsed="0.107931"/>
</test>
<test id="s1-s3-s1-t28" name="Multiple_Batch_Data_In_Running_Config" line="182">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-08-23T02:07:45.746012" elapsed="0.000209"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:07:45.745742" 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-08-23T02:07:45.747222" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:45.747113" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.747094" elapsed="0.000196"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:45.751694" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:45.751589" elapsed="0.000150"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.751571" elapsed="0.000190"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:45.752723" 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-08-23T02:07:45.752345" elapsed="0.000407"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:07:45.753237" 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-08-23T02:07:45.752916" elapsed="0.000348"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:07:45.753309" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:45.753461" 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-08-23T02:07:45.751984" elapsed="0.001501"/>
</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-08-23T02:07:45.758671" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:45.758563" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.758543" elapsed="0.000201"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:45.759945" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:45.759812" elapsed="0.000180"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.759794" elapsed="0.000260"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:07:45.760554" level="INFO">${karaf_connection_index} = 18</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-08-23T02:07:45.760192" elapsed="0.000388"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:45.760999" level="INFO">${current_connection_index} = 23</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-08-23T02:07:45.760725" elapsed="0.000300"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:45.794616" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:45.761562" elapsed="0.033222"/>
</kw>
<msg time="2026-08-23T02:07:45.794981" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:07:45.795027" 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 "n "e "t "c "o "n "f "...</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-08-23T02:07:45.761180" elapsed="0.033885"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:07:45.822034" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "M "u "l "t "i "p "l "e "_ "B "a "t "c "h "_ "D "a "t "a "_ "I "n "_ "R "u "n "n "i "n "g "_ "C "o "n "f "i "g "[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-08-23T02:07:45.795603" elapsed="0.026609"/>
</kw>
<msg time="2026-08-23T02:07:45.822376" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:07:45.822421" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "M "u "l "t "i "p "l "e "_ "B "a "t ...</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-08-23T02:07:45.795223" elapsed="0.027235"/>
</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-08-23T02:07:45.822741" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:45.822533" elapsed="0.000283"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.822514" elapsed="0.000351"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:45.823369" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "M "u "l "t "i "p "l "e "_ "B "a "t "c "h "_ "D "a "t "a "_ "I "n "_ "R "u "n "n "i "n "g "_ "C "o "n "f "i "g "[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-08-23T02:07:45.822999" elapsed="0.000443"/>
</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-08-23T02:07:45.823709" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:45.823508" elapsed="0.000275"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.823490" elapsed="0.000318"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:07:45.823861" 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-08-23T02:07:45.826757" elapsed="0.000168"/>
</kw>
<msg time="2026-08-23T02:07:45.826996" 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-08-23T02:07:45.826075" elapsed="0.001017"/>
</kw>
<kw name="Open 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-08-23T02:07:45.827905" elapsed="0.000036"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:45.828715" elapsed="0.000036"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:07:45.824701" elapsed="0.004127"/>
</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-08-23T02:07:45.824105" elapsed="0.004863"/>
</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-08-23T02:07:45.759514" elapsed="0.069552"/>
</kw>
<msg time="2026-08-23T02:07:45.829158" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:45.829201" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "M "u "l "t "i "p "l "e "_ "B "a "t ...</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-08-23T02:07:45.758902" elapsed="0.070336"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:07:45.829418" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-08-23T02:07:45.829312" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.829294" elapsed="0.000206"/>
</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-08-23T02:07:45.829921" 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-08-23T02:07:45.830471" elapsed="0.000027"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:07:45.830546" 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-08-23T02:07:45.758222" elapsed="0.072433"/>
</kw>
<msg time="2026-08-23T02:07:45.830748" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:45.830791" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "M "u "l "t "i "p "l "e "_ "B "a "t ...</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-08-23T02:07:45.753845" elapsed="0.076983"/>
</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-08-23T02:07:45.831158" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:45.830920" elapsed="0.000291"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.830902" elapsed="0.000333"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:07:45.753701" elapsed="0.077556"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:07:45.753535" elapsed="0.077751"/>
</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-08-23T02:07:45.751237" elapsed="0.080101"/>
</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-08-23T02:07:45.746814" elapsed="0.084577"/>
</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-08-23T02:07:45.746410" elapsed="0.085024"/>
</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-08-23T02:07:45.743765" elapsed="0.087720"/>
</kw>
<kw name="Load_And_Send_Message">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:45.832449" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-multiple-check-request.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-multiple-check-request.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:45.832642" level="INFO">${data} = &lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="54"&gt;
    &lt;get-config&gt;
        &lt;source&gt;
            &lt;running/&gt;
        &lt;/source&gt;
    &lt;/get-config&gt;
&lt;/rpc&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:45.832239" elapsed="0.000433"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:45.832719" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:07:45.832887" level="INFO">${request} = &lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="54"&gt;
    &lt;get-config&gt;
        &lt;source&gt;
            &lt;running/&gt;
        &lt;/source&gt;
    &lt;/get-config&gt;
&lt;/rpc&gt;
</msg>
<var>${request}</var>
<arg>${name}-request</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:45.831922" elapsed="0.000994"/>
</kw>
<kw name="Send_Message">
<kw name="Transmit_Message">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:45.836999" level="INFO">&lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="54"&gt;</msg>
<arg>${message}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:45.835266" elapsed="0.001792"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:45.837565" level="INFO">&lt;get-config&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:45.837202" elapsed="0.000414"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:45.838881" level="INFO">&lt;source&gt;
            &lt;running/&gt;
        &lt;/source&gt;
    &lt;/get-config&gt;
&lt;/rpc&gt;

]]&gt;]]&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:45.837758" elapsed="0.001178"/>
</kw>
<arg>${message}</arg>
<doc>Transmit message to Netconf connection and discard the echo of the message.</doc>
<status status="PASS" start="2026-08-23T02:07:45.834969" elapsed="0.004023"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:45.916441" level="INFO">&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="54"&gt;
    &lt;data&gt;
        &lt;aaa-encrypt-service-config xmlns="config:aaa:authn:encrypt:service:config"&gt;
            &lt;encrypt-type&gt;AES&lt;/encrypt-type&gt;
            &lt;encrypt-key-length&gt;128&lt;/encrypt-key-length&gt;
            &lt;password-length&gt;12&lt;/password-length&gt;
            &lt;cipher-transforms&gt;AES/GCM/NoPadding&lt;/cipher-transforms&gt;
            &lt;encrypt-key&gt;svW8eCV45iNA&lt;/encrypt-key&gt;
            &lt;encrypt-salt&gt;szGsvGrFGnYbd9nd1t9nEw==&lt;/encrypt-salt&gt;
            &lt;auth-tag-length&gt;128&lt;/auth-tag-length&gt;
            &lt;encrypt-method&gt;PBKDF2WithHmacSHA1&lt;/encrypt-method&gt;
            &lt;encrypt-iteration-count&gt;32768&lt;/encrypt-iteration-count&gt;
        &lt;/aaa-encrypt-service-config&gt;
        &lt;key-stores xmlns="urn:opendaylight:yang:aaa:cert:mdsal"&gt;
            &lt;id&gt;KeyStores:1&lt;/id&gt;
            &lt;ssl-data&gt;
                &lt;bundle-name&gt;opendaylight&lt;/bundle-name&gt;
                &lt;tls-protocols/&gt;
                &lt;odl-keystore&gt;
                    &lt;store-password&gt;szGsvGrFGnYbd9nd1t9nE/fx+V2RdCDYC56eieY+0NUj2isn/xZEgHOUDk8=&lt;/store-password&gt;
                    &lt;sign-alg&gt;SHA1WithRSAEncryption&lt;/sign-alg&gt;
                    &lt;validity&gt;365&lt;/validity&gt;
                    &lt;alias&gt;controller&lt;/alias&gt;
                    &lt;name&gt;ctl.jks&lt;/name&gt;
                    &lt;dname&gt;CN=ODL, OU=Dev, O=LinuxFoundation, L=QC Montreal, C=CA&lt;/dname&gt;
                    &lt;keystoreFile&gt;szGsvGrFGnYbd9nd1t9nE0JpQtr6AxLteOf9yUIRItqLm3NkTNx/el6TA99g1gQs8oNL0ip4IPpl4rt7rFRRPPBAYfnI5Hkh+b8tHGDNwygXVh0qPTd02Ju1oPl0gQiXDeG3LxTe8oV0ONxVMiVDPRLInTiudW5V+NAL0c/qNo47UDfypSDuyY7eUL/QqoheS+TBVtkEivw2fS5E+lNKVmSRnedcKds+JRGqsn0ie6kCPmdOS26Zo5s8D6M2tT+r5in4jHovTq6a3RAmy5ZEJJbHJx/m+Y3778MRBkcD2nV3THNE3WXHfY8z+tUfGap/IGFvqumYYtRL35QgVchzJa3JZ2mMxPc2WLe5i2J1nYXYU6QDbT3UoksnTVzBRz0eznEzQQs47v/7gSOqx+Xug8kld3PASYNi5fZD0YmZGe+lI8ON47+4URudcRM9QmzWRu2LhIpGk8Fk0ueaJh5QF0VbVHat5S7fi1fkSNf2wHTs2pFv75hWSsg+7KDTAgfExMImhBPJ+pc8raT7kLEYiBPXy8NMvlDSksgfvSIcyyharJNj8wtxEFkBVWeX0SFzwlZy9oICi+li5ZM8WhSAbtBGTbpBJ9ADwg8WZo7uznJx+rhIUrjoziNRYqUVp/euIq6rjbE/k6jZCtKTP/qoqy0lShP6M9GfuB6O1akHdOHMWOqX2Q6G8qdVPuyAshiJrIthlJEiY5LX8xhXOQDAuGvwB5hFN/aXa0bMksLEHsTKpXSRnhLCJQxzrKpSSIuQqMzsDUQJQMzch1NGpbSFDwOySU5aeyvsTo4AYPT6Xf6YhGsYDk39B6R/CFsBVO13/4SfkiINKvhpYwQ/vfftmmF/7SXYXp/YR7nffSZTr1ooWJHAaGzqAQw+it9HIaJd7IqTROyhS23F00eX3h/OVwbsBB6PmGXh0LvOoCEfctsl0hTpnouPExetsGBZ7dfPpQIK5UiizhBZjKfr1N3dRVawGP2tFckp3xB0Fr3W8nqRCcWxi5oDGtKcK+z5LinRpCeurFbtZwatTqgh1o/KRXdpQ9E+QmJuyIUnIjoxwuFejwHujtyJR+uAvC90T+G09PnaaMGALkmiJ3kiDn5waQup2qhptMUuF1ZjNirqcbAh7MoEtU02PCQAlBmV0D9Uvp/q9Iw3EFmWhfNT8w/Y03VHw2AK7DY94gJq0vmVUD96ahn4UvWXL5CjFyzXD8ikqdV0fx3zamP53xl6LhQUwBWwiaZVZ6qpfmuSfHRBoOKn5FGmIVpQtgs1i2OYsf8CFMdds6HkzCU9ZR5bcNIUz3U7KzxhaZNpj+tBPjCe5knbuvODRT9AIIZr5NL8zkfLG0R/DySEUJEP9MZFDzaYKqwZUQK9u9lyxXBdRZ/nJJVpYkbOdjraUZOn2wX1MOv768TylMxft2elpWtyo51E7XJca0zO3FT+T6dEDLNuLf70Tjf4ZKlXIs+rbMZRzJiNPU/gOOCncjGnQg7yVNt6CXFzLloYDKyI1+nXar0j8Y7aLeRw4ANqfONtf/a/feF1rxUgkr9kpwha7YR6ZbwLsgEqRGQ1yP0UUYTN4tW9P1fKN220ZErjmNLf5y9d4E1kw0JC9Aowy1OIPHC+GoIH2GXmLp6xrwtvDNX0N9GVVtWxGfdOuRunqus5wncxwKSsJHEV7gC7CttHVSQuYxf+qSVzxDZdZhrEFRDM+2ehQr+jYPjBFDfrFrZ6APcuc6eG8uNgDwFBIT/AvuHqnX/J/C5nmpguP7J8i+L6Tq/vaE06wHDJDHx4janBzQWz38QKtnFFVvSuYlPq4xpjc4XL0w==&lt;/keystoreFile&gt;
                    &lt;key-alg&gt;RSA&lt;/key-alg&gt;
                    &lt;keysize&gt;1024&lt;/keysize&gt;
                &lt;/odl-keystore&gt;
                &lt;cipher-suites&gt;
                    &lt;suiteName/&gt;
                &lt;/cipher-suites&gt;
                &lt;trust-keystore&gt;
                    &lt;keystoreFile&gt;szGsvGrFGnYbd9nd1t9nE0JpQtr6AxLteOf9yIktC+veMTpJpq+B4qQuq9ISdPV1uRcHSk71SvQM3Yb0MmEuAA==&lt;/keystoreFile&gt;
                    &lt;store-password&gt;szGsvGrFGnYbd9nd1t9nE/re1XnJbnW5IKOJusQBPKYGj7gRRA5Mm2KIwp4=&lt;/store-password&gt;
                    &lt;name&gt;truststore.jks&lt;/name&gt;
                &lt;/trust-keystore&gt;
            &lt;/ssl-data&gt;
        &lt;/key-stores&gt;
        &lt;people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:people"&gt;
            &lt;person&gt;
                &lt;id&gt;CUSTOLD&lt;/id&gt;
                &lt;age&gt;99&lt;/age&gt;
            &lt;/person&gt;
            &lt;person&gt;
                &lt;id&gt;CUSTMID&lt;/id&gt;
                &lt;age&gt;40&lt;/age&gt;
            &lt;/person&gt;
            &lt;person&gt;
                &lt;id&gt;CUSTOLD2&lt;/id&gt;
                &lt;age&gt;65&lt;/age&gt;
            &lt;/person&gt;
            &lt;person&gt;
                &lt;id&gt;CUSTYOUNG&lt;/id&gt;
                &lt;age&gt;27&lt;/age&gt;
            &lt;/person&gt;
        &lt;/people&gt;
        &lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;
            &lt;car-person&gt;
                &lt;car-id&gt;CAROLD2&lt;/car-id&gt;
                &lt;person-id&gt;CUSTOLD2&lt;/person-id&gt;
            &lt;/car-person&gt;
            &lt;car-person&gt;
                &lt;car-id&gt;CARYOUNG&lt;/car-id&gt;
                &lt;person-id&gt;CUSTYOUNG&lt;/person-id&gt;
            &lt;/car-person&gt;
            &lt;car-person&gt;
                &lt;car-id&gt;CARMID&lt;/car-id&gt;
                &lt;person-id&gt;CUSTMID&lt;/person-id&gt;
            &lt;/car-person&gt;
            &lt;car-person&gt;
                &lt;car-id&gt;CAROLD&lt;/car-id&gt;
                &lt;person-id&gt;CUSTOLD&lt;/person-id&gt;
            &lt;/car-person&gt;
        &lt;/car-people&gt;
        &lt;cars xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car"&gt;
            &lt;car-entry&gt;
                &lt;id&gt;CAROLD2&lt;/id&gt;
                &lt;model&gt;Camry&lt;/model&gt;
                &lt;year&gt;1982&lt;/year&gt;
                &lt;manufacturer&gt;Toyota&lt;/manufacturer&gt;
            &lt;/car-entry&gt;
            &lt;car-entry&gt;
                &lt;id&gt;CARYOUNG&lt;/id&gt;
                &lt;model&gt;Toyota Prius&lt;/model&gt;
                &lt;year&gt;2016&lt;/year&gt;
                &lt;manufacturer&gt;Toyota&lt;/manufacturer&gt;
                &lt;category&gt;sedan&lt;/category&gt;
            &lt;/car-entry&gt;
            &lt;car-entry&gt;
                &lt;id&gt;CARMID&lt;/id&gt;
                &lt;model&gt;Toyota Aurion&lt;/model&gt;
                &lt;year&gt;2006&lt;/year&gt;
                &lt;manufacturer&gt;Toyota&lt;/manufacturer&gt;
                &lt;category&gt;sedan&lt;/category&gt;
            &lt;/car-entry&gt;
            &lt;car-entry&gt;
                &lt;id&gt;CAROLD&lt;/id&gt;
                &lt;year&gt;1950&lt;/year&gt;
                &lt;manufacturer&gt;Ford&lt;/manufacturer&gt;
            &lt;/car-entry&gt;
        &lt;/cars&gt;
    &lt;/data&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<msg time="2026-08-23T02:07:45.916657" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="54"&gt;
    &lt;data&gt;
        &lt;aaa-encrypt-service-config xmlns="config:aaa...</msg>
<var>${reply}</var>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:45.839129" elapsed="0.077558"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:45.916735" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:07:45.916902" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="54"&gt;
    &lt;data&gt;
        &lt;aaa-encrypt-service-config xmlns="config:aaa...</msg>
<var>${reply}</var>
<arg>${request}</arg>
<doc>Send message to Netconf connection and get the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:45.833057" elapsed="0.083874"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:45.916976" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:07:45.917118" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="54"&gt;
    &lt;data&gt;
        &lt;aaa-encrypt-service-config xmlns="config:aaa...</msg>
<var>${reply}</var>
<arg>merge-multiple-check</arg>
<doc>Load a message from the data file set, send it to Netconf and return the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:45.831630" elapsed="0.085517"/>
</kw>
<kw name="Check_Multiple_Batch_Data_Present">
<kw name="Check_Multiple_Batch_Data">
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CAROLD&lt;/id&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:45.918399" elapsed="0.000315"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;CAROLD&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:45.917965" elapsed="0.000805"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CUSTOLD&lt;/id&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:45.919373" elapsed="0.000294"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;CUSTOLD&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:45.918929" elapsed="0.000794"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;car-id&gt;CAROLD&lt;/car-id&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:45.920302" elapsed="0.000280"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;car-id&gt;CAROLD&lt;/car-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:45.919884" elapsed="0.000753"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUSTOLD&lt;/person-id&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:45.921212" elapsed="0.000281"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUSTOLD&lt;/person-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:45.920779" elapsed="0.000770"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CARYOUNG&lt;/id&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:45.922120" elapsed="0.000282"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;CARYOUNG&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:45.921690" elapsed="0.000766"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CUSTYOUNG&lt;/id&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:45.923027" elapsed="0.000294"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;CUSTYOUNG&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:45.922598" elapsed="0.000777"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;car-id&gt;CARYOUNG&lt;/car-id&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:45.923951" elapsed="0.000281"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;car-id&gt;CARYOUNG&lt;/car-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:45.923518" elapsed="0.000769"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUSTYOUNG&lt;/person-id&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:45.924856" elapsed="0.000282"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUSTYOUNG&lt;/person-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:45.924429" elapsed="0.000764"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CARMID&lt;/id&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:45.925751" elapsed="0.000297"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;CARMID&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:45.925336" elapsed="0.000767"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CUSTMID&lt;/id&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:45.926715" elapsed="0.000302"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;CUSTMID&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:45.926299" elapsed="0.000774"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;car-id&gt;CARMID&lt;/car-id&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:45.927653" elapsed="0.000304"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;car-id&gt;CARMID&lt;/car-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:45.927236" elapsed="0.000776"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUSTMID&lt;/person-id&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:45.928573" elapsed="0.000298"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUSTMID&lt;/person-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:45.928155" elapsed="0.000771"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CAROLD2&lt;/id&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:45.929527" elapsed="0.000283"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;CAROLD2&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:45.929108" elapsed="0.000773"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CUSTOLD2&lt;/id&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:45.930447" elapsed="0.000285"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;CUSTOLD2&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:45.930025" elapsed="0.000761"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;car-id&gt;CAROLD2&lt;/car-id&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:45.931374" elapsed="0.000284"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;car-id&gt;CAROLD2&lt;/car-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:45.930945" elapsed="0.000768"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUSTOLD2&lt;/person-id&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:45.932290" elapsed="0.000281"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUSTOLD2&lt;/person-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:45.931873" elapsed="0.000753"/>
</kw>
<arg>${reply}</arg>
<arg>BuiltIn.Should_Contain</arg>
<status status="PASS" start="2026-08-23T02:07:45.917630" elapsed="0.015054"/>
</kw>
<arg>${reply}</arg>
<status status="PASS" start="2026-08-23T02:07:45.917272" elapsed="0.015461"/>
</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-08-23T02:07:45.934057" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:45.933674" elapsed="0.000446"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.933514" elapsed="0.000631"/>
</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-08-23T02:07:45.934278" elapsed="0.000307"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:07:45.939223" 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-08-23T02:07:45.938784" elapsed="0.000467"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-08-23T02:07:45.939468" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:07:45.939327" elapsed="0.000198"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.939309" elapsed="0.000240"/>
</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-08-23T02:07:45.939685" 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-08-23T02:07:45.939861" 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-08-23T02:07:45.940023" elapsed="0.000019"/>
</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-08-23T02:07:45.940175" 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-08-23T02:07:45.940328" 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-08-23T02:07:45.940480" 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-08-23T02:07:45.940631" 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-08-23T02:07:45.938490" elapsed="0.002216"/>
</kw>
<status status="PASS" start="2026-08-23T02:07:45.933328" elapsed="0.007427"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-08-23T02:07:45.932986" elapsed="0.007809"/>
</kw>
<doc>Check that the 3 subelements are now present in the running configuration.</doc>
<status status="PASS" start="2026-08-23T02:07:45.743217" elapsed="0.197629"/>
</test>
<test id="s1-s3-s1-t29" name="Abort_Connection_To_Simulate_Session_Failure" line="187">
<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-08-23T02:07:45.943896" elapsed="0.000206"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:07:45.943632" elapsed="0.000525"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:45.945150" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:45.945043" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.945024" 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-08-23T02:07:45.949628" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:45.949521" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.949503" elapsed="0.000193"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:45.950660" 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-08-23T02:07:45.950283" elapsed="0.000404"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:07:45.951183" 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-08-23T02:07:45.950852" elapsed="0.000357"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:07:45.951255" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:07:45.951407" 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-08-23T02:07:45.949921" elapsed="0.001511"/>
</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-08-23T02:07:45.956685" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:45.956577" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.956557" elapsed="0.000197"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:45.957955" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:45.957824" elapsed="0.000176"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:45.957805" elapsed="0.000217"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:07:45.958509" level="INFO">${karaf_connection_index} = 18</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-08-23T02:07:45.958154" elapsed="0.000381"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:45.958960" level="INFO">${current_connection_index} = 23</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-08-23T02:07:45.958679" elapsed="0.000307"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:45.992323" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:45.959509" elapsed="0.032976"/>
</kw>
<msg time="2026-08-23T02:07:45.992653" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:07:45.992698" 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 "n "e "t "c "o "n "f "...</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-08-23T02:07:45.959134" elapsed="0.033602"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:07:46.018949" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "A "b "o "r "t "_ "C "o "n "n "e "c "t "i "o "n "_ "T "o "_ "S "i "m "u "l "a "t "e "_ "S "e "s "s "i "o "n "_ "F "a "i "l "u "r "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-08-23T02:07:45.993289" elapsed="0.025843"/>
</kw>
<msg time="2026-08-23T02:07:46.019299" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:07:46.019345" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "A "b "o "r "t "_ "C "o "n "n "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-08-23T02:07:45.992911" elapsed="0.026471"/>
</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-08-23T02:07:46.019671" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:46.019458" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:46.019439" elapsed="0.000333"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:46.020298" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "A "b "o "r "t "_ "C "o "n "n "e "c "t "i "o "n "_ "T "o "_ "S "i "m "u "l "a "t "e "_ "S "e "s "s "i "o "n "_ "F "a "i "l "u "r "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-08-23T02:07:46.019924" elapsed="0.000451"/>
</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-08-23T02:07:46.020644" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:46.020441" elapsed="0.000278"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:46.020424" elapsed="0.000358"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:07:46.020819" elapsed="0.000046"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-23T02:07:46.023682" elapsed="0.000172"/>
</kw>
<msg time="2026-08-23T02:07:46.023928" 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-08-23T02:07:46.023047" elapsed="0.000981"/>
</kw>
<kw name="Open 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-08-23T02:07:46.024800" elapsed="0.000066"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:46.025632" elapsed="0.000036"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:07:46.021656" elapsed="0.004089"/>
</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-08-23T02:07:46.021086" elapsed="0.004796"/>
</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-08-23T02:07:45.957519" elapsed="0.068464"/>
</kw>
<msg time="2026-08-23T02:07:46.026074" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:46.026117" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "A "b "o "r "t "_ "C "o "n "n "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-08-23T02:07:45.956910" elapsed="0.069244"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:07:46.026352" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:07:46.026246" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:46.026227" 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-08-23T02:07:46.026800" 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-08-23T02:07:46.027317" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:07:46.027389" 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-08-23T02:07:45.956237" elapsed="0.071260"/>
</kw>
<msg time="2026-08-23T02:07:46.027590" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:46.027633" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "A "b "o "r "t "_ "C "o "n "n "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-08-23T02:07:45.951780" elapsed="0.075889"/>
</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-08-23T02:07:46.027999" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:46.027744" elapsed="0.000309"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:46.027727" elapsed="0.000349"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:07:45.951650" elapsed="0.076449"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:07:45.951484" elapsed="0.076643"/>
</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-08-23T02:07:45.949164" elapsed="0.079016"/>
</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-08-23T02:07:45.944738" elapsed="0.083496"/>
</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-08-23T02:07:45.944334" elapsed="0.083944"/>
</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-08-23T02:07:45.941663" elapsed="0.086665"/>
</kw>
<kw name="Abort_ODL_Netconf_Connection">
<if>
<branch type="IF" condition="${ssh_netconf_pid} == -1">
<return>
<status status="NOT RUN" start="2026-08-23T02:07:46.028821" elapsed="0.000031"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:46.028714" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:46.028697" elapsed="0.000208"/>
</if>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:07:46.029337" level="INFO">${kill_command} = kill 4504</msg>
<var>${kill_command}</var>
<arg>kill ${ssh_netconf_pid}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:07:46.029036" elapsed="0.000327"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T02:07:46.029832" level="INFO">${ssh_netconf_pid} = -1</msg>
<arg>${ssh_netconf_pid}</arg>
<arg>-1</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-23T02:07:46.029513" elapsed="0.000394"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${ssh_control}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-23T02:07:46.030047" elapsed="0.000146"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:46.031946" level="INFO">kill 4504</msg>
<arg>${kill_command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:46.030371" elapsed="0.001633"/>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-08-23T02:07:46.032955" level="INFO">[?2004l[?2004h[jenkins@releng-19126-54-0-builder-0 ~]&gt;</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="PASS" start="2026-08-23T02:07:46.032151" elapsed="0.000860"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${ssh_netconf}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-23T02:07:46.033149" elapsed="0.000135"/>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-08-23T02:07:46.034317" level="INFO">[?2004h[jenkins@releng-19126-54-0-builder-0 ~]&gt;</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="PASS" start="2026-08-23T02:07:46.033422" elapsed="0.000956"/>
</kw>
<doc>Correctly close the Netconf connection and make sure it is really dead.</doc>
<status status="PASS" start="2026-08-23T02:07:46.028530" elapsed="0.005902"/>
</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-08-23T02:07:46.035599" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:46.035238" elapsed="0.000423"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:46.035221" elapsed="0.000466"/>
</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-08-23T02:07:46.035825" elapsed="0.000331"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:07:46.040808" 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-08-23T02:07:46.040408" elapsed="0.000443"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-08-23T02:07:46.041071" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-23T02:07:46.040928" elapsed="0.000201"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:46.040910" elapsed="0.000243"/>
</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-08-23T02:07:46.041288" 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-08-23T02:07:46.041444" 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-08-23T02:07:46.041601" elapsed="0.000019"/>
</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-08-23T02:07:46.041751" 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-08-23T02:07:46.041920" 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-08-23T02:07:46.042084" 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-08-23T02:07:46.042236" 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-08-23T02:07:46.040115" elapsed="0.002196"/>
</kw>
<status status="PASS" start="2026-08-23T02:07:46.035032" elapsed="0.007329"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-08-23T02:07:46.034675" elapsed="0.007727"/>
</kw>
<doc>Simulate session failure by disconnecting without terminating the session.</doc>
<status status="PASS" start="2026-08-23T02:07:45.941110" elapsed="0.101329"/>
</test>
<test id="s1-s3-s1-t30" name="Reconnect_To_ODL_Netconf_After_Session_Failure" line="191">
<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-08-23T02:07:46.045351" elapsed="0.000206"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:07:46.045104" elapsed="0.000507"/>
</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-08-23T02:07:46.046594" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:46.046485" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:46.046466" elapsed="0.000196"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:46.051263" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:46.051157" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:46.051139" elapsed="0.000193"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:46.052298" 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-08-23T02:07:46.051919" elapsed="0.000406"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:07:46.052807" 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-08-23T02:07:46.052511" elapsed="0.000337"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:07:46.052894" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:46.053049" 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-08-23T02:07:46.051541" elapsed="0.001533"/>
</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-08-23T02:07:46.058108" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:46.057999" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:46.057979" 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-08-23T02:07:46.059360" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:46.059252" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:46.059234" elapsed="0.000194"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:07:46.059929" level="INFO">${karaf_connection_index} = 18</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-08-23T02:07:46.059559" elapsed="0.000397"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:46.060342" level="INFO">${current_connection_index} = 23</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-08-23T02:07:46.060100" elapsed="0.000268"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:46.092807" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:46.060905" elapsed="0.032095"/>
</kw>
<msg time="2026-08-23T02:07:46.093167" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:07:46.093213" 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 "n "e "t "c "o "n "f "...</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-08-23T02:07:46.060513" elapsed="0.032737"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:07:46.122598" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "R "e "c "o "n "n "e "c "t "_ "T "o "_ "O "D "L "_ "N "e "t "c "o "n "f "_ "A "f "t "e "r "_ "S "e "s "s "i "o "n "_ "F "a "i "l "u "r "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-08-23T02:07:46.093808" elapsed="0.028973"/>
</kw>
<msg time="2026-08-23T02:07:46.122974" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:07:46.123019" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "R "e "c "o "n "n "e "c "t "_ "T "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-08-23T02:07:46.093405" elapsed="0.029651"/>
</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-08-23T02:07:46.123336" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:46.123131" elapsed="0.000280"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:46.123112" elapsed="0.000324"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:46.123956" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "R "e "c "o "n "n "e "c "t "_ "T "o "_ "O "D "L "_ "N "e "t "c "o "n "f "_ "A "f "t "e "r "_ "S "e "s "s "i "o "n "_ "F "a "i "l "u "r "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-08-23T02:07:46.123565" elapsed="0.000467"/>
</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-08-23T02:07:46.124299" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:46.124098" elapsed="0.000276"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:46.124080" elapsed="0.000319"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:07:46.124432" 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-08-23T02:07:46.127231" elapsed="0.000145"/>
</kw>
<msg time="2026-08-23T02:07:46.127446" 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-08-23T02:07:46.126620" elapsed="0.000923"/>
</kw>
<kw name="Open 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-08-23T02:07:46.128346" elapsed="0.000037"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:46.129230" elapsed="0.000038"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:07:46.125267" elapsed="0.004083"/>
</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-08-23T02:07:46.124673" elapsed="0.004797"/>
</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-08-23T02:07:46.058951" elapsed="0.070618"/>
</kw>
<msg time="2026-08-23T02:07:46.129661" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:46.129705" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "R "e "c "o "n "n "e "c "t "_ "T "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-08-23T02:07:46.058315" elapsed="0.071428"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:07:46.130261" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-23T02:07:46.129819" elapsed="0.000506"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:46.129800" elapsed="0.000549"/>
</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-08-23T02:07:46.130731" 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-08-23T02:07:46.131071" elapsed="0.000026"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:07:46.131145" 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-08-23T02:07:46.057626" elapsed="0.073628"/>
</kw>
<msg time="2026-08-23T02:07:46.131346" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:46.131389" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "R "e "c "o "n "n "e "c "t "_ "T "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-08-23T02:07:46.053423" elapsed="0.078003"/>
</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-08-23T02:07:46.131739" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:46.131500" elapsed="0.000295"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:46.131483" elapsed="0.000336"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:07:46.053294" elapsed="0.078600"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:07:46.053126" elapsed="0.078801"/>
</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-08-23T02:07:46.050781" elapsed="0.081199"/>
</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-08-23T02:07:46.046199" elapsed="0.085838"/>
</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-08-23T02:07:46.045747" elapsed="0.086334"/>
</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-08-23T02:07:46.043141" elapsed="0.088991"/>
</kw>
<kw name="Open_ODL_Netconf_Connection">
<kw name="Reopen_ODL_Netconf_Connection">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:46.135575" level="INFO">sshpass -p admin ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no admin@127.0.0.1 -p 2830 -s netconf</msg>
<arg>sshpass -p ${ssh_password} ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no ${ssh_user}\@127.0.0.1 -p ${ssh_port} -s netconf</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:46.132805" elapsed="0.002827"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:46.604616" level="INFO">[?2004lWarning: Permanently added '[127.0.0.1]:2830' (ECDSA) to the list of known hosts.
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
    &lt;capabilities&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-netconf-with-defaults?module=ietf-netconf-with-defaults&amp;amp;revision=2011-06-01&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-tcp-server?module=ietf-tcp-server&amp;amp;revision=2024-10-10&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:iana-ssh-key-exchange-algs?module=iana-ssh-key-exchange-algs&amp;amp;revision=2024-10-16&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:iana-crypt-hash?module=iana-crypt-hash&amp;amp;revision=2014-08-06&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring?module=ietf-netconf-monitoring&amp;amp;revision=2010-10-04&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:netconf-node-topology?module=netconf-node-topology&amp;amp;revision=2025-12-05&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:device:notification?module=odl-device-notification&amp;amp;revision=2024-02-18&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-netconf-nmda?module=ietf-netconf-nmda&amp;amp;revision=2019-01-07&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:netconf:device?module=odl-netconf-device&amp;amp;revision=2025-12-05&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-http-server?module=ietf-http-server&amp;amp;revision=2026-02-04&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-ssh-common?module=ietf-ssh-common&amp;amp;revision=2024-10-10&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:yang:extension:codegen?module=odl-codegen-extensions&amp;amp;revision=2024-06-27&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-yang-library?module=ietf-yang-library&amp;amp;revision=2019-01-04&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-netconf-server?module=ietf-netconf-server&amp;amp;revision=2025-12-04&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:params:xml:ns:yang:aaa?module=aaa&amp;amp;revision=2016-12-14&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-x509-cert-to-name?module=ietf-x509-cert-to-name&amp;amp;revision=2014-12-10&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-yang-patch?module=ietf-yang-patch&amp;amp;revision=2017-02-22&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-origin?module=ietf-origin&amp;amp;revision=2018-02-14&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:params:xml:ns:yang:controller:md:sal:remote?module=sal-remote&amp;amp;revision=2014-01-14&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-ip?module=ietf-ip&amp;amp;revision=2018-02-22&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:iana-http-versions?module=iana-http-versions&amp;amp;revision=2026-02-04&lt;/capability&gt;
        &lt;capability&gt;tag:opendaylight.org,2017:controller:yang:lowlevel:target?module=odl-mdsal-lowlevel-target&amp;amp;revision=2017-02-15&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-yang-metadata?module=ietf-yang-metadata&amp;amp;revision=2016-08-05&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-truststore?module=ietf-truststore&amp;amp;revision=2024-10-10&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:yang:extension:yang-ext?module=yang-ext&amp;amp;revision=2013-07-09&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-purchase?module=car-purchase&amp;amp;revision=2014-08-18&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:netconf:capability:url:1.0?scheme=file&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-netconf-notifications?module=ietf-netconf-notifications&amp;amp;revision=2012-02-06&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-crypto-types?module=ietf-crypto-types&amp;amp;revision=2024-10-10&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-netconf-client?module=ietf-netconf-client&amp;amp;revision=2025-12-04&lt;/capability&gt;
        &lt;capability&gt;tag:opendaylight.org,2017:controller:yang:lowlevel:control?module=odl-mdsal-lowlevel-control&amp;amp;revision=2017-02-15&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:netconf:capability:exi:1.0&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:netconf:base:1.0?module=ietf-netconf&amp;amp;revision=2011-06-01&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-restconf-monitoring?module=ietf-restconf-monitoring&amp;amp;revision=2017-01-26&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-datastores?module=ietf-datastores&amp;amp;revision=2018-02-14&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:yang:aaa:cert:mdsal?module=aaa-cert-mdsal&amp;amp;revision=2016-03-21&lt;/capability&gt;
        &lt;capability&gt;urn:TBD:params:xml:ns:yang:network-topology?module=network-topology&amp;amp;revision=2013-10-21&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-restconf-server?module=ietf-restconf-server&amp;amp;revision=2025-12-04&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-tcp-common?module=ietf-tcp-common&amp;amp;revision=2024-10-10&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:yang:aaa:cert:rpc?module=aaa-cert-rpc&amp;amp;revision=2015-12-15&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-yang-types?module=ietf-yang-types&amp;amp;revision=2013-07-15&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:netconf-node-optional?module=netconf-node-optional&amp;amp;revision=2022-12-25&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:params:xml:ns:yang:controller:md:sal:cluster:admin?module=cluster-admin&amp;amp;revision=2025-01-31&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-restconf-subscribed-notifications?module=ietf-restconf-subscribed-notifications&amp;amp;revision=2019-11-17&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:netconf:capability:candidate:1.0&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-interfaces?module=ietf-interfaces&amp;amp;revision=2018-02-20&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:params:xml:ns:yang:controller:config:distributed-datastore-provider?module=distributed-datastore-provider&amp;amp;revision=2025-01-30&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-tls-client?module=ietf-tls-client&amp;amp;revision=2024-10-10&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:yang:http:client?module=odl-http-client&amp;amp;revision=2026-07-17&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people?module=car-people&amp;amp;revision=2014-08-18&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:controller:basic-rpc-test?module=basic-rpc-test&amp;amp;revision=2016-01-20&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-tls-server?module=ietf-tls-server&amp;amp;revision=2024-10-10&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-netconf-acm?module=ietf-netconf-acm&amp;amp;revision=2018-02-14&lt;/capability&gt;
        &lt;capability&gt;tag:opendaylight.org,2017:controller:yang:lowlevel:common?module=odl-mdsal-lowlevel-common&amp;amp;revision=2017-02-15&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:aaa:password:service:config?module=aaa-password-service-config&amp;amp;revision=2017-06-19&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:params:xml:ns:yang:controller:entity-owners?module=odl-entity-owners&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:yang:aaa:cert?module=aaa-cert&amp;amp;revision=2015-11-26&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-restconf?module=ietf-restconf&amp;amp;revision=2017-01-26&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:people?module=people&amp;amp;revision=2014-08-18&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:yang:quic:common?module=odl-quic-common&amp;amp;revision=2026-04-15&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:iana-ssh-mac-algs?module=iana-ssh-mac-algs&amp;amp;revision=2024-10-16&lt;/capability&gt;
        &lt;capability&gt;config:aaa:authn:encrypt:service:config?module=aaa-encrypt-service-config&amp;amp;revision=2024-02-02&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-keystore?module=ietf-keystore&amp;amp;revision=2024-10-10&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:params:xml:ns:yang:netconf:monitoring?module=odl-netconf-monitoring&amp;amp;revision=2022-07-18&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:netconf:keystore?module=netconf-keystore&amp;amp;revision=2024-07-08&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-yang-schema-mount?module=ietf-yang-schema-mount&amp;amp;revision=2019-01-14&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-ssh-server?module=ietf-ssh-server&amp;amp;revision=2024-10-10&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:yang:http:server?module=odl-http-server&amp;amp;revision=2026-04-15&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-http-client?module=ietf-http-client&amp;amp;revision=2024-02-08&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-ssh-client?module=ietf-ssh-client&amp;amp;revision=2024-10-10&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:netconf:capability:interleave:1.0&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:netconf:notification:1.0?module=notifications&amp;amp;revision=2008-07-14&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:iana-ssh-public-key-algs?module=iana-ssh-public-key-algs&amp;amp;revision=2024-10-16&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:netmod:notification?module=nc-notifications&amp;amp;revision=2008-07-14&lt;/capability&gt;
        &lt;capability&gt;urn:sal:restconf:event:subscription?module=sal-remote-augment&amp;amp;revision=2023-11-03&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:params:xml:ns:yang:controller:cds:types?module=odl-controller-cds-types&amp;amp;revision=2025-01-31&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-network-instance?module=ietf-network-instance&amp;amp;revision=2019-01-21&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-tls-common?module=ietf-tls-common&amp;amp;revision=2024-10-10&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:aaa:app:config?module=aaa-app-config&amp;amp;revision=2017-06-19&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:netconf:base:1.1&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:params:xml:ns:yang:mdsal:core:general-entity?module=odl-general-entity&amp;amp;revision=2015-09-30&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:netconf:base:1.0&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-udp-server?module=ietf-udp-server&amp;amp;revision=2025-12-16&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:netconf:capability:notification:1.0&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-udp-client?module=ietf-udp-client&amp;amp;revision=2025-12-16&lt;/capability&gt;
        &lt;capability&gt;urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car?module=car&amp;amp;revision=2014-08-18&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:iana-ssh-encryption-algs?module=iana-ssh-encryption-algs&amp;amp;revision=2024-10-16&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-inet-types?module=ietf-inet-types&amp;amp;revision=2013-07-15&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-tcp-client?module=ietf-tcp-client&amp;amp;revision=2024-10-10&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:ietf-subscribed-notifications?module=ietf-subscribed-notifications&amp;amp;revision=2019-09-09&lt;/capability&gt;
        &lt;capability&gt;urn:ietf:params:xml:ns:yang:iana-tls-cipher-suite-algs?module=iana-tls-cipher-suite-algs&amp;amp;revision=2024-10-16&lt;/capability&gt;
    &lt;/capabilities&gt;
    &lt;session-id&gt;3&lt;/session-id&gt;
&lt;/hello&gt;
]]&gt;]]&gt;</msg>
<msg time="2026-08-23T02:07:46.605065" level="INFO">${hello} = [?2004lWarning: Permanently added '[127.0.0.1]:2830' (ECDSA) to the list of known hosts.
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;hello xmlns="urn:ietf:params:xml:ns:netconf:base:1...</msg>
<var>${hello}</var>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:46.135778" elapsed="0.469320"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${ssh_control}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-23T02:07:46.605270" elapsed="0.000154"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-23T02:07:46.605678" level="INFO">Executing command 'ps -A | grep sshpass | awk '{print $1}''.</msg>
<msg time="2026-08-23T02:07:46.629054" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-23T02:07:46.629262" level="INFO">${pid} = 4528</msg>
<var>${pid}</var>
<arg>ps -A | grep sshpass | awk '{print $1}'</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-23T02:07:46.605575" elapsed="0.023743"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T02:07:46.630599" level="INFO">${ssh_netconf_pid} = 4528</msg>
<arg>${ssh_netconf_pid}</arg>
<arg>${pid}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-23T02:07:46.629674" elapsed="0.001021"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${ssh_netconf}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-23T02:07:46.631050" elapsed="0.000304"/>
</kw>
<return>
<value>${hello}</value>
<status status="PASS" start="2026-08-23T02:07:46.631459" elapsed="0.000068"/>
</return>
<msg time="2026-08-23T02:07:46.631806" level="INFO">${hello} = [?2004lWarning: Permanently added '[127.0.0.1]:2830' (ECDSA) to the list of known hosts.
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;hello xmlns="urn:ietf:params:xml:ns:netconf:base:1...</msg>
<var>${hello}</var>
<doc>Reopen a closed netconf connection.</doc>
<status status="PASS" start="2026-08-23T02:07:46.132558" elapsed="0.499343"/>
</kw>
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:46.633410" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/hello.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/hello.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:46.633729" level="INFO">${data} = &lt;hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
&lt;capabilities&gt;
&lt;capability&gt;urn:ietf:params:netconf:base:1.0&lt;/capability&gt;
&lt;/capabilities&gt;
&lt;/hello&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:46.632923" elapsed="0.000869"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:46.634080" elapsed="0.000064"/>
</return>
<msg time="2026-08-23T02:07:46.634420" level="INFO">${hello_message} = &lt;hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
&lt;capabilities&gt;
&lt;capability&gt;urn:ietf:params:netconf:base:1.0&lt;/capability&gt;
&lt;/capabilities&gt;
&lt;/hello&gt;
</msg>
<var>${hello_message}</var>
<arg>hello</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:46.632250" elapsed="0.002231"/>
</kw>
<kw name="Transmit_Message">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:46.638024" level="INFO">&lt;hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;</msg>
<arg>${message}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:46.635491" elapsed="0.002592"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:46.638579" level="INFO">&lt;capabilities&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:46.638227" elapsed="0.000403"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:46.639986" level="INFO">&lt;capability&gt;urn:ietf:params:netconf:base:1.0&lt;/capability&gt;
&lt;/capabilities&gt;
&lt;/hello&gt;

]]&gt;]]&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:46.638770" elapsed="0.001272"/>
</kw>
<arg>${hello_message}</arg>
<doc>Transmit message to Netconf connection and discard the echo of the message.</doc>
<status status="PASS" start="2026-08-23T02:07:46.634783" elapsed="0.005318"/>
</kw>
<return>
<value>${hello}</value>
<status status="PASS" start="2026-08-23T02:07:46.640143" elapsed="0.000029"/>
</return>
<doc>Open a prepared netconf connecion.</doc>
<status status="PASS" start="2026-08-23T02:07:46.132283" elapsed="0.507984"/>
</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-08-23T02:07:46.641469" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:46.641095" elapsed="0.000436"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:46.641076" elapsed="0.000480"/>
</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-08-23T02:07:46.641689" elapsed="0.000345"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:07:46.646941" 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-08-23T02:07:46.646517" elapsed="0.000451"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-08-23T02:07:46.647186" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:07:46.647043" elapsed="0.000200"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:46.647024" elapsed="0.000243"/>
</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-08-23T02:07:46.647403" 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-08-23T02:07:46.647569" 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-08-23T02:07:46.647730" 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-08-23T02:07:46.647964" 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-08-23T02:07:46.648129" 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-08-23T02:07:46.648283" 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-08-23T02:07:46.648432" 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-08-23T02:07:46.646224" elapsed="0.002284"/>
</kw>
<status status="PASS" start="2026-08-23T02:07:46.640883" elapsed="0.007674"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-08-23T02:07:46.640511" elapsed="0.008086"/>
</kw>
<doc>Reconnect to ODL Netconf and fail if that is not possible.</doc>
<status status="PASS" start="2026-08-23T02:07:46.042625" elapsed="0.606010"/>
</test>
<test id="s1-s3-s1-t31" name="Multiple_Batch_Data_In_Running_Config_After_Session_Failure" line="195">
<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-08-23T02:07:46.651635" elapsed="0.000242"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:07:46.651386" elapsed="0.000547"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:46.652901" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:46.652768" elapsed="0.000180"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:46.652749" elapsed="0.000221"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:46.657397" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:46.657289" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:46.657271" elapsed="0.000194"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:46.658436" 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-08-23T02:07:46.658057" elapsed="0.000405"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:07:46.658919" 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-08-23T02:07:46.658609" elapsed="0.000336"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:07:46.658990" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:46.659145" 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-08-23T02:07:46.657676" elapsed="0.001494"/>
</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-08-23T02:07:46.664435" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:46.664325" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:46.664306" 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-08-23T02:07:46.665696" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:46.665590" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:46.665571" elapsed="0.000193"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:07:46.666276" level="INFO">${karaf_connection_index} = 18</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-08-23T02:07:46.665919" elapsed="0.000383"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:46.666688" level="INFO">${current_connection_index} = 23</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-08-23T02:07:46.666446" elapsed="0.000268"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:46.697436" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:46.667258" elapsed="0.030344"/>
</kw>
<msg time="2026-08-23T02:07:46.697773" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:07:46.697819" 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 "n "e "t "c "o "n "f "...</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-08-23T02:07:46.666883" elapsed="0.030992"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:07:46.740420" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "M "u "l "t "i "p "l "e "_ "B "a "t "c "h "_ "D "a "t "a "_ "I "n "_ "R "u "n "n "i "n "g "_ "C "o "n "f "i "g "_ "A "f "t "e "r "_ "S "e "s "s "i "o "[78Cn "[A[78C_
 "F "a "i "l "u "r "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-08-23T02:07:46.698491" elapsed="0.042118"/>
</kw>
<msg time="2026-08-23T02:07:46.740777" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:07:46.740823" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "M "u "l "t "i "p "l "e "_ "B "a "t ...</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-08-23T02:07:46.698106" elapsed="0.042796"/>
</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-08-23T02:07:46.741197" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:46.740984" elapsed="0.000290"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:46.740964" elapsed="0.000336"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:46.741802" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "M "u "l "t "i "p "l "e "_ "B "a "t "c "h "_ "D "a "t "a "_ "I "n "_ "R "u "n "n "i "n "g "_ "C "o "n "f "i "g "_ "A "f "t "e "r "_ "S "e "s "s "i "o "[78Cn "[A[78C_
 "F "a "i "l "u "r "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-08-23T02:07:46.741432" elapsed="0.000471"/>
</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-08-23T02:07:46.742172" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:46.741971" elapsed="0.000277"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:46.741953" elapsed="0.000319"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:07:46.742306" 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-08-23T02:07:46.745149" elapsed="0.000144"/>
</kw>
<msg time="2026-08-23T02:07:46.745363" 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-08-23T02:07:46.744529" elapsed="0.000931"/>
</kw>
<kw name="Open 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-08-23T02:07:46.746268" elapsed="0.000037"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:46.747113" elapsed="0.000037"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:07:46.743173" elapsed="0.004056"/>
</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-08-23T02:07:46.742554" elapsed="0.004790"/>
</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-08-23T02:07:46.665289" elapsed="0.082154"/>
</kw>
<msg time="2026-08-23T02:07:46.747534" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:46.747578" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "M "u "l "t "i "p "l "e "_ "B "a "t ...</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-08-23T02:07:46.664645" elapsed="0.082971"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:07:46.747798" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:07:46.747691" elapsed="0.000191"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:46.747672" elapsed="0.000235"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 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-08-23T02:07:46.748291" 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-08-23T02:07:46.748616" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:07:46.748688" 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-08-23T02:07:46.663982" elapsed="0.084816"/>
</kw>
<msg time="2026-08-23T02:07:46.749093" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:46.749138" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "M "u "l "t "i "p "l "e "_ "B "a "t ...</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-08-23T02:07:46.659521" elapsed="0.089654"/>
</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-08-23T02:07:46.749488" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:46.749251" elapsed="0.000332"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:46.749233" elapsed="0.000375"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:07:46.659391" elapsed="0.090241"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:07:46.659222" elapsed="0.090441"/>
</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-08-23T02:07:46.656930" elapsed="0.092788"/>
</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-08-23T02:07:46.652482" elapsed="0.097291"/>
</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-08-23T02:07:46.652077" elapsed="0.097739"/>
</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-08-23T02:07:46.649417" elapsed="0.100469"/>
</kw>
<kw name="Load_And_Send_Message">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:46.750858" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-multiple-check-request.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-multiple-check-request.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:46.751041" level="INFO">${data} = &lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="54"&gt;
    &lt;get-config&gt;
        &lt;source&gt;
            &lt;running/&gt;
        &lt;/source&gt;
    &lt;/get-config&gt;
&lt;/rpc&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:46.750612" elapsed="0.000458"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:46.751118" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:46.751266" level="INFO">${request} = &lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="54"&gt;
    &lt;get-config&gt;
        &lt;source&gt;
            &lt;running/&gt;
        &lt;/source&gt;
    &lt;/get-config&gt;
&lt;/rpc&gt;
</msg>
<var>${request}</var>
<arg>${name}-request</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:46.750307" elapsed="0.000987"/>
</kw>
<kw name="Send_Message">
<kw name="Transmit_Message">
<kw name="Write" owner="SSHLibrary">
<arg>${message}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:46.752252" elapsed="0.000253"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:46.753924" level="INFO">&lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="54"&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:46.752656" elapsed="0.001325"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:46.755382" level="INFO">&lt;get-config&gt;
        &lt;source&gt;
            &lt;running/&gt;
        &lt;/source&gt;
    &lt;/get-config&gt;
&lt;/rpc&gt;

]]&gt;]]&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:46.754126" elapsed="0.001313"/>
</kw>
<arg>${message}</arg>
<doc>Transmit message to Netconf connection and discard the echo of the message.</doc>
<status status="PASS" start="2026-08-23T02:07:46.751952" elapsed="0.003545"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:46.822589" level="INFO">&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="54"&gt;
    &lt;data&gt;
        &lt;aaa-encrypt-service-config xmlns="config:aaa:authn:encrypt:service:config"&gt;
            &lt;encrypt-type&gt;AES&lt;/encrypt-type&gt;
            &lt;encrypt-key-length&gt;128&lt;/encrypt-key-length&gt;
            &lt;password-length&gt;12&lt;/password-length&gt;
            &lt;cipher-transforms&gt;AES/GCM/NoPadding&lt;/cipher-transforms&gt;
            &lt;encrypt-key&gt;svW8eCV45iNA&lt;/encrypt-key&gt;
            &lt;encrypt-salt&gt;szGsvGrFGnYbd9nd1t9nEw==&lt;/encrypt-salt&gt;
            &lt;auth-tag-length&gt;128&lt;/auth-tag-length&gt;
            &lt;encrypt-method&gt;PBKDF2WithHmacSHA1&lt;/encrypt-method&gt;
            &lt;encrypt-iteration-count&gt;32768&lt;/encrypt-iteration-count&gt;
        &lt;/aaa-encrypt-service-config&gt;
        &lt;key-stores xmlns="urn:opendaylight:yang:aaa:cert:mdsal"&gt;
            &lt;id&gt;KeyStores:1&lt;/id&gt;
            &lt;ssl-data&gt;
                &lt;bundle-name&gt;opendaylight&lt;/bundle-name&gt;
                &lt;tls-protocols/&gt;
                &lt;odl-keystore&gt;
                    &lt;store-password&gt;szGsvGrFGnYbd9nd1t9nE/fx+V2RdCDYC56eieY+0NUj2isn/xZEgHOUDk8=&lt;/store-password&gt;
                    &lt;sign-alg&gt;SHA1WithRSAEncryption&lt;/sign-alg&gt;
                    &lt;validity&gt;365&lt;/validity&gt;
                    &lt;alias&gt;controller&lt;/alias&gt;
                    &lt;name&gt;ctl.jks&lt;/name&gt;
                    &lt;dname&gt;CN=ODL, OU=Dev, O=LinuxFoundation, L=QC Montreal, C=CA&lt;/dname&gt;
                    &lt;keystoreFile&gt;szGsvGrFGnYbd9nd1t9nE0JpQtr6AxLteOf9yUIRItqLm3NkTNx/el6TA99g1gQs8oNL0ip4IPpl4rt7rFRRPPBAYfnI5Hkh+b8tHGDNwygXVh0qPTd02Ju1oPl0gQiXDeG3LxTe8oV0ONxVMiVDPRLInTiudW5V+NAL0c/qNo47UDfypSDuyY7eUL/QqoheS+TBVtkEivw2fS5E+lNKVmSRnedcKds+JRGqsn0ie6kCPmdOS26Zo5s8D6M2tT+r5in4jHovTq6a3RAmy5ZEJJbHJx/m+Y3778MRBkcD2nV3THNE3WXHfY8z+tUfGap/IGFvqumYYtRL35QgVchzJa3JZ2mMxPc2WLe5i2J1nYXYU6QDbT3UoksnTVzBRz0eznEzQQs47v/7gSOqx+Xug8kld3PASYNi5fZD0YmZGe+lI8ON47+4URudcRM9QmzWRu2LhIpGk8Fk0ueaJh5QF0VbVHat5S7fi1fkSNf2wHTs2pFv75hWSsg+7KDTAgfExMImhBPJ+pc8raT7kLEYiBPXy8NMvlDSksgfvSIcyyharJNj8wtxEFkBVWeX0SFzwlZy9oICi+li5ZM8WhSAbtBGTbpBJ9ADwg8WZo7uznJx+rhIUrjoziNRYqUVp/euIq6rjbE/k6jZCtKTP/qoqy0lShP6M9GfuB6O1akHdOHMWOqX2Q6G8qdVPuyAshiJrIthlJEiY5LX8xhXOQDAuGvwB5hFN/aXa0bMksLEHsTKpXSRnhLCJQxzrKpSSIuQqMzsDUQJQMzch1NGpbSFDwOySU5aeyvsTo4AYPT6Xf6YhGsYDk39B6R/CFsBVO13/4SfkiINKvhpYwQ/vfftmmF/7SXYXp/YR7nffSZTr1ooWJHAaGzqAQw+it9HIaJd7IqTROyhS23F00eX3h/OVwbsBB6PmGXh0LvOoCEfctsl0hTpnouPExetsGBZ7dfPpQIK5UiizhBZjKfr1N3dRVawGP2tFckp3xB0Fr3W8nqRCcWxi5oDGtKcK+z5LinRpCeurFbtZwatTqgh1o/KRXdpQ9E+QmJuyIUnIjoxwuFejwHujtyJR+uAvC90T+G09PnaaMGALkmiJ3kiDn5waQup2qhptMUuF1ZjNirqcbAh7MoEtU02PCQAlBmV0D9Uvp/q9Iw3EFmWhfNT8w/Y03VHw2AK7DY94gJq0vmVUD96ahn4UvWXL5CjFyzXD8ikqdV0fx3zamP53xl6LhQUwBWwiaZVZ6qpfmuSfHRBoOKn5FGmIVpQtgs1i2OYsf8CFMdds6HkzCU9ZR5bcNIUz3U7KzxhaZNpj+tBPjCe5knbuvODRT9AIIZr5NL8zkfLG0R/DySEUJEP9MZFDzaYKqwZUQK9u9lyxXBdRZ/nJJVpYkbOdjraUZOn2wX1MOv768TylMxft2elpWtyo51E7XJca0zO3FT+T6dEDLNuLf70Tjf4ZKlXIs+rbMZRzJiNPU/gOOCncjGnQg7yVNt6CXFzLloYDKyI1+nXar0j8Y7aLeRw4ANqfONtf/a/feF1rxUgkr9kpwha7YR6ZbwLsgEqRGQ1yP0UUYTN4tW9P1fKN220ZErjmNLf5y9d4E1kw0JC9Aowy1OIPHC+GoIH2GXmLp6xrwtvDNX0N9GVVtWxGfdOuRunqus5wncxwKSsJHEV7gC7CttHVSQuYxf+qSVzxDZdZhrEFRDM+2ehQr+jYPjBFDfrFrZ6APcuc6eG8uNgDwFBIT/AvuHqnX/J/C5nmpguP7J8i+L6Tq/vaE06wHDJDHx4janBzQWz38QKtnFFVvSuYlPq4xpjc4XL0w==&lt;/keystoreFile&gt;
                    &lt;key-alg&gt;RSA&lt;/key-alg&gt;
                    &lt;keysize&gt;1024&lt;/keysize&gt;
                &lt;/odl-keystore&gt;
                &lt;cipher-suites&gt;
                    &lt;suiteName/&gt;
                &lt;/cipher-suites&gt;
                &lt;trust-keystore&gt;
                    &lt;keystoreFile&gt;szGsvGrFGnYbd9nd1t9nE0JpQtr6AxLteOf9yIktC+veMTpJpq+B4qQuq9ISdPV1uRcHSk71SvQM3Yb0MmEuAA==&lt;/keystoreFile&gt;
                    &lt;store-password&gt;szGsvGrFGnYbd9nd1t9nE/re1XnJbnW5IKOJusQBPKYGj7gRRA5Mm2KIwp4=&lt;/store-password&gt;
                    &lt;name&gt;truststore.jks&lt;/name&gt;
                &lt;/trust-keystore&gt;
            &lt;/ssl-data&gt;
        &lt;/key-stores&gt;
        &lt;people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:people"&gt;
            &lt;person&gt;
                &lt;id&gt;CUSTOLD&lt;/id&gt;
                &lt;age&gt;99&lt;/age&gt;
            &lt;/person&gt;
            &lt;person&gt;
                &lt;id&gt;CUSTMID&lt;/id&gt;
                &lt;age&gt;40&lt;/age&gt;
            &lt;/person&gt;
            &lt;person&gt;
                &lt;id&gt;CUSTOLD2&lt;/id&gt;
                &lt;age&gt;65&lt;/age&gt;
            &lt;/person&gt;
            &lt;person&gt;
                &lt;id&gt;CUSTYOUNG&lt;/id&gt;
                &lt;age&gt;27&lt;/age&gt;
            &lt;/person&gt;
        &lt;/people&gt;
        &lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;
            &lt;car-person&gt;
                &lt;car-id&gt;CAROLD2&lt;/car-id&gt;
                &lt;person-id&gt;CUSTOLD2&lt;/person-id&gt;
            &lt;/car-person&gt;
            &lt;car-person&gt;
                &lt;car-id&gt;CARYOUNG&lt;/car-id&gt;
                &lt;person-id&gt;CUSTYOUNG&lt;/person-id&gt;
            &lt;/car-person&gt;
            &lt;car-person&gt;
                &lt;car-id&gt;CARMID&lt;/car-id&gt;
                &lt;person-id&gt;CUSTMID&lt;/person-id&gt;
            &lt;/car-person&gt;
            &lt;car-person&gt;
                &lt;car-id&gt;CAROLD&lt;/car-id&gt;
                &lt;person-id&gt;CUSTOLD&lt;/person-id&gt;
            &lt;/car-person&gt;
        &lt;/car-people&gt;
        &lt;cars xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car"&gt;
            &lt;car-entry&gt;
                &lt;id&gt;CAROLD2&lt;/id&gt;
                &lt;model&gt;Camry&lt;/model&gt;
                &lt;year&gt;1982&lt;/year&gt;
                &lt;manufacturer&gt;Toyota&lt;/manufacturer&gt;
            &lt;/car-entry&gt;
            &lt;car-entry&gt;
                &lt;id&gt;CARYOUNG&lt;/id&gt;
                &lt;model&gt;Toyota Prius&lt;/model&gt;
                &lt;year&gt;2016&lt;/year&gt;
                &lt;manufacturer&gt;Toyota&lt;/manufacturer&gt;
                &lt;category&gt;sedan&lt;/category&gt;
            &lt;/car-entry&gt;
            &lt;car-entry&gt;
                &lt;id&gt;CARMID&lt;/id&gt;
                &lt;model&gt;Toyota Aurion&lt;/model&gt;
                &lt;year&gt;2006&lt;/year&gt;
                &lt;manufacturer&gt;Toyota&lt;/manufacturer&gt;
                &lt;category&gt;sedan&lt;/category&gt;
            &lt;/car-entry&gt;
            &lt;car-entry&gt;
                &lt;id&gt;CAROLD&lt;/id&gt;
                &lt;year&gt;1950&lt;/year&gt;
                &lt;manufacturer&gt;Ford&lt;/manufacturer&gt;
            &lt;/car-entry&gt;
        &lt;/cars&gt;
    &lt;/data&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<msg time="2026-08-23T02:07:46.822795" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="54"&gt;
    &lt;data&gt;
        &lt;aaa-encrypt-service-config xmlns="config:aaa...</msg>
<var>${reply}</var>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:46.755638" elapsed="0.067186"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:46.822893" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:07:46.823046" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="54"&gt;
    &lt;data&gt;
        &lt;aaa-encrypt-service-config xmlns="config:aaa...</msg>
<var>${reply}</var>
<arg>${request}</arg>
<doc>Send message to Netconf connection and get the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:46.751438" elapsed="0.071637"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:46.823119" elapsed="0.000025"/>
</return>
<msg time="2026-08-23T02:07:46.823261" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="54"&gt;
    &lt;data&gt;
        &lt;aaa-encrypt-service-config xmlns="config:aaa...</msg>
<var>${reply}</var>
<arg>merge-multiple-check</arg>
<doc>Load a message from the data file set, send it to Netconf and return the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:46.750035" elapsed="0.073254"/>
</kw>
<kw name="Check_Multiple_Batch_Data_Present">
<kw name="Check_Multiple_Batch_Data">
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CAROLD&lt;/id&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:46.824538" elapsed="0.000321"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;CAROLD&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:46.824109" elapsed="0.000806"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CUSTOLD&lt;/id&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:46.825475" elapsed="0.000283"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;CUSTOLD&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:46.825057" elapsed="0.000754"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;car-id&gt;CAROLD&lt;/car-id&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:46.826419" elapsed="0.000285"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;car-id&gt;CAROLD&lt;/car-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:46.825970" elapsed="0.000788"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUSTOLD&lt;/person-id&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:46.827334" elapsed="0.000281"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUSTOLD&lt;/person-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:46.826916" elapsed="0.000753"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CARYOUNG&lt;/id&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:46.828326" elapsed="0.000280"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;CARYOUNG&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:46.827902" elapsed="0.000758"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CUSTYOUNG&lt;/id&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:46.829236" elapsed="0.000281"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;CUSTYOUNG&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:46.828802" elapsed="0.000769"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;car-id&gt;CARYOUNG&lt;/car-id&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:46.830166" elapsed="0.000286"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;car-id&gt;CARYOUNG&lt;/car-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:46.829712" elapsed="0.000794"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUSTYOUNG&lt;/person-id&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:46.831089" elapsed="0.000283"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUSTYOUNG&lt;/person-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:46.830647" elapsed="0.000779"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CARMID&lt;/id&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:46.832001" elapsed="0.000282"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;CARMID&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:46.831567" elapsed="0.000770"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CUSTMID&lt;/id&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:46.832908" elapsed="0.000281"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;CUSTMID&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:46.832478" elapsed="0.000766"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;car-id&gt;CARMID&lt;/car-id&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:46.833796" elapsed="0.000305"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;car-id&gt;CARMID&lt;/car-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:46.833384" elapsed="0.000771"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUSTMID&lt;/person-id&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:46.834707" elapsed="0.000301"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUSTMID&lt;/person-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:46.834298" elapsed="0.000763"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CAROLD2&lt;/id&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:46.835658" elapsed="0.000298"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;CAROLD2&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:46.835242" elapsed="0.000769"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CUSTOLD2&lt;/id&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:46.836566" elapsed="0.000296"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;id&gt;CUSTOLD2&lt;/id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:46.836152" elapsed="0.000766"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;car-id&gt;CAROLD2&lt;/car-id&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:46.837476" elapsed="0.000279"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;car-id&gt;CAROLD2&lt;/car-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:46.837060" elapsed="0.000749"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUSTOLD2&lt;/person-id&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:46.838413" elapsed="0.000281"/>
</kw>
<arg>${keyword}</arg>
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUSTOLD2&lt;/person-id&gt;</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:46.837967" elapsed="0.000782"/>
</kw>
<arg>${reply}</arg>
<arg>BuiltIn.Should_Contain</arg>
<status status="PASS" start="2026-08-23T02:07:46.823771" elapsed="0.015035"/>
</kw>
<arg>${reply}</arg>
<status status="PASS" start="2026-08-23T02:07:46.823411" elapsed="0.015467"/>
</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-08-23T02:07:46.840198" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:46.839668" elapsed="0.000593"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:46.839650" elapsed="0.000636"/>
</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-08-23T02:07:46.840421" elapsed="0.000312"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:07:46.845430" 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-08-23T02:07:46.845032" elapsed="0.000426"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-08-23T02:07:46.845673" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:07:46.845532" elapsed="0.000197"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:46.845513" elapsed="0.000240"/>
</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-08-23T02:07:46.845907" elapsed="0.000031"/>
</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-08-23T02:07:46.846075" 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-08-23T02:07:46.846230" 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-08-23T02:07:46.846382" 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-08-23T02:07:46.846531" 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-08-23T02:07:46.846681" 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-08-23T02:07:46.846850" 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-08-23T02:07:46.844724" elapsed="0.002203"/>
</kw>
<status status="PASS" start="2026-08-23T02:07:46.839463" elapsed="0.007514"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-08-23T02:07:46.839119" elapsed="0.007898"/>
</kw>
<doc>Check that the 3 subelements are now present in the running configuration.</doc>
<status status="PASS" start="2026-08-23T02:07:46.648854" elapsed="0.198200"/>
</test>
<test id="s1-s3-s1-t32" name="Edit_Multiple_Merge_Data" line="200">
<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-08-23T02:07:46.850046" elapsed="0.000208"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:07:46.849761" elapsed="0.000547"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:46.851302" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:46.851193" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:46.851174" elapsed="0.000196"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:46.855800" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:46.855692" elapsed="0.000169"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:46.855674" elapsed="0.000211"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:46.856827" 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-08-23T02:07:46.856452" elapsed="0.000419"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:07:46.857311" 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-08-23T02:07:46.857019" elapsed="0.000318"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:07:46.857382" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:07:46.857535" 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-08-23T02:07:46.856093" elapsed="0.001467"/>
</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-08-23T02:07:46.862761" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:46.862652" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:46.862632" 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-08-23T02:07:46.864016" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:46.863908" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:46.863889" elapsed="0.000194"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:07:46.864563" level="INFO">${karaf_connection_index} = 18</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-08-23T02:07:46.864214" elapsed="0.000376"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:46.864996" level="INFO">${current_connection_index} = 23</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-08-23T02:07:46.864734" elapsed="0.000288"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:46.895857" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:46.865541" elapsed="0.030480"/>
</kw>
<msg time="2026-08-23T02:07:46.896188" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:07:46.896234" 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 "n "e "t "c "o "n "f "...</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-08-23T02:07:46.865168" elapsed="0.031104"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:07:46.914956" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "E "d "i "t "_ "M "u "l "t "i "p "l "e "_ "M "e "r "g "e "_ "D "a "t "a "[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-08-23T02:07:46.896805" elapsed="0.018325"/>
</kw>
<msg time="2026-08-23T02:07:46.915296" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:07:46.915342" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "E "d "i "t "_ "M "u "l "t "i "p "l ...</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-08-23T02:07:46.896428" elapsed="0.018950"/>
</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-08-23T02:07:46.915658" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:46.915452" elapsed="0.000280"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:46.915433" elapsed="0.000324"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:46.916283" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "E "d "i "t "_ "M "u "l "t "i "p "l "e "_ "M "e "r "g "e "_ "D "a "t "a "[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-08-23T02:07:46.915913" elapsed="0.000438"/>
</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-08-23T02:07:46.916616" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:46.916415" elapsed="0.000275"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:46.916398" elapsed="0.000316"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:07:46.916780" 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-08-23T02:07:46.919594" elapsed="0.000146"/>
</kw>
<msg time="2026-08-23T02:07:46.919810" 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-08-23T02:07:46.918969" elapsed="0.000958"/>
</kw>
<kw name="Open 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-08-23T02:07:46.920702" elapsed="0.000037"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:46.921555" elapsed="0.000036"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:07:46.917624" elapsed="0.004045"/>
</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-08-23T02:07:46.917045" elapsed="0.004739"/>
</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-08-23T02:07:46.863587" elapsed="0.058321"/>
</kw>
<msg time="2026-08-23T02:07:46.922001" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:46.922044" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "E "d "i "t "_ "M "u "l "t "i "p "l ...</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-08-23T02:07:46.862987" elapsed="0.059093"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:07:46.922260" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-08-23T02:07:46.922155" elapsed="0.000163"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:46.922137" elapsed="0.000204"/>
</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-08-23T02:07:46.922710" 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-08-23T02:07:46.923072" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:07:46.923143" 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-08-23T02:07:46.862314" elapsed="0.060936"/>
</kw>
<msg time="2026-08-23T02:07:46.923341" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:46.923385" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "E "d "i "t "_ "M "u "l "t "i "p "l ...</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-08-23T02:07:46.857930" elapsed="0.065491"/>
</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-08-23T02:07:46.923729" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:46.923495" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:46.923478" elapsed="0.000328"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:07:46.857776" elapsed="0.066053"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:07:46.857611" elapsed="0.066295"/>
</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-08-23T02:07:46.855337" elapsed="0.068622"/>
</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-08-23T02:07:46.850905" elapsed="0.073108"/>
</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-08-23T02:07:46.850483" elapsed="0.073574"/>
</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-08-23T02:07:46.847708" elapsed="0.076398"/>
</kw>
<kw name="Perform_Test">
<kw name="Load_And_Send_Message">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:46.925703" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-multiple-edit-request.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-multiple-edit-request.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:46.925876" level="INFO">${data} = &lt;rpc message-id="abc" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
&lt;edit-config&gt;
    &lt;target&gt;
        &lt;candidate/&gt;
    &lt;/target&gt;
    &lt;test-option&gt;
        set
    &lt;/test-option&gt;
    &lt;default-opera...</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:46.925298" elapsed="0.000608"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:46.925955" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:46.926105" level="INFO">${request} = &lt;rpc message-id="abc" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
&lt;edit-config&gt;
    &lt;target&gt;
        &lt;candidate/&gt;
    &lt;/target&gt;
    &lt;test-option&gt;
        set
    &lt;/test-option&gt;
    &lt;default-opera...</msg>
<var>${request}</var>
<arg>${name}-request</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:46.924829" elapsed="0.001335"/>
</kw>
<kw name="Send_Message">
<kw name="Transmit_Message">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:46.928779" level="INFO">&lt;rpc message-id="abc" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;</msg>
<arg>${message}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:46.926907" elapsed="0.001941"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:46.929348" level="INFO">&lt;edit-config&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:46.928992" elapsed="0.000407"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:46.934571" level="INFO">&lt;target&gt;
        &lt;candidate/&gt;
    &lt;/target&gt;
    &lt;test-option&gt;
        set
    &lt;/test-option&gt;
    &lt;default-operation&gt;merge&lt;/default-operation&gt;
    &lt;config&gt;
      &lt;cars xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car"&gt;
        &lt;car-entry&gt;
          &lt;id&gt;test&lt;/id&gt;
          &lt;model&gt;Dixi&lt;/model&gt;
          &lt;manufacturer&gt;BMW&lt;/manufacturer&gt;
          &lt;year&gt;1928&lt;/year&gt;
        &lt;/car-entry&gt;
      &lt;/cars&gt;
    &lt;/config&gt;
&lt;/edit-config&gt;
&lt;/rpc&gt;

]]&gt;]]&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:46.929537" elapsed="0.005102"/>
</kw>
<arg>${message}</arg>
<doc>Transmit message to Netconf connection and discard the echo of the message.</doc>
<status status="PASS" start="2026-08-23T02:07:46.926599" elapsed="0.008097"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:46.936536" level="INFO">&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="abc"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<msg time="2026-08-23T02:07:46.936625" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="abc"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:46.934851" elapsed="0.001801"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:46.936697" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:46.936857" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="abc"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${request}</arg>
<doc>Send message to Netconf connection and get the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:46.926309" elapsed="0.010577"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:46.936930" elapsed="0.000025"/>
</return>
<msg time="2026-08-23T02:07:46.937071" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="abc"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${actual}</var>
<arg>${name}</arg>
<doc>Load a message from the data file set, send it to Netconf and return the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:46.924540" elapsed="0.012558"/>
</kw>
<kw name="Load_Expected_Reply">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:46.938076" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-multiple-edit-reply.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-multiple-edit-reply.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:46.938202" level="INFO">${data} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="abc"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:46.937864" elapsed="0.000365"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:46.938275" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:07:46.938422" level="INFO">${expected_reply} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="abc"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected_reply}</var>
<arg>${name}-reply</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:46.937543" elapsed="0.000905"/>
</kw>
<return>
<value>${expected_reply}</value>
<status status="PASS" start="2026-08-23T02:07:46.938491" elapsed="0.000025"/>
</return>
<msg time="2026-08-23T02:07:46.938633" level="INFO">${expected} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="abc"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected}</var>
<arg>${name}</arg>
<doc>Load the expected reply from the data file set and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:46.937245" elapsed="0.001414"/>
</kw>
<kw name="Remove String" owner="String">
<msg time="2026-08-23T02:07:46.939015" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="abc"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>]]&gt;]]&gt;</arg>
<doc>Removes all ``removables`` from the given ``string``.</doc>
<status status="PASS" start="2026-08-23T02:07:46.938800" elapsed="0.000244"/>
</kw>
<kw name="Strip String" owner="String">
<msg time="2026-08-23T02:07:46.939407" level="INFO">${actual} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="abc"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>mode=both</arg>
<doc>Remove leading and/or trailing whitespaces from the given string.</doc>
<status status="PASS" start="2026-08-23T02:07:46.939186" elapsed="0.000249"/>
</kw>
<kw name="Elements Should Be Equal" owner="XML">
<arg>${actual}</arg>
<arg>${expected}</arg>
<arg>normalize_whitespace=True</arg>
<doc>Verifies that the given ``source`` element is equal to ``expected``.</doc>
<status status="PASS" start="2026-08-23T02:07:46.939579" elapsed="0.000442"/>
</kw>
<return>
<value>${actual}</value>
<status status="PASS" start="2026-08-23T02:07:46.940074" elapsed="0.000027"/>
</return>
<arg>merge-multiple-edit</arg>
<doc>Load and send the request from the dataset and compare the returned reply to the one stored in the dataset.</doc>
<status status="PASS" start="2026-08-23T02:07:46.924266" elapsed="0.015931"/>
</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-08-23T02:07:46.941393" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:46.941009" elapsed="0.000493"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:46.940990" 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-08-23T02:07:46.941668" elapsed="0.000335"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:07:46.948093" 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-08-23T02:07:46.947674" elapsed="0.000447"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-08-23T02:07:46.948334" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-08-23T02:07:46.948194" elapsed="0.000196"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:46.948175" 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-08-23T02:07:46.948551" 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-08-23T02:07:46.948706" 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-08-23T02:07:46.948877" 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-08-23T02:07:46.949040" 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-08-23T02:07:46.949200" 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-08-23T02:07:46.949353" 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-08-23T02:07:46.949500" 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-08-23T02:07:46.947382" elapsed="0.002193"/>
</kw>
<status status="PASS" start="2026-08-23T02:07:46.940783" elapsed="0.008840"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-08-23T02:07:46.940439" elapsed="0.009224"/>
</kw>
<doc>Add another subelement named "test" to the element and check the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:46.847243" elapsed="0.102457"/>
</test>
<test id="s1-s3-s1-t33" name="Commit_Multiple_Modules_Merge_Edit" line="204">
<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-08-23T02:07:46.952705" elapsed="0.000227"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:07:46.952459" elapsed="0.000548"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:46.953965" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:46.953854" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:46.953819" elapsed="0.000215"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:46.958464" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:46.958357" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:46.958339" elapsed="0.000193"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:46.959490" 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-08-23T02:07:46.959116" elapsed="0.000400"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:07:46.959970" 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-08-23T02:07:46.959662" elapsed="0.000335"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:07:46.960042" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:46.960193" 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-08-23T02:07:46.958740" elapsed="0.001478"/>
</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-08-23T02:07:46.965399" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:46.965292" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:46.965274" 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-08-23T02:07:46.966629" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:46.966524" elapsed="0.000183"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:46.966505" elapsed="0.000228"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:07:46.967254" level="INFO">${karaf_connection_index} = 18</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-08-23T02:07:46.966897" elapsed="0.000383"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:46.967668" level="INFO">${current_connection_index} = 23</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-08-23T02:07:46.967426" elapsed="0.000268"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:47.000249" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:46.968237" elapsed="0.032181"/>
</kw>
<msg time="2026-08-23T02:07:47.000615" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:07:47.000662" 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 "n "e "t "c "o "n "f "...</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-08-23T02:07:46.967859" elapsed="0.032845"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:07:47.021455" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "o "m "m "i "t "_ "M "u "l "t "i "p "l "e "_ "M "o "d "u "l "e "s "_ "M "e "r "g "e "_ "E "d "i "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-08-23T02:07:47.001288" elapsed="0.020345"/>
</kw>
<msg time="2026-08-23T02:07:47.021802" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:07:47.021870" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "o "m "m "i "t "_ "M "u "l "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-08-23T02:07:47.000898" elapsed="0.021012"/>
</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-08-23T02:07:47.022198" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:47.021988" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.021968" elapsed="0.000333"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:47.022806" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "o "m "m "i "t "_ "M "u "l "t "i "p "l "e "_ "M "o "d "u "l "e "s "_ "M "e "r "g "e "_ "E "d "i "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-08-23T02:07:47.022431" elapsed="0.000468"/>
</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-08-23T02:07:47.023168" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:47.022966" elapsed="0.000277"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.022948" elapsed="0.000320"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:07:47.023304" 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-08-23T02:07:47.026173" elapsed="0.000149"/>
</kw>
<msg time="2026-08-23T02:07:47.026392" 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-08-23T02:07:47.025512" elapsed="0.000978"/>
</kw>
<kw name="Open 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-08-23T02:07:47.027303" elapsed="0.000037"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:47.028126" elapsed="0.000038"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:07:47.024142" elapsed="0.004102"/>
</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-08-23T02:07:47.023552" elapsed="0.004818"/>
</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-08-23T02:07:46.966227" elapsed="0.062247"/>
</kw>
<msg time="2026-08-23T02:07:47.028568" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:47.028611" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "o "m "m "i "t "_ "M "u "l "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-08-23T02:07:46.965606" elapsed="0.063042"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:07:47.029007" elapsed="0.000030"/>
</return>
<status status="PASS" start="2026-08-23T02:07:47.028723" elapsed="0.000350"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.028705" elapsed="0.000391"/>
</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-08-23T02:07:47.029471" 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-08-23T02:07:47.029827" elapsed="0.000042"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:07:47.029917" 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-08-23T02:07:46.964949" elapsed="0.065076"/>
</kw>
<msg time="2026-08-23T02:07:47.030117" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:47.030160" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "o "m "m "i "t "_ "M "u "l "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-08-23T02:07:46.960557" elapsed="0.069640"/>
</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-08-23T02:07:47.030508" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:47.030271" elapsed="0.000290"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.030253" elapsed="0.000332"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:07:46.960431" elapsed="0.070177"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:07:46.960268" elapsed="0.070370"/>
</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-08-23T02:07:46.958003" elapsed="0.072687"/>
</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-08-23T02:07:46.953556" elapsed="0.077189"/>
</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-08-23T02:07:46.953145" elapsed="0.077644"/>
</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-08-23T02:07:46.950494" elapsed="0.080385"/>
</kw>
<kw name="Perform_Test">
<kw name="Load_And_Send_Message">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:47.032348" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-multiple-edit-commit-request.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-multiple-edit-commit-request.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:47.032530" level="INFO">${data} = &lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="40"&gt;
&lt;commit/&gt;
&lt;/rpc&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:47.031925" elapsed="0.000633"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:47.032606" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:47.032759" level="INFO">${request} = &lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="40"&gt;
&lt;commit/&gt;
&lt;/rpc&gt;
</msg>
<var>${request}</var>
<arg>${name}-request</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:47.031605" elapsed="0.001180"/>
</kw>
<kw name="Send_Message">
<kw name="Transmit_Message">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:47.035124" level="INFO">&lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="40"&gt;</msg>
<arg>${message}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:47.033530" elapsed="0.001651"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:47.035633" level="INFO">&lt;commit/&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:47.035327" elapsed="0.000357"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:47.036254" level="INFO">&lt;/rpc&gt;

]]&gt;]]&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:47.035830" elapsed="0.000476"/>
</kw>
<arg>${message}</arg>
<doc>Transmit message to Netconf connection and discard the echo of the message.</doc>
<status status="PASS" start="2026-08-23T02:07:47.033237" elapsed="0.003126"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:47.043319" level="INFO">&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="40"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<msg time="2026-08-23T02:07:47.043413" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="40"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:47.036500" elapsed="0.006941"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:47.043487" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:07:47.043636" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="40"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${request}</arg>
<doc>Send message to Netconf connection and get the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:47.032947" elapsed="0.010716"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:47.043706" elapsed="0.000025"/>
</return>
<msg time="2026-08-23T02:07:47.043860" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="40"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${actual}</var>
<arg>${name}</arg>
<doc>Load a message from the data file set, send it to Netconf and return the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:47.031318" elapsed="0.012572"/>
</kw>
<kw name="Load_Expected_Reply">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:47.044879" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-multiple-edit-commit-reply.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-multiple-edit-commit-reply.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:47.045048" level="INFO">${data} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="40"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:47.044651" elapsed="0.000435"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:47.045135" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:07:47.045287" level="INFO">${expected_reply} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="40"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected_reply}</var>
<arg>${name}-reply</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:47.044345" elapsed="0.000970"/>
</kw>
<return>
<value>${expected_reply}</value>
<status status="PASS" start="2026-08-23T02:07:47.045357" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:07:47.045503" level="INFO">${expected} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="40"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected}</var>
<arg>${name}</arg>
<doc>Load the expected reply from the data file set and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:47.044027" elapsed="0.001507"/>
</kw>
<kw name="Remove String" owner="String">
<msg time="2026-08-23T02:07:47.045897" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="40"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>]]&gt;]]&gt;</arg>
<doc>Removes all ``removables`` from the given ``string``.</doc>
<status status="PASS" start="2026-08-23T02:07:47.045677" elapsed="0.000249"/>
</kw>
<kw name="Strip String" owner="String">
<msg time="2026-08-23T02:07:47.046291" level="INFO">${actual} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="40"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>mode=both</arg>
<doc>Remove leading and/or trailing whitespaces from the given string.</doc>
<status status="PASS" start="2026-08-23T02:07:47.046070" elapsed="0.000250"/>
</kw>
<kw name="Elements Should Be Equal" owner="XML">
<arg>${actual}</arg>
<arg>${expected}</arg>
<arg>normalize_whitespace=True</arg>
<doc>Verifies that the given ``source`` element is equal to ``expected``.</doc>
<status status="PASS" start="2026-08-23T02:07:47.046462" elapsed="0.000454"/>
</kw>
<return>
<value>${actual}</value>
<status status="PASS" start="2026-08-23T02:07:47.046969" elapsed="0.000028"/>
</return>
<arg>merge-multiple-edit-commit</arg>
<doc>Load and send the request from the dataset and compare the returned reply to the one stored in the dataset.</doc>
<status status="PASS" start="2026-08-23T02:07:47.031041" elapsed="0.016052"/>
</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-08-23T02:07:47.048315" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:47.047902" elapsed="0.000477"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.047883" elapsed="0.000522"/>
</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-08-23T02:07:47.048551" elapsed="0.000346"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:07:47.053684" 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-08-23T02:07:47.053280" elapsed="0.000431"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-08-23T02:07:47.053959" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:07:47.053785" elapsed="0.000231"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.053767" elapsed="0.000275"/>
</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-08-23T02:07:47.054178" 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-08-23T02:07:47.054334" 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-08-23T02:07:47.054490" elapsed="0.000019"/>
</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-08-23T02:07:47.054640" 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-08-23T02:07:47.054791" 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-08-23T02:07:47.054960" 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-08-23T02:07:47.055110" 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-08-23T02:07:47.052987" elapsed="0.002198"/>
</kw>
<status status="PASS" start="2026-08-23T02:07:47.047676" elapsed="0.007559"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-08-23T02:07:47.047338" elapsed="0.007937"/>
</kw>
<doc>Commit the addition of the "test" subelement and check the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:46.949973" elapsed="0.105375"/>
</test>
<test id="s1-s3-s1-t34" name="Check_Multiple_Modules_Merge_Edit" line="208">
<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-08-23T02:07:47.058420" elapsed="0.000208"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:07:47.058173" elapsed="0.000509"/>
</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-08-23T02:07:47.059627" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:47.059520" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.059502" 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-08-23T02:07:47.064178" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:47.064072" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.064053" elapsed="0.000196"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:47.065215" 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-08-23T02:07:47.064817" elapsed="0.000426"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:07:47.065684" 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-08-23T02:07:47.065391" elapsed="0.000319"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:07:47.065755" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:47.065927" 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-08-23T02:07:47.064456" elapsed="0.001497"/>
</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-08-23T02:07:47.071192" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:47.071084" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.071065" elapsed="0.000197"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:47.072471" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:47.072364" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.072346" elapsed="0.000193"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:07:47.073048" level="INFO">${karaf_connection_index} = 18</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-08-23T02:07:47.072671" elapsed="0.000403"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:47.073469" level="INFO">${current_connection_index} = 23</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-08-23T02:07:47.073226" elapsed="0.000268"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:47.104224" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:47.074072" elapsed="0.030324"/>
</kw>
<msg time="2026-08-23T02:07:47.104567" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:07:47.104618" 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 "n "e "t "c "o "n "f "...</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-08-23T02:07:47.073639" elapsed="0.031016"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:07:47.127356" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "h "e "c "k "_ "M "u "l "t "i "p "l "e "_ "M "o "d "u "l "e "s "_ "M "e "r "g "e "_ "E "d "i "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-08-23T02:07:47.105210" elapsed="0.022338"/>
</kw>
<msg time="2026-08-23T02:07:47.127719" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:07:47.127764" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "h "e "c "k "_ "M "u "l "t "i "p ...</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-08-23T02:07:47.104812" elapsed="0.022990"/>
</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-08-23T02:07:47.128113" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:47.127902" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.127882" elapsed="0.000332"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:47.128716" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "h "e "c "k "_ "M "u "l "t "i "p "l "e "_ "M "o "d "u "l "e "s "_ "M "e "r "g "e "_ "E "d "i "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-08-23T02:07:47.128346" elapsed="0.000507"/>
</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-08-23T02:07:47.129125" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:47.128922" elapsed="0.000278"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.128904" elapsed="0.000322"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:07:47.129259" 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-08-23T02:07:47.132106" elapsed="0.000149"/>
</kw>
<msg time="2026-08-23T02:07:47.132325" 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-08-23T02:07:47.131446" elapsed="0.000976"/>
</kw>
<kw name="Open 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-08-23T02:07:47.133246" elapsed="0.000038"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:47.134080" elapsed="0.000038"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:07:47.130091" elapsed="0.004106"/>
</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-08-23T02:07:47.129502" elapsed="0.004808"/>
</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-08-23T02:07:47.072061" elapsed="0.062348"/>
</kw>
<msg time="2026-08-23T02:07:47.134499" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:47.134543" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "h "e "c "k "_ "M "u "l "t "i "p ...</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-08-23T02:07:47.071402" elapsed="0.063178"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:07:47.134761" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:07:47.134655" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.134636" elapsed="0.000388"/>
</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-08-23T02:07:47.135420" 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-08-23T02:07:47.135748" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:07:47.135819" elapsed="0.000034"/>
</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-08-23T02:07:47.070730" elapsed="0.065218"/>
</kw>
<msg time="2026-08-23T02:07:47.136041" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:47.136084" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "h "e "c "k "_ "M "u "l "t "i "p ...</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-08-23T02:07:47.066304" elapsed="0.069818"/>
</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-08-23T02:07:47.136433" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:47.136196" elapsed="0.000290"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.136179" elapsed="0.000330"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:07:47.066174" elapsed="0.070358"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:07:47.066005" elapsed="0.070557"/>
</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-08-23T02:07:47.063682" elapsed="0.072933"/>
</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-08-23T02:07:47.059238" elapsed="0.077431"/>
</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-08-23T02:07:47.058816" elapsed="0.077897"/>
</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-08-23T02:07:47.056200" elapsed="0.080564"/>
</kw>
<kw name="Load_And_Send_Message">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:47.137789" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-multiple-edit-check-request.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-multiple-edit-check-request.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:47.137938" level="INFO">${data} = &lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="41"&gt;
    &lt;get-config&gt;
        &lt;source&gt;
            &lt;running/&gt;
        &lt;/source&gt;
    &lt;/get-config&gt;
&lt;/rpc&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:47.137530" elapsed="0.000467"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:47.138045" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:47.138194" level="INFO">${request} = &lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="41"&gt;
    &lt;get-config&gt;
        &lt;source&gt;
            &lt;running/&gt;
        &lt;/source&gt;
    &lt;/get-config&gt;
&lt;/rpc&gt;
</msg>
<var>${request}</var>
<arg>${name}-request</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:47.137222" elapsed="0.000999"/>
</kw>
<kw name="Send_Message">
<kw name="Transmit_Message">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:47.141112" level="INFO">&lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="41"&gt;</msg>
<arg>${message}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:47.139173" elapsed="0.001997"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:47.141676" level="INFO">&lt;get-config&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:47.141313" elapsed="0.000414"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:47.142918" level="INFO">&lt;source&gt;
            &lt;running/&gt;
        &lt;/source&gt;
    &lt;/get-config&gt;
&lt;/rpc&gt;

]]&gt;]]&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:47.141882" elapsed="0.001091"/>
</kw>
<arg>${message}</arg>
<doc>Transmit message to Netconf connection and discard the echo of the message.</doc>
<status status="PASS" start="2026-08-23T02:07:47.138871" elapsed="0.004159"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:47.217390" level="INFO">&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="41"&gt;
    &lt;data&gt;
        &lt;aaa-encrypt-service-config xmlns="config:aaa:authn:encrypt:service:config"&gt;
            &lt;encrypt-type&gt;AES&lt;/encrypt-type&gt;
            &lt;encrypt-key-length&gt;128&lt;/encrypt-key-length&gt;
            &lt;password-length&gt;12&lt;/password-length&gt;
            &lt;cipher-transforms&gt;AES/GCM/NoPadding&lt;/cipher-transforms&gt;
            &lt;encrypt-key&gt;svW8eCV45iNA&lt;/encrypt-key&gt;
            &lt;encrypt-salt&gt;szGsvGrFGnYbd9nd1t9nEw==&lt;/encrypt-salt&gt;
            &lt;auth-tag-length&gt;128&lt;/auth-tag-length&gt;
            &lt;encrypt-method&gt;PBKDF2WithHmacSHA1&lt;/encrypt-method&gt;
            &lt;encrypt-iteration-count&gt;32768&lt;/encrypt-iteration-count&gt;
        &lt;/aaa-encrypt-service-config&gt;
        &lt;key-stores xmlns="urn:opendaylight:yang:aaa:cert:mdsal"&gt;
            &lt;id&gt;KeyStores:1&lt;/id&gt;
            &lt;ssl-data&gt;
                &lt;bundle-name&gt;opendaylight&lt;/bundle-name&gt;
                &lt;tls-protocols/&gt;
                &lt;odl-keystore&gt;
                    &lt;store-password&gt;szGsvGrFGnYbd9nd1t9nE/fx+V2RdCDYC56eieY+0NUj2isn/xZEgHOUDk8=&lt;/store-password&gt;
                    &lt;sign-alg&gt;SHA1WithRSAEncryption&lt;/sign-alg&gt;
                    &lt;validity&gt;365&lt;/validity&gt;
                    &lt;alias&gt;controller&lt;/alias&gt;
                    &lt;name&gt;ctl.jks&lt;/name&gt;
                    &lt;dname&gt;CN=ODL, OU=Dev, O=LinuxFoundation, L=QC Montreal, C=CA&lt;/dname&gt;
                    &lt;keystoreFile&gt;szGsvGrFGnYbd9nd1t9nE0JpQtr6AxLteOf9yUIRItqLm3NkTNx/el6TA99g1gQs8oNL0ip4IPpl4rt7rFRRPPBAYfnI5Hkh+b8tHGDNwygXVh0qPTd02Ju1oPl0gQiXDeG3LxTe8oV0ONxVMiVDPRLInTiudW5V+NAL0c/qNo47UDfypSDuyY7eUL/QqoheS+TBVtkEivw2fS5E+lNKVmSRnedcKds+JRGqsn0ie6kCPmdOS26Zo5s8D6M2tT+r5in4jHovTq6a3RAmy5ZEJJbHJx/m+Y3778MRBkcD2nV3THNE3WXHfY8z+tUfGap/IGFvqumYYtRL35QgVchzJa3JZ2mMxPc2WLe5i2J1nYXYU6QDbT3UoksnTVzBRz0eznEzQQs47v/7gSOqx+Xug8kld3PASYNi5fZD0YmZGe+lI8ON47+4URudcRM9QmzWRu2LhIpGk8Fk0ueaJh5QF0VbVHat5S7fi1fkSNf2wHTs2pFv75hWSsg+7KDTAgfExMImhBPJ+pc8raT7kLEYiBPXy8NMvlDSksgfvSIcyyharJNj8wtxEFkBVWeX0SFzwlZy9oICi+li5ZM8WhSAbtBGTbpBJ9ADwg8WZo7uznJx+rhIUrjoziNRYqUVp/euIq6rjbE/k6jZCtKTP/qoqy0lShP6M9GfuB6O1akHdOHMWOqX2Q6G8qdVPuyAshiJrIthlJEiY5LX8xhXOQDAuGvwB5hFN/aXa0bMksLEHsTKpXSRnhLCJQxzrKpSSIuQqMzsDUQJQMzch1NGpbSFDwOySU5aeyvsTo4AYPT6Xf6YhGsYDk39B6R/CFsBVO13/4SfkiINKvhpYwQ/vfftmmF/7SXYXp/YR7nffSZTr1ooWJHAaGzqAQw+it9HIaJd7IqTROyhS23F00eX3h/OVwbsBB6PmGXh0LvOoCEfctsl0hTpnouPExetsGBZ7dfPpQIK5UiizhBZjKfr1N3dRVawGP2tFckp3xB0Fr3W8nqRCcWxi5oDGtKcK+z5LinRpCeurFbtZwatTqgh1o/KRXdpQ9E+QmJuyIUnIjoxwuFejwHujtyJR+uAvC90T+G09PnaaMGALkmiJ3kiDn5waQup2qhptMUuF1ZjNirqcbAh7MoEtU02PCQAlBmV0D9Uvp/q9Iw3EFmWhfNT8w/Y03VHw2AK7DY94gJq0vmVUD96ahn4UvWXL5CjFyzXD8ikqdV0fx3zamP53xl6LhQUwBWwiaZVZ6qpfmuSfHRBoOKn5FGmIVpQtgs1i2OYsf8CFMdds6HkzCU9ZR5bcNIUz3U7KzxhaZNpj+tBPjCe5knbuvODRT9AIIZr5NL8zkfLG0R/DySEUJEP9MZFDzaYKqwZUQK9u9lyxXBdRZ/nJJVpYkbOdjraUZOn2wX1MOv768TylMxft2elpWtyo51E7XJca0zO3FT+T6dEDLNuLf70Tjf4ZKlXIs+rbMZRzJiNPU/gOOCncjGnQg7yVNt6CXFzLloYDKyI1+nXar0j8Y7aLeRw4ANqfONtf/a/feF1rxUgkr9kpwha7YR6ZbwLsgEqRGQ1yP0UUYTN4tW9P1fKN220ZErjmNLf5y9d4E1kw0JC9Aowy1OIPHC+GoIH2GXmLp6xrwtvDNX0N9GVVtWxGfdOuRunqus5wncxwKSsJHEV7gC7CttHVSQuYxf+qSVzxDZdZhrEFRDM+2ehQr+jYPjBFDfrFrZ6APcuc6eG8uNgDwFBIT/AvuHqnX/J/C5nmpguP7J8i+L6Tq/vaE06wHDJDHx4janBzQWz38QKtnFFVvSuYlPq4xpjc4XL0w==&lt;/keystoreFile&gt;
                    &lt;key-alg&gt;RSA&lt;/key-alg&gt;
                    &lt;keysize&gt;1024&lt;/keysize&gt;
                &lt;/odl-keystore&gt;
                &lt;cipher-suites&gt;
                    &lt;suiteName/&gt;
                &lt;/cipher-suites&gt;
                &lt;trust-keystore&gt;
                    &lt;keystoreFile&gt;szGsvGrFGnYbd9nd1t9nE0JpQtr6AxLteOf9yIktC+veMTpJpq+B4qQuq9ISdPV1uRcHSk71SvQM3Yb0MmEuAA==&lt;/keystoreFile&gt;
                    &lt;store-password&gt;szGsvGrFGnYbd9nd1t9nE/re1XnJbnW5IKOJusQBPKYGj7gRRA5Mm2KIwp4=&lt;/store-password&gt;
                    &lt;name&gt;truststore.jks&lt;/name&gt;
                &lt;/trust-keystore&gt;
            &lt;/ssl-data&gt;
        &lt;/key-stores&gt;
        &lt;people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:people"&gt;
            &lt;person&gt;
                &lt;id&gt;CUSTOLD&lt;/id&gt;
                &lt;age&gt;99&lt;/age&gt;
            &lt;/person&gt;
            &lt;person&gt;
                &lt;id&gt;CUSTMID&lt;/id&gt;
                &lt;age&gt;40&lt;/age&gt;
            &lt;/person&gt;
            &lt;person&gt;
                &lt;id&gt;CUSTOLD2&lt;/id&gt;
                &lt;age&gt;65&lt;/age&gt;
            &lt;/person&gt;
            &lt;person&gt;
                &lt;id&gt;CUSTYOUNG&lt;/id&gt;
                &lt;age&gt;27&lt;/age&gt;
            &lt;/person&gt;
        &lt;/people&gt;
        &lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;
            &lt;car-person&gt;
                &lt;car-id&gt;CAROLD2&lt;/car-id&gt;
                &lt;person-id&gt;CUSTOLD2&lt;/person-id&gt;
            &lt;/car-person&gt;
            &lt;car-person&gt;
                &lt;car-id&gt;CARYOUNG&lt;/car-id&gt;
                &lt;person-id&gt;CUSTYOUNG&lt;/person-id&gt;
            &lt;/car-person&gt;
            &lt;car-person&gt;
                &lt;car-id&gt;CARMID&lt;/car-id&gt;
                &lt;person-id&gt;CUSTMID&lt;/person-id&gt;
            &lt;/car-person&gt;
            &lt;car-person&gt;
                &lt;car-id&gt;CAROLD&lt;/car-id&gt;
                &lt;person-id&gt;CUSTOLD&lt;/person-id&gt;
            &lt;/car-person&gt;
        &lt;/car-people&gt;
        &lt;cars xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car"&gt;
            &lt;car-entry&gt;
                &lt;id&gt;CAROLD2&lt;/id&gt;
                &lt;model&gt;Camry&lt;/model&gt;
                &lt;year&gt;1982&lt;/year&gt;
                &lt;manufacturer&gt;Toyota&lt;/manufacturer&gt;
            &lt;/car-entry&gt;
            &lt;car-entry&gt;
                &lt;id&gt;CARYOUNG&lt;/id&gt;
                &lt;model&gt;Toyota Prius&lt;/model&gt;
                &lt;year&gt;2016&lt;/year&gt;
                &lt;manufacturer&gt;Toyota&lt;/manufacturer&gt;
                &lt;category&gt;sedan&lt;/category&gt;
            &lt;/car-entry&gt;
            &lt;car-entry&gt;
                &lt;id&gt;CARMID&lt;/id&gt;
                &lt;model&gt;Toyota Aurion&lt;/model&gt;
                &lt;year&gt;2006&lt;/year&gt;
                &lt;manufacturer&gt;Toyota&lt;/manufacturer&gt;
                &lt;category&gt;sedan&lt;/category&gt;
            &lt;/car-entry&gt;
            &lt;car-entry&gt;
                &lt;id&gt;test&lt;/id&gt;
                &lt;model&gt;Dixi&lt;/model&gt;
                &lt;year&gt;1928&lt;/year&gt;
                &lt;manufacturer&gt;BMW&lt;/manufacturer&gt;
            &lt;/car-entry&gt;
            &lt;car-entry&gt;
                &lt;id&gt;CAROLD&lt;/id&gt;
                &lt;year&gt;1950&lt;/year&gt;
                &lt;manufacturer&gt;Ford&lt;/manufacturer&gt;
            &lt;/car-entry&gt;
        &lt;/cars&gt;
    &lt;/data&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<msg time="2026-08-23T02:07:47.217628" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="41"&gt;
    &lt;data&gt;
        &lt;aaa-encrypt-service-config xmlns="config:aaa...</msg>
<var>${reply}</var>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:47.143169" elapsed="0.074489"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:47.217714" elapsed="0.000036"/>
</return>
<msg time="2026-08-23T02:07:47.217897" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="41"&gt;
    &lt;data&gt;
        &lt;aaa-encrypt-service-config xmlns="config:aaa...</msg>
<var>${reply}</var>
<arg>${request}</arg>
<doc>Send message to Netconf connection and get the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:47.138362" elapsed="0.079565"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:47.217972" elapsed="0.000025"/>
</return>
<msg time="2026-08-23T02:07:47.218115" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="41"&gt;
    &lt;data&gt;
        &lt;aaa-encrypt-service-config xmlns="config:aaa...</msg>
<var>${reply}</var>
<arg>merge-multiple-edit-check</arg>
<doc>Load a message from the data file set, send it to Netconf and return the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:47.136951" elapsed="0.081193"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;test&lt;/id&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:47.218306" elapsed="0.000384"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;model&gt;Dixi&lt;/model&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:47.218873" elapsed="0.000295"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;manufacturer&gt;BMW&lt;/manufacturer&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:47.219314" elapsed="0.000286"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;year&gt;1928&lt;/year&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:47.219744" elapsed="0.000307"/>
</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-08-23T02:07:47.221304" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:47.220920" elapsed="0.000447"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.220900" elapsed="0.000495"/>
</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-08-23T02:07:47.221532" elapsed="0.000329"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:07:47.226597" 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-08-23T02:07:47.226155" elapsed="0.000469"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-08-23T02:07:47.226863" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-08-23T02:07:47.226699" elapsed="0.000223"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.226680" elapsed="0.000266"/>
</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-08-23T02:07:47.227085" 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-08-23T02:07:47.227245" elapsed="0.000019"/>
</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-08-23T02:07:47.227402" elapsed="0.000019"/>
</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-08-23T02:07:47.227554" 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-08-23T02:07:47.227705" 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-08-23T02:07:47.227871" 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-08-23T02:07:47.228031" 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-08-23T02:07:47.225859" elapsed="0.002247"/>
</kw>
<status status="PASS" start="2026-08-23T02:07:47.220690" elapsed="0.007465"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-08-23T02:07:47.220323" elapsed="0.007873"/>
</kw>
<doc>Check that the "test" subelement exists and has correct value for "port" subelement.</doc>
<status status="PASS" start="2026-08-23T02:07:47.055612" elapsed="0.172625"/>
</test>
<test id="s1-s3-s1-t35" name="Update_Multiple_Modules_Merge" line="216">
<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-08-23T02:07:47.231625" elapsed="0.000264"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:07:47.231376" elapsed="0.000569"/>
</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-08-23T02:07:47.232901" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:47.232776" elapsed="0.000172"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.232757" elapsed="0.000213"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:47.237425" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:47.237318" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.237299" elapsed="0.000195"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:47.238505" 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-08-23T02:07:47.238099" elapsed="0.000433"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:07:47.239001" 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-08-23T02:07:47.238683" elapsed="0.000344"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:07:47.239073" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:47.239227" 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-08-23T02:07:47.237710" elapsed="0.001541"/>
</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-08-23T02:07:47.244400" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:47.244292" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.244273" elapsed="0.000197"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:47.245693" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:47.245585" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.245566" elapsed="0.000195"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:07:47.246277" level="INFO">${karaf_connection_index} = 18</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-08-23T02:07:47.245917" elapsed="0.000386"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:47.246714" level="INFO">${current_connection_index} = 23</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-08-23T02:07:47.246465" elapsed="0.000275"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:47.275015" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:47.247282" elapsed="0.027898"/>
</kw>
<msg time="2026-08-23T02:07:47.275354" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:07:47.275400" 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 "n "e "t "c "o "n "f "...</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-08-23T02:07:47.246908" elapsed="0.028529"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:07:47.294127" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "U "p "d "a "t "e "_ "M "u "l "t "i "p "l "e "_ "M "o "d "u "l "e "s "_ "M "e "r "g "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-08-23T02:07:47.276000" elapsed="0.018309"/>
</kw>
<msg time="2026-08-23T02:07:47.294482" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:07:47.294528" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "U "p "d "a "t "e "_ "M "u "l "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-08-23T02:07:47.275596" elapsed="0.018970"/>
</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-08-23T02:07:47.294881" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:47.294643" elapsed="0.000318"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.294623" elapsed="0.000364"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:47.295517" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "U "p "d "a "t "e "_ "M "u "l "t "i "p "l "e "_ "M "o "d "u "l "e "s "_ "M "e "r "g "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-08-23T02:07:47.295122" elapsed="0.000468"/>
</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-08-23T02:07:47.295883" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:47.295658" elapsed="0.000367"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.295640" elapsed="0.000417"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:07:47.296092" 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-08-23T02:07:47.299089" elapsed="0.000150"/>
</kw>
<msg time="2026-08-23T02:07:47.299310" 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-08-23T02:07:47.298416" elapsed="0.000993"/>
</kw>
<kw name="Open 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-08-23T02:07:47.300219" elapsed="0.000037"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:47.301064" elapsed="0.000038"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:07:47.296972" elapsed="0.004209"/>
</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-08-23T02:07:47.296353" elapsed="0.004942"/>
</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-08-23T02:07:47.245267" elapsed="0.056126"/>
</kw>
<msg time="2026-08-23T02:07:47.301485" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:47.301529" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "U "p "d "a "t "e "_ "M "u "l "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-08-23T02:07:47.244608" elapsed="0.056958"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:07:47.301748" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:07:47.301641" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.301623" 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-08-23T02:07:47.302420" 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-08-23T02:07:47.302738" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:07:47.302810" 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-08-23T02:07:47.243954" elapsed="0.058982"/>
</kw>
<msg time="2026-08-23T02:07:47.303029" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:47.303073" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "U "p "d "a "t "e "_ "M "u "l "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-08-23T02:07:47.239610" elapsed="0.063500"/>
</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-08-23T02:07:47.303420" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:47.303183" elapsed="0.000291"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.303166" elapsed="0.000332"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:07:47.239481" elapsed="0.064039"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:07:47.239307" elapsed="0.064244"/>
</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-08-23T02:07:47.236959" elapsed="0.066644"/>
</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-08-23T02:07:47.232487" elapsed="0.071171"/>
</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-08-23T02:07:47.232082" elapsed="0.071621"/>
</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-08-23T02:07:47.229171" elapsed="0.074585"/>
</kw>
<kw name="Perform_Test">
<kw name="Load_And_Send_Message">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:47.305078" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-multiple-update-request.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-multiple-update-request.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:47.305230" level="INFO">${data} = &lt;rpc message-id="42" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
&lt;edit-config&gt;
    &lt;target&gt;
        &lt;candidate/&gt;
    &lt;/target&gt;
    &lt;test-option&gt;
        set
    &lt;/test-option&gt;
    &lt;default-operat...</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:47.304856" elapsed="0.000403"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:47.305305" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:07:47.305454" level="INFO">${request} = &lt;rpc message-id="42" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
&lt;edit-config&gt;
    &lt;target&gt;
        &lt;candidate/&gt;
    &lt;/target&gt;
    &lt;test-option&gt;
        set
    &lt;/test-option&gt;
    &lt;default-operat...</msg>
<var>${request}</var>
<arg>${name}-request</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:47.304526" elapsed="0.000992"/>
</kw>
<kw name="Send_Message">
<kw name="Transmit_Message">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:47.308107" level="INFO">&lt;rpc message-id="42" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;</msg>
<arg>${message}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:47.306306" elapsed="0.001860"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:47.308657" level="INFO">&lt;edit-config&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:47.308309" elapsed="0.000401"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:47.313428" level="INFO">&lt;target&gt;
        &lt;candidate/&gt;
    &lt;/target&gt;
    &lt;test-option&gt;
        set
    &lt;/test-option&gt;
    &lt;default-operation&gt;merge&lt;/default-operation&gt;
    &lt;config&gt;
      &lt;cars xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car"&gt;
        &lt;car-entry&gt;
          &lt;id&gt;test&lt;/id&gt;
          &lt;model&gt;Bentley Speed Six&lt;/model&gt;
          &lt;manufacturer&gt;Bentley&lt;/manufacturer&gt;
          &lt;year&gt;1930&lt;/year&gt;
        &lt;/car-entry&gt;
      &lt;/cars&gt;
    &lt;/config&gt;
&lt;/edit-config&gt;
&lt;/rpc&gt;

]]&gt;]]&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:47.308873" elapsed="0.004618"/>
</kw>
<arg>${message}</arg>
<doc>Transmit message to Netconf connection and discard the echo of the message.</doc>
<status status="PASS" start="2026-08-23T02:07:47.306006" elapsed="0.007542"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:47.315354" level="INFO">&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="42"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<msg time="2026-08-23T02:07:47.315447" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="42"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:47.313687" elapsed="0.001788"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:47.315522" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:07:47.315670" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="42"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${request}</arg>
<doc>Send message to Netconf connection and get the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:47.305662" elapsed="0.010037"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:47.315741" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:07:47.315900" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="42"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${actual}</var>
<arg>${name}</arg>
<doc>Load a message from the data file set, send it to Netconf and return the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:47.304237" elapsed="0.011692"/>
</kw>
<kw name="Load_Expected_Reply">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:47.317116" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-multiple-update-reply.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-multiple-update-reply.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:47.317243" level="INFO">${data} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="42"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:47.316904" elapsed="0.000367"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:47.317317" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:47.317466" level="INFO">${expected_reply} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="42"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected_reply}</var>
<arg>${name}-reply</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:47.316576" elapsed="0.000917"/>
</kw>
<return>
<value>${expected_reply}</value>
<status status="PASS" start="2026-08-23T02:07:47.317537" elapsed="0.000025"/>
</return>
<msg time="2026-08-23T02:07:47.317681" level="INFO">${expected} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="42"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected}</var>
<arg>${name}</arg>
<doc>Load the expected reply from the data file set and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:47.316067" elapsed="0.001667"/>
</kw>
<kw name="Remove String" owner="String">
<msg time="2026-08-23T02:07:47.318114" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="42"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>]]&gt;]]&gt;</arg>
<doc>Removes all ``removables`` from the given ``string``.</doc>
<status status="PASS" start="2026-08-23T02:07:47.317906" elapsed="0.000237"/>
</kw>
<kw name="Strip String" owner="String">
<msg time="2026-08-23T02:07:47.318515" level="INFO">${actual} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="42"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>mode=both</arg>
<doc>Remove leading and/or trailing whitespaces from the given string.</doc>
<status status="PASS" start="2026-08-23T02:07:47.318291" elapsed="0.000253"/>
</kw>
<kw name="Elements Should Be Equal" owner="XML">
<arg>${actual}</arg>
<arg>${expected}</arg>
<arg>normalize_whitespace=True</arg>
<doc>Verifies that the given ``source`` element is equal to ``expected``.</doc>
<status status="PASS" start="2026-08-23T02:07:47.318691" elapsed="0.000450"/>
</kw>
<return>
<value>${actual}</value>
<status status="PASS" start="2026-08-23T02:07:47.319193" elapsed="0.000028"/>
</return>
<arg>merge-multiple-update</arg>
<doc>Load and send the request from the dataset and compare the returned reply to the one stored in the dataset.</doc>
<status status="PASS" start="2026-08-23T02:07:47.303958" elapsed="0.015358"/>
</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-08-23T02:07:47.320482" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:47.320123" elapsed="0.000454"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.320105" elapsed="0.000499"/>
</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-08-23T02:07:47.320741" elapsed="0.000330"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:07:47.325779" 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-08-23T02:07:47.325357" elapsed="0.000450"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-08-23T02:07:47.326045" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:07:47.325901" elapsed="0.000201"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.325882" elapsed="0.000244"/>
</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-08-23T02:07:47.326264" 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-08-23T02:07:47.326421" 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-08-23T02:07:47.326578" 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-08-23T02:07:47.326731" 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-08-23T02:07:47.326900" 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-08-23T02:07:47.327057" 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-08-23T02:07:47.327211" 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-08-23T02:07:47.325039" elapsed="0.002248"/>
</kw>
<status status="PASS" start="2026-08-23T02:07:47.319916" elapsed="0.007420"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-08-23T02:07:47.319559" elapsed="0.007819"/>
</kw>
<doc>Update the value of the "port" subelement of the "test" subelement and check the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:47.228579" elapsed="0.098837"/>
</test>
<test id="s1-s3-s1-t36" name="Commit_Multiple_Modules_Merge_Update" line="220">
<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-08-23T02:07:47.330444" elapsed="0.000208"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:07:47.330196" elapsed="0.000510"/>
</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-08-23T02:07:47.331649" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:47.331539" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.331520" 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-08-23T02:07:47.336405" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:47.336299" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.336281" elapsed="0.000193"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:47.337472" 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-08-23T02:07:47.337093" elapsed="0.000406"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:07:47.337980" 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-08-23T02:07:47.337661" elapsed="0.000346"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:07:47.338053" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:47.338208" 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-08-23T02:07:47.336681" elapsed="0.001552"/>
</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-08-23T02:07:47.343281" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:47.343174" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.343155" 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-08-23T02:07:47.344526" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:47.344418" elapsed="0.000227"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.344399" elapsed="0.000274"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:07:47.345195" level="INFO">${karaf_connection_index} = 18</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-08-23T02:07:47.344811" elapsed="0.000411"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:47.345649" level="INFO">${current_connection_index} = 23</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-08-23T02:07:47.345369" elapsed="0.000307"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:47.379157" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:47.346228" elapsed="0.033113"/>
</kw>
<msg time="2026-08-23T02:07:47.379521" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:07:47.379567" 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 "n "e "t "c "o "n "f "...</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-08-23T02:07:47.345824" elapsed="0.033780"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:07:47.415059" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "o "m "m "i "t "_ "M "u "l "t "i "p "l "e "_ "M "o "d "u "l "e "s "_ "M "e "r "g "e "_ "U "p "d "a "t "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-08-23T02:07:47.380199" elapsed="0.035051"/>
</kw>
<msg time="2026-08-23T02:07:47.415429" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:07:47.415476" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "o "m "m "i "t "_ "M "u "l "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-08-23T02:07:47.379778" elapsed="0.035735"/>
</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-08-23T02:07:47.415821" elapsed="0.000045"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:47.415594" elapsed="0.000329"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.415573" elapsed="0.000377"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:47.416473" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "o "m "m "i "t "_ "M "u "l "t "i "p "l "e "_ "M "o "d "u "l "e "s "_ "M "e "r "g "e "_ "U "p "d "a "t "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-08-23T02:07:47.416087" elapsed="0.000460"/>
</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-08-23T02:07:47.416858" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:47.416614" elapsed="0.000323"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.416596" elapsed="0.000366"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:07:47.416999" elapsed="0.000032"/>
</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-08-23T02:07:47.419991" elapsed="0.000151"/>
</kw>
<msg time="2026-08-23T02:07:47.420213" 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-08-23T02:07:47.419310" elapsed="0.001002"/>
</kw>
<kw name="Open 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-08-23T02:07:47.421144" elapsed="0.000200"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:47.422154" elapsed="0.000038"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:07:47.417878" elapsed="0.004397"/>
</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-08-23T02:07:47.417269" elapsed="0.005123"/>
</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-08-23T02:07:47.344115" elapsed="0.078376"/>
</kw>
<msg time="2026-08-23T02:07:47.422584" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:47.422628" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "o "m "m "i "t "_ "M "u "l "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-08-23T02:07:47.343491" elapsed="0.079174"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:07:47.422872" elapsed="0.000029"/>
</return>
<status status="PASS" start="2026-08-23T02:07:47.422741" elapsed="0.000194"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.422722" elapsed="0.000238"/>
</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-08-23T02:07:47.423348" 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-08-23T02:07:47.423719" elapsed="0.000026"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:07:47.423792" 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-08-23T02:07:47.342825" elapsed="0.081274"/>
</kw>
<msg time="2026-08-23T02:07:47.424195" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:47.424240" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "o "m "m "i "t "_ "M "u "l "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-08-23T02:07:47.338580" elapsed="0.085697"/>
</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-08-23T02:07:47.424595" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:47.424354" elapsed="0.000295"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.424337" elapsed="0.000336"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:07:47.338451" elapsed="0.086245"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:07:47.338284" elapsed="0.086444"/>
</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-08-23T02:07:47.335942" elapsed="0.088856"/>
</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-08-23T02:07:47.331258" elapsed="0.093621"/>
</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-08-23T02:07:47.330856" elapsed="0.094069"/>
</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-08-23T02:07:47.328182" elapsed="0.096796"/>
</kw>
<kw name="Perform_Test">
<kw name="Load_And_Send_Message">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:47.426262" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-multiple-update-commit-request.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-multiple-update-commit-request.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:47.426411" level="INFO">${data} = &lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="43"&gt;
&lt;commit/&gt;
&lt;/rpc&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:47.426042" elapsed="0.000396"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:47.426484" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:47.426629" level="INFO">${request} = &lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="43"&gt;
&lt;commit/&gt;
&lt;/rpc&gt;
</msg>
<var>${request}</var>
<arg>${name}-request</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:47.425720" elapsed="0.000935"/>
</kw>
<kw name="Send_Message">
<kw name="Transmit_Message">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:47.429067" level="INFO">&lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="43"&gt;</msg>
<arg>${message}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:47.427406" elapsed="0.001719"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:47.429578" level="INFO">&lt;commit/&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:47.429268" elapsed="0.000361"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:47.430174" level="INFO">&lt;/rpc&gt;

]]&gt;]]&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:47.429769" elapsed="0.000459"/>
</kw>
<arg>${message}</arg>
<doc>Transmit message to Netconf connection and discard the echo of the message.</doc>
<status status="PASS" start="2026-08-23T02:07:47.427108" elapsed="0.003175"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:47.438260" level="INFO">&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="43"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<msg time="2026-08-23T02:07:47.438351" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="43"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:47.430420" elapsed="0.007959"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:47.438425" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:07:47.438572" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="43"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${request}</arg>
<doc>Send message to Netconf connection and get the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:47.426800" elapsed="0.011801"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:47.438643" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:07:47.438784" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="43"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${actual}</var>
<arg>${name}</arg>
<doc>Load a message from the data file set, send it to Netconf and return the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:47.425429" elapsed="0.013384"/>
</kw>
<kw name="Load_Expected_Reply">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:47.439789" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-multiple-update-commit-reply.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-multiple-update-commit-reply.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:47.439971" level="INFO">${data} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="43"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:47.439575" elapsed="0.000424"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:47.440045" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:47.440193" level="INFO">${expected_reply} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="43"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected_reply}</var>
<arg>${name}-reply</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:47.439269" elapsed="0.000952"/>
</kw>
<return>
<value>${expected_reply}</value>
<status status="PASS" start="2026-08-23T02:07:47.440264" elapsed="0.000025"/>
</return>
<msg time="2026-08-23T02:07:47.440408" level="INFO">${expected} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="43"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected}</var>
<arg>${name}</arg>
<doc>Load the expected reply from the data file set and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:47.438973" elapsed="0.001462"/>
</kw>
<kw name="Remove String" owner="String">
<msg time="2026-08-23T02:07:47.440808" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="43"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>]]&gt;]]&gt;</arg>
<doc>Removes all ``removables`` from the given ``string``.</doc>
<status status="PASS" start="2026-08-23T02:07:47.440579" elapsed="0.000280"/>
</kw>
<kw name="Strip String" owner="String">
<msg time="2026-08-23T02:07:47.441235" level="INFO">${actual} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="43"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>mode=both</arg>
<doc>Remove leading and/or trailing whitespaces from the given string.</doc>
<status status="PASS" start="2026-08-23T02:07:47.441007" elapsed="0.000257"/>
</kw>
<kw name="Elements Should Be Equal" owner="XML">
<arg>${actual}</arg>
<arg>${expected}</arg>
<arg>normalize_whitespace=True</arg>
<doc>Verifies that the given ``source`` element is equal to ``expected``.</doc>
<status status="PASS" start="2026-08-23T02:07:47.441408" elapsed="0.000447"/>
</kw>
<return>
<value>${actual}</value>
<status status="PASS" start="2026-08-23T02:07:47.441910" elapsed="0.000028"/>
</return>
<arg>merge-multiple-update-commit</arg>
<doc>Load and send the request from the dataset and compare the returned reply to the one stored in the dataset.</doc>
<status status="PASS" start="2026-08-23T02:07:47.425146" elapsed="0.016887"/>
</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-08-23T02:07:47.443406" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:47.443041" elapsed="0.000427"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.443022" elapsed="0.000472"/>
</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-08-23T02:07:47.443627" elapsed="0.000325"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:07:47.448700" 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-08-23T02:07:47.448261" elapsed="0.000467"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-08-23T02:07:47.448971" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:07:47.448807" elapsed="0.000221"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.448788" elapsed="0.000264"/>
</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-08-23T02:07:47.449191" 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-08-23T02:07:47.449350" 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-08-23T02:07:47.449507" 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-08-23T02:07:47.449658" 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-08-23T02:07:47.449871" elapsed="0.000023"/>
</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-08-23T02:07:47.450029" 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-08-23T02:07:47.450179" 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-08-23T02:07:47.447964" elapsed="0.002290"/>
</kw>
<status status="PASS" start="2026-08-23T02:07:47.442815" elapsed="0.007487"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-08-23T02:07:47.442280" elapsed="0.008063"/>
</kw>
<doc>Commit the update and check the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:47.327675" elapsed="0.122741"/>
</test>
<test id="s1-s3-s1-t37" name="Check_Multiple_Modules_Merge_Update" line="224">
<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-08-23T02:07:47.453490" elapsed="0.000208"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:07:47.453243" elapsed="0.000510"/>
</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-08-23T02:07:47.454708" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:47.454599" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.454580" elapsed="0.000195"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:47.461091" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:47.460983" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.460964" elapsed="0.000195"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:47.462137" 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-08-23T02:07:47.461732" elapsed="0.000432"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:07:47.462606" 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-08-23T02:07:47.462312" elapsed="0.000320"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:07:47.462677" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:47.462829" 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-08-23T02:07:47.461370" elapsed="0.001500"/>
</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-08-23T02:07:47.467916" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:47.467788" elapsed="0.000174"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.467767" elapsed="0.000218"/>
</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-08-23T02:07:47.469179" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:47.469073" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.469055" elapsed="0.000191"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:07:47.469738" level="INFO">${karaf_connection_index} = 18</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-08-23T02:07:47.469378" elapsed="0.000386"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:47.470173" level="INFO">${current_connection_index} = 23</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-08-23T02:07:47.469928" elapsed="0.000271"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:47.501940" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:47.470727" elapsed="0.031379"/>
</kw>
<msg time="2026-08-23T02:07:47.502275" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:07:47.502322" 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 "n "e "t "c "o "n "f "...</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-08-23T02:07:47.470347" elapsed="0.032011"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:07:47.527427" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "h "e "c "k "_ "M "u "l "t "i "p "l "e "_ "M "o "d "u "l "e "s "_ "M "e "r "g "e "_ "U "p "d "a "t "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-08-23T02:07:47.502923" elapsed="0.024682"/>
</kw>
<msg time="2026-08-23T02:07:47.527773" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:07:47.527854" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "h "e "c "k "_ "M "u "l "t "i "p ...</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-08-23T02:07:47.502518" elapsed="0.025378"/>
</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-08-23T02:07:47.528181" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:47.527972" elapsed="0.000286"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.527953" elapsed="0.000331"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:47.528787" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "h "e "c "k "_ "M "u "l "t "i "p "l "e "_ "M "o "d "u "l "e "s "_ "M "e "r "g "e "_ "U "p "d "a "t "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-08-23T02:07:47.528416" elapsed="0.000496"/>
</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-08-23T02:07:47.529185" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:47.528981" elapsed="0.000281"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.528963" elapsed="0.000324"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:07:47.529321" 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-08-23T02:07:47.532185" elapsed="0.000150"/>
</kw>
<msg time="2026-08-23T02:07:47.532405" 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-08-23T02:07:47.531508" elapsed="0.000994"/>
</kw>
<kw name="Open 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-08-23T02:07:47.533313" elapsed="0.000037"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:47.534144" elapsed="0.000038"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:07:47.530152" elapsed="0.004108"/>
</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-08-23T02:07:47.529563" elapsed="0.004813"/>
</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-08-23T02:07:47.468746" elapsed="0.065728"/>
</kw>
<msg time="2026-08-23T02:07:47.534565" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:47.534608" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "h "e "c "k "_ "M "u "l "t "i "p ...</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-08-23T02:07:47.468124" elapsed="0.066521"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:07:47.535159" elapsed="0.000029"/>
</return>
<status status="PASS" start="2026-08-23T02:07:47.534721" elapsed="0.000502"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.534703" elapsed="0.000545"/>
</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-08-23T02:07:47.535627" 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-08-23T02:07:47.536025" elapsed="0.000028"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:07:47.536103" 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-08-23T02:07:47.467451" elapsed="0.068778"/>
</kw>
<msg time="2026-08-23T02:07:47.536326" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:47.536370" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "h "e "c "k "_ "M "u "l "t "i "p ...</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-08-23T02:07:47.463229" elapsed="0.073179"/>
</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-08-23T02:07:47.536743" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:47.536485" elapsed="0.000314"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.536467" elapsed="0.000356"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:07:47.463099" elapsed="0.073801"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:07:47.462925" elapsed="0.074008"/>
</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-08-23T02:07:47.460594" elapsed="0.076393"/>
</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-08-23T02:07:47.454315" elapsed="0.082727"/>
</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-08-23T02:07:47.453909" elapsed="0.083177"/>
</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-08-23T02:07:47.451238" elapsed="0.085901"/>
</kw>
<kw name="Load_And_Send_Message">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:47.538099" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-multiple-update-check-request.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-multiple-update-check-request.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:47.538271" level="INFO">${data} = &lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="44"&gt;
    &lt;get-config&gt;
        &lt;source&gt;
            &lt;running/&gt;
        &lt;/source&gt;
    &lt;/get-config&gt;
&lt;/rpc&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:47.537883" elapsed="0.000450"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:47.538384" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:07:47.538537" level="INFO">${request} = &lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="44"&gt;
    &lt;get-config&gt;
        &lt;source&gt;
            &lt;running/&gt;
        &lt;/source&gt;
    &lt;/get-config&gt;
&lt;/rpc&gt;
</msg>
<var>${request}</var>
<arg>${name}-request</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:47.537557" elapsed="0.001009"/>
</kw>
<kw name="Send_Message">
<kw name="Transmit_Message">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:47.540868" level="INFO">&lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="44"&gt;</msg>
<arg>${message}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:47.539320" elapsed="0.001609"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:47.541446" level="INFO">&lt;get-config&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:47.541075" elapsed="0.000424"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:47.542697" level="INFO">&lt;source&gt;
            &lt;running/&gt;
        &lt;/source&gt;
    &lt;/get-config&gt;
&lt;/rpc&gt;

]]&gt;]]&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:47.541641" elapsed="0.001114"/>
</kw>
<arg>${message}</arg>
<doc>Transmit message to Netconf connection and discard the echo of the message.</doc>
<status status="PASS" start="2026-08-23T02:07:47.539024" elapsed="0.003789"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:47.614377" level="INFO">&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="44"&gt;
    &lt;data&gt;
        &lt;aaa-encrypt-service-config xmlns="config:aaa:authn:encrypt:service:config"&gt;
            &lt;encrypt-type&gt;AES&lt;/encrypt-type&gt;
            &lt;encrypt-key-length&gt;128&lt;/encrypt-key-length&gt;
            &lt;password-length&gt;12&lt;/password-length&gt;
            &lt;cipher-transforms&gt;AES/GCM/NoPadding&lt;/cipher-transforms&gt;
            &lt;encrypt-key&gt;svW8eCV45iNA&lt;/encrypt-key&gt;
            &lt;encrypt-salt&gt;szGsvGrFGnYbd9nd1t9nEw==&lt;/encrypt-salt&gt;
            &lt;auth-tag-length&gt;128&lt;/auth-tag-length&gt;
            &lt;encrypt-method&gt;PBKDF2WithHmacSHA1&lt;/encrypt-method&gt;
            &lt;encrypt-iteration-count&gt;32768&lt;/encrypt-iteration-count&gt;
        &lt;/aaa-encrypt-service-config&gt;
        &lt;key-stores xmlns="urn:opendaylight:yang:aaa:cert:mdsal"&gt;
            &lt;id&gt;KeyStores:1&lt;/id&gt;
            &lt;ssl-data&gt;
                &lt;bundle-name&gt;opendaylight&lt;/bundle-name&gt;
                &lt;tls-protocols/&gt;
                &lt;odl-keystore&gt;
                    &lt;store-password&gt;szGsvGrFGnYbd9nd1t9nE/fx+V2RdCDYC56eieY+0NUj2isn/xZEgHOUDk8=&lt;/store-password&gt;
                    &lt;sign-alg&gt;SHA1WithRSAEncryption&lt;/sign-alg&gt;
                    &lt;validity&gt;365&lt;/validity&gt;
                    &lt;alias&gt;controller&lt;/alias&gt;
                    &lt;name&gt;ctl.jks&lt;/name&gt;
                    &lt;dname&gt;CN=ODL, OU=Dev, O=LinuxFoundation, L=QC Montreal, C=CA&lt;/dname&gt;
                    &lt;keystoreFile&gt;szGsvGrFGnYbd9nd1t9nE0JpQtr6AxLteOf9yUIRItqLm3NkTNx/el6TA99g1gQs8oNL0ip4IPpl4rt7rFRRPPBAYfnI5Hkh+b8tHGDNwygXVh0qPTd02Ju1oPl0gQiXDeG3LxTe8oV0ONxVMiVDPRLInTiudW5V+NAL0c/qNo47UDfypSDuyY7eUL/QqoheS+TBVtkEivw2fS5E+lNKVmSRnedcKds+JRGqsn0ie6kCPmdOS26Zo5s8D6M2tT+r5in4jHovTq6a3RAmy5ZEJJbHJx/m+Y3778MRBkcD2nV3THNE3WXHfY8z+tUfGap/IGFvqumYYtRL35QgVchzJa3JZ2mMxPc2WLe5i2J1nYXYU6QDbT3UoksnTVzBRz0eznEzQQs47v/7gSOqx+Xug8kld3PASYNi5fZD0YmZGe+lI8ON47+4URudcRM9QmzWRu2LhIpGk8Fk0ueaJh5QF0VbVHat5S7fi1fkSNf2wHTs2pFv75hWSsg+7KDTAgfExMImhBPJ+pc8raT7kLEYiBPXy8NMvlDSksgfvSIcyyharJNj8wtxEFkBVWeX0SFzwlZy9oICi+li5ZM8WhSAbtBGTbpBJ9ADwg8WZo7uznJx+rhIUrjoziNRYqUVp/euIq6rjbE/k6jZCtKTP/qoqy0lShP6M9GfuB6O1akHdOHMWOqX2Q6G8qdVPuyAshiJrIthlJEiY5LX8xhXOQDAuGvwB5hFN/aXa0bMksLEHsTKpXSRnhLCJQxzrKpSSIuQqMzsDUQJQMzch1NGpbSFDwOySU5aeyvsTo4AYPT6Xf6YhGsYDk39B6R/CFsBVO13/4SfkiINKvhpYwQ/vfftmmF/7SXYXp/YR7nffSZTr1ooWJHAaGzqAQw+it9HIaJd7IqTROyhS23F00eX3h/OVwbsBB6PmGXh0LvOoCEfctsl0hTpnouPExetsGBZ7dfPpQIK5UiizhBZjKfr1N3dRVawGP2tFckp3xB0Fr3W8nqRCcWxi5oDGtKcK+z5LinRpCeurFbtZwatTqgh1o/KRXdpQ9E+QmJuyIUnIjoxwuFejwHujtyJR+uAvC90T+G09PnaaMGALkmiJ3kiDn5waQup2qhptMUuF1ZjNirqcbAh7MoEtU02PCQAlBmV0D9Uvp/q9Iw3EFmWhfNT8w/Y03VHw2AK7DY94gJq0vmVUD96ahn4UvWXL5CjFyzXD8ikqdV0fx3zamP53xl6LhQUwBWwiaZVZ6qpfmuSfHRBoOKn5FGmIVpQtgs1i2OYsf8CFMdds6HkzCU9ZR5bcNIUz3U7KzxhaZNpj+tBPjCe5knbuvODRT9AIIZr5NL8zkfLG0R/DySEUJEP9MZFDzaYKqwZUQK9u9lyxXBdRZ/nJJVpYkbOdjraUZOn2wX1MOv768TylMxft2elpWtyo51E7XJca0zO3FT+T6dEDLNuLf70Tjf4ZKlXIs+rbMZRzJiNPU/gOOCncjGnQg7yVNt6CXFzLloYDKyI1+nXar0j8Y7aLeRw4ANqfONtf/a/feF1rxUgkr9kpwha7YR6ZbwLsgEqRGQ1yP0UUYTN4tW9P1fKN220ZErjmNLf5y9d4E1kw0JC9Aowy1OIPHC+GoIH2GXmLp6xrwtvDNX0N9GVVtWxGfdOuRunqus5wncxwKSsJHEV7gC7CttHVSQuYxf+qSVzxDZdZhrEFRDM+2ehQr+jYPjBFDfrFrZ6APcuc6eG8uNgDwFBIT/AvuHqnX/J/C5nmpguP7J8i+L6Tq/vaE06wHDJDHx4janBzQWz38QKtnFFVvSuYlPq4xpjc4XL0w==&lt;/keystoreFile&gt;
                    &lt;key-alg&gt;RSA&lt;/key-alg&gt;
                    &lt;keysize&gt;1024&lt;/keysize&gt;
                &lt;/odl-keystore&gt;
                &lt;cipher-suites&gt;
                    &lt;suiteName/&gt;
                &lt;/cipher-suites&gt;
                &lt;trust-keystore&gt;
                    &lt;keystoreFile&gt;szGsvGrFGnYbd9nd1t9nE0JpQtr6AxLteOf9yIktC+veMTpJpq+B4qQuq9ISdPV1uRcHSk71SvQM3Yb0MmEuAA==&lt;/keystoreFile&gt;
                    &lt;store-password&gt;szGsvGrFGnYbd9nd1t9nE/re1XnJbnW5IKOJusQBPKYGj7gRRA5Mm2KIwp4=&lt;/store-password&gt;
                    &lt;name&gt;truststore.jks&lt;/name&gt;
                &lt;/trust-keystore&gt;
            &lt;/ssl-data&gt;
        &lt;/key-stores&gt;
        &lt;people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:people"&gt;
            &lt;person&gt;
                &lt;id&gt;CUSTOLD&lt;/id&gt;
                &lt;age&gt;99&lt;/age&gt;
            &lt;/person&gt;
            &lt;person&gt;
                &lt;id&gt;CUSTMID&lt;/id&gt;
                &lt;age&gt;40&lt;/age&gt;
            &lt;/person&gt;
            &lt;person&gt;
                &lt;id&gt;CUSTOLD2&lt;/id&gt;
                &lt;age&gt;65&lt;/age&gt;
            &lt;/person&gt;
            &lt;person&gt;
                &lt;id&gt;CUSTYOUNG&lt;/id&gt;
                &lt;age&gt;27&lt;/age&gt;
            &lt;/person&gt;
        &lt;/people&gt;
        &lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;
            &lt;car-person&gt;
                &lt;car-id&gt;CAROLD2&lt;/car-id&gt;
                &lt;person-id&gt;CUSTOLD2&lt;/person-id&gt;
            &lt;/car-person&gt;
            &lt;car-person&gt;
                &lt;car-id&gt;CARYOUNG&lt;/car-id&gt;
                &lt;person-id&gt;CUSTYOUNG&lt;/person-id&gt;
            &lt;/car-person&gt;
            &lt;car-person&gt;
                &lt;car-id&gt;CARMID&lt;/car-id&gt;
                &lt;person-id&gt;CUSTMID&lt;/person-id&gt;
            &lt;/car-person&gt;
            &lt;car-person&gt;
                &lt;car-id&gt;CAROLD&lt;/car-id&gt;
                &lt;person-id&gt;CUSTOLD&lt;/person-id&gt;
            &lt;/car-person&gt;
        &lt;/car-people&gt;
        &lt;cars xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car"&gt;
            &lt;car-entry&gt;
                &lt;id&gt;CAROLD2&lt;/id&gt;
                &lt;model&gt;Camry&lt;/model&gt;
                &lt;year&gt;1982&lt;/year&gt;
                &lt;manufacturer&gt;Toyota&lt;/manufacturer&gt;
            &lt;/car-entry&gt;
            &lt;car-entry&gt;
                &lt;id&gt;CARYOUNG&lt;/id&gt;
                &lt;model&gt;Toyota Prius&lt;/model&gt;
                &lt;year&gt;2016&lt;/year&gt;
                &lt;manufacturer&gt;Toyota&lt;/manufacturer&gt;
                &lt;category&gt;sedan&lt;/category&gt;
            &lt;/car-entry&gt;
            &lt;car-entry&gt;
                &lt;id&gt;CARMID&lt;/id&gt;
                &lt;model&gt;Toyota Aurion&lt;/model&gt;
                &lt;year&gt;2006&lt;/year&gt;
                &lt;manufacturer&gt;Toyota&lt;/manufacturer&gt;
                &lt;category&gt;sedan&lt;/category&gt;
            &lt;/car-entry&gt;
            &lt;car-entry&gt;
                &lt;id&gt;test&lt;/id&gt;
                &lt;model&gt;Bentley Speed Six&lt;/model&gt;
                &lt;year&gt;1930&lt;/year&gt;
                &lt;manufacturer&gt;Bentley&lt;/manufacturer&gt;
            &lt;/car-entry&gt;
            &lt;car-entry&gt;
                &lt;id&gt;CAROLD&lt;/id&gt;
                &lt;year&gt;1950&lt;/year&gt;
                &lt;manufacturer&gt;Ford&lt;/manufacturer&gt;
            &lt;/car-entry&gt;
        &lt;/cars&gt;
    &lt;/data&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<msg time="2026-08-23T02:07:47.614724" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="44"&gt;
    &lt;data&gt;
        &lt;aaa-encrypt-service-config xmlns="config:aaa...</msg>
<var>${reply}</var>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:47.542969" elapsed="0.071787"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:47.614855" elapsed="0.000056"/>
</return>
<msg time="2026-08-23T02:07:47.615077" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="44"&gt;
    &lt;data&gt;
        &lt;aaa-encrypt-service-config xmlns="config:aaa...</msg>
<var>${reply}</var>
<arg>${request}</arg>
<doc>Send message to Netconf connection and get the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:47.538710" elapsed="0.076399"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:47.615157" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:07:47.615305" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="44"&gt;
    &lt;data&gt;
        &lt;aaa-encrypt-service-config xmlns="config:aaa...</msg>
<var>${reply}</var>
<arg>merge-multiple-update-check</arg>
<doc>Load a message from the data file set, send it to Netconf and return the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:47.537286" elapsed="0.078048"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;test&lt;/id&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:47.615538" elapsed="0.000439"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;model&gt;Bentley Speed Six&lt;/model&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:47.616126" elapsed="0.000287"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;manufacturer&gt;Bentley&lt;/manufacturer&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:47.616557" elapsed="0.000305"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;year&gt;1930&lt;/year&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:47.617010" elapsed="0.000286"/>
</kw>
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;model&gt;Dixi&lt;/model&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:47.617443" elapsed="0.000282"/>
</kw>
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;manufacturer&gt;BMW&lt;/manufacturer&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:47.617886" elapsed="0.000284"/>
</kw>
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;year&gt;1928&lt;/year&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:47.618314" elapsed="0.000282"/>
</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-08-23T02:07:47.619987" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:47.619563" elapsed="0.000487"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.619540" elapsed="0.000538"/>
</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-08-23T02:07:47.620218" elapsed="0.000322"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:07:47.625607" 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-08-23T02:07:47.625185" elapsed="0.000450"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-08-23T02:07:47.625876" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-23T02:07:47.625710" elapsed="0.000225"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.625691" elapsed="0.000268"/>
</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-08-23T02:07:47.626103" 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-08-23T02:07:47.626266" 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-08-23T02:07:47.626427" elapsed="0.000019"/>
</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-08-23T02:07:47.626582" 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-08-23T02:07:47.626732" 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-08-23T02:07:47.626901" 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-08-23T02:07:47.627073" 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-08-23T02:07:47.624883" elapsed="0.002266"/>
</kw>
<status status="PASS" start="2026-08-23T02:07:47.619337" elapsed="0.007941"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-08-23T02:07:47.618903" elapsed="0.008417"/>
</kw>
<doc>Check that the value of the "port" was really updated.</doc>
<status status="PASS" start="2026-08-23T02:07:47.450688" elapsed="0.176671"/>
</test>
<test id="s1-s3-s1-t38" name="Replace_Multiple_Modules_Merge" line="235">
<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-08-23T02:07:47.630550" elapsed="0.000212"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:07:47.630300" 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-08-23T02:07:47.631816" elapsed="0.000029"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:47.631702" elapsed="0.000177"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.631683" elapsed="0.000219"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:47.636399" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:47.636293" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.636275" elapsed="0.000192"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:47.637472" 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-08-23T02:07:47.637091" elapsed="0.000407"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:07:47.637963" 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-08-23T02:07:47.637645" elapsed="0.000344"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:07:47.638033" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:07:47.638185" 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-08-23T02:07:47.636686" elapsed="0.001523"/>
</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-08-23T02:07:47.643490" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:47.643383" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.643363" elapsed="0.000197"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:47.644771" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:47.644665" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.644647" elapsed="0.000223"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:07:47.645374" level="INFO">${karaf_connection_index} = 18</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-08-23T02:07:47.645008" elapsed="0.000392"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:47.645825" level="INFO">${current_connection_index} = 23</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-08-23T02:07:47.645549" elapsed="0.000324"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:47.676527" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:47.646427" elapsed="0.030269"/>
</kw>
<msg time="2026-08-23T02:07:47.676900" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:07:47.676949" 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 "n "e "t "c "o "n "f "...</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-08-23T02:07:47.646039" elapsed="0.030947"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:07:47.699440" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "R "e "p "l "a "c "e "_ "M "u "l "t "i "p "l "e "_ "M "o "d "u "l "e "s "_ "M "e "r "g "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-08-23T02:07:47.677549" elapsed="0.022068"/>
</kw>
<msg time="2026-08-23T02:07:47.699789" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:07:47.699854" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "R "e "p "l "a "c "e "_ "M "u "l "t ...</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-08-23T02:07:47.677150" elapsed="0.022744"/>
</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-08-23T02:07:47.700184" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:47.699972" elapsed="0.000291"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.699952" elapsed="0.000336"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:47.700798" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "R "e "p "l "a "c "e "_ "M "u "l "t "i "p "l "e "_ "M "o "d "u "l "e "s "_ "M "e "r "g "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-08-23T02:07:47.700418" elapsed="0.000518"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:47.701210" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:47.701006" elapsed="0.000282"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.700987" elapsed="0.000326"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:07:47.701347" 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-08-23T02:07:47.704308" elapsed="0.000150"/>
</kw>
<msg time="2026-08-23T02:07:47.704530" 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-08-23T02:07:47.703605" elapsed="0.001024"/>
</kw>
<kw name="Open 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-08-23T02:07:47.705439" elapsed="0.000037"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:47.706282" elapsed="0.000037"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:07:47.702219" elapsed="0.004179"/>
</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-08-23T02:07:47.701613" elapsed="0.004899"/>
</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-08-23T02:07:47.644365" elapsed="0.062245"/>
</kw>
<msg time="2026-08-23T02:07:47.706701" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:47.706745" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "R "e "p "l "a "c "e "_ "M "u "l "t ...</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-08-23T02:07:47.643699" elapsed="0.063084"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:07:47.707141" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:07:47.707031" elapsed="0.000170"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.707010" elapsed="0.000215"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 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-08-23T02:07:47.707608" 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-08-23T02:07:47.707952" elapsed="0.000026"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:07:47.708025" 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-08-23T02:07:47.643044" elapsed="0.065091"/>
</kw>
<msg time="2026-08-23T02:07:47.708227" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:47.708271" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "R "e "p "l "a "c "e "_ "M "u "l "t ...</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-08-23T02:07:47.638581" elapsed="0.069727"/>
</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-08-23T02:07:47.708619" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:47.708383" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.708366" elapsed="0.000329"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:07:47.638449" elapsed="0.070268"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:07:47.638268" elapsed="0.070481"/>
</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-08-23T02:07:47.635933" elapsed="0.072869"/>
</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-08-23T02:07:47.631414" elapsed="0.077498"/>
</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-08-23T02:07:47.630999" elapsed="0.077959"/>
</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-08-23T02:07:47.628323" elapsed="0.080688"/>
</kw>
<kw name="Perform_Test">
<kw name="Load_And_Send_Message">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:47.710548" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-multiple-replace-request.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-multiple-replace-request.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:47.710722" level="INFO">${data} = &lt;rpc message-id="70" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
&lt;edit-config&gt;
    &lt;target&gt;
        &lt;candidate/&gt;
    &lt;/target&gt;
    &lt;test-option&gt;
        set
    &lt;/test-option&gt;
    &lt;default-operat...</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:47.710084" elapsed="0.000698"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:47.710850" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T02:07:47.711004" level="INFO">${request} = &lt;rpc message-id="70" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
&lt;edit-config&gt;
    &lt;target&gt;
        &lt;candidate/&gt;
    &lt;/target&gt;
    &lt;test-option&gt;
        set
    &lt;/test-option&gt;
    &lt;default-operat...</msg>
<var>${request}</var>
<arg>${name}-request</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:47.709759" elapsed="0.001273"/>
</kw>
<kw name="Send_Message">
<kw name="Transmit_Message">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:47.713622" level="INFO">&lt;rpc message-id="70" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;</msg>
<arg>${message}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:47.711768" elapsed="0.001912"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:47.714204" level="INFO">&lt;edit-config&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:47.713826" elapsed="0.000430"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:47.721085" level="INFO">&lt;target&gt;
        &lt;candidate/&gt;
    &lt;/target&gt;
    &lt;test-option&gt;
        set
    &lt;/test-option&gt;
    &lt;default-operation&gt;replace&lt;/default-operation&gt;
    &lt;config&gt;
      &lt;cars xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car"&gt;
        &lt;car-entry&gt;
          &lt;id&gt;REPLACE&lt;/id&gt;
          &lt;model&gt;Panda&lt;/model&gt;
          &lt;manufacturer&gt;FIAT&lt;/manufacturer&gt;
          &lt;year&gt;2003&lt;/year&gt;
        &lt;/car-entry&gt;
      &lt;/cars&gt;
      &lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;
        &lt;car-person&gt;
          &lt;car-id&gt;REPLACE&lt;/car-id&gt;
          &lt;person-id&gt;CUSTYOUNG&lt;/person-id&gt;
        &lt;/car-person&gt;
      &lt;/car-people&gt;
    &lt;/config&gt;
&lt;/edit-config&gt;
&lt;/rpc&gt;

]]&gt;]]&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:47.714396" elapsed="0.006758"/>
</kw>
<arg>${message}</arg>
<doc>Transmit message to Netconf connection and discard the echo of the message.</doc>
<status status="PASS" start="2026-08-23T02:07:47.711472" elapsed="0.009739"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:47.722968" level="INFO">&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="70"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<msg time="2026-08-23T02:07:47.723058" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="70"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:47.721350" elapsed="0.001736"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:47.723133" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:07:47.723282" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="70"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${request}</arg>
<doc>Send message to Netconf connection and get the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:47.711178" elapsed="0.012132"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:47.723354" elapsed="0.000025"/>
</return>
<msg time="2026-08-23T02:07:47.723494" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="70"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${actual}</var>
<arg>${name}</arg>
<doc>Load a message from the data file set, send it to Netconf and return the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:47.709463" elapsed="0.014058"/>
</kw>
<kw name="Load_Expected_Reply">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:47.724481" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-multiple-replace-reply.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-multiple-replace-reply.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:47.724609" level="INFO">${data} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="70"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:47.724270" elapsed="0.000367"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:47.724684" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:07:47.724830" level="INFO">${expected_reply} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="70"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected_reply}</var>
<arg>${name}-reply</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:47.723969" elapsed="0.000911"/>
</kw>
<return>
<value>${expected_reply}</value>
<status status="PASS" start="2026-08-23T02:07:47.724924" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:07:47.725069" level="INFO">${expected} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="70"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected}</var>
<arg>${name}</arg>
<doc>Load the expected reply from the data file set and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:47.723659" elapsed="0.001437"/>
</kw>
<kw name="Remove String" owner="String">
<msg time="2026-08-23T02:07:47.725442" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="70"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>]]&gt;]]&gt;</arg>
<doc>Removes all ``removables`` from the given ``string``.</doc>
<status status="PASS" start="2026-08-23T02:07:47.725239" elapsed="0.000231"/>
</kw>
<kw name="Strip String" owner="String">
<msg time="2026-08-23T02:07:47.725854" level="INFO">${actual} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="70"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>mode=both</arg>
<doc>Remove leading and/or trailing whitespaces from the given string.</doc>
<status status="PASS" start="2026-08-23T02:07:47.725615" elapsed="0.000270"/>
</kw>
<kw name="Elements Should Be Equal" owner="XML">
<arg>${actual}</arg>
<arg>${expected}</arg>
<arg>normalize_whitespace=True</arg>
<doc>Verifies that the given ``source`` element is equal to ``expected``.</doc>
<status status="PASS" start="2026-08-23T02:07:47.726034" elapsed="0.000470"/>
</kw>
<return>
<value>${actual}</value>
<status status="PASS" start="2026-08-23T02:07:47.726593" elapsed="0.000029"/>
</return>
<arg>merge-multiple-replace</arg>
<doc>Load and send the request from the dataset and compare the returned reply to the one stored in the dataset.</doc>
<status status="PASS" start="2026-08-23T02:07:47.709182" elapsed="0.017536"/>
</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-08-23T02:07:47.727906" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:47.727528" elapsed="0.000441"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.727511" elapsed="0.000482"/>
</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-08-23T02:07:47.728125" elapsed="0.000310"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:07:47.733290" 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-08-23T02:07:47.732879" elapsed="0.000438"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-08-23T02:07:47.733536" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-23T02:07:47.733392" elapsed="0.000201"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.733373" elapsed="0.000244"/>
</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-08-23T02:07:47.733753" 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-08-23T02:07:47.733927" 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-08-23T02:07:47.734110" 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-08-23T02:07:47.734263" 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-08-23T02:07:47.734416" 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-08-23T02:07:47.734565" 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-08-23T02:07:47.734716" 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-08-23T02:07:47.732567" elapsed="0.002224"/>
</kw>
<status status="PASS" start="2026-08-23T02:07:47.727321" elapsed="0.007541"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-08-23T02:07:47.726979" elapsed="0.007927"/>
</kw>
<doc>Replace the content of the "test" with another completely different and check the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:47.627711" elapsed="0.107234"/>
</test>
<test id="s1-s3-s1-t39" name="Commit_Multiple_Modules_Merge_Replace" line="239">
<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-08-23T02:07:47.737957" elapsed="0.000211"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:07:47.737680" elapsed="0.000541"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:47.739180" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:47.739070" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.739050" elapsed="0.000198"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:47.743741" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:47.743632" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.743614" elapsed="0.000194"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:47.744778" 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-08-23T02:07:47.744399" elapsed="0.000406"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:07:47.745263" 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-08-23T02:07:47.744968" elapsed="0.000321"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:07:47.745333" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:47.745486" 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-08-23T02:07:47.744034" elapsed="0.001477"/>
</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-08-23T02:07:47.750792" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:47.750684" elapsed="0.000172"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.750664" elapsed="0.000216"/>
</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-08-23T02:07:47.752067" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:47.751960" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.751941" elapsed="0.000195"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:07:47.752624" level="INFO">${karaf_connection_index} = 18</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-08-23T02:07:47.752267" elapsed="0.000384"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:47.753060" level="INFO">${current_connection_index} = 23</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-08-23T02:07:47.752796" elapsed="0.000290"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:47.784478" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:47.753608" elapsed="0.031042"/>
</kw>
<msg time="2026-08-23T02:07:47.784828" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:07:47.784902" 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 "n "e "t "c "o "n "f "...</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-08-23T02:07:47.753234" elapsed="0.031706"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:07:47.809210" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "o "m "m "i "t "_ "M "u "l "t "i "p "l "e "_ "M "o "d "u "l "e "s "_ "M "e "r "g "e "_ "R "e "p "l "a "c "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-08-23T02:07:47.785509" elapsed="0.023895"/>
</kw>
<msg time="2026-08-23T02:07:47.809571" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:07:47.809617" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "o "m "m "i "t "_ "M "u "l "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-08-23T02:07:47.785109" elapsed="0.024544"/>
</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-08-23T02:07:47.809972" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:47.809732" elapsed="0.000316"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.809712" elapsed="0.000362"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:47.810579" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "o "m "m "i "t "_ "M "u "l "t "i "p "l "e "_ "M "o "d "u "l "e "s "_ "M "e "r "g "e "_ "R "e "p "l "a "c "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-08-23T02:07:47.810207" elapsed="0.000446"/>
</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-08-23T02:07:47.810936" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:47.810718" elapsed="0.000293"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.810700" elapsed="0.000337"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:07:47.811071" elapsed="0.000031"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-23T02:07:47.813974" elapsed="0.000149"/>
</kw>
<msg time="2026-08-23T02:07:47.814195" 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-08-23T02:07:47.813278" elapsed="0.001018"/>
</kw>
<kw name="Open 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-08-23T02:07:47.815110" elapsed="0.000038"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:47.815941" elapsed="0.000040"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:07:47.811937" elapsed="0.004124"/>
</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-08-23T02:07:47.811336" elapsed="0.004839"/>
</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-08-23T02:07:47.751633" elapsed="0.064642"/>
</kw>
<msg time="2026-08-23T02:07:47.816368" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:47.816412" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "o "m "m "i "t "_ "M "u "l "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-08-23T02:07:47.751022" elapsed="0.065470"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:07:47.816684" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-08-23T02:07:47.816572" elapsed="0.000171"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.816553" 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-08-23T02:07:47.817202" 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-08-23T02:07:47.817556" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:07:47.817629" 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-08-23T02:07:47.750341" elapsed="0.067398"/>
</kw>
<msg time="2026-08-23T02:07:47.818005" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:47.818054" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "o "m "m "i "t "_ "M "u "l "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-08-23T02:07:47.745943" elapsed="0.072149"/>
</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-08-23T02:07:47.818408" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:47.818169" elapsed="0.000292"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.818151" elapsed="0.000333"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:07:47.745776" elapsed="0.072732"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:07:47.745603" elapsed="0.072937"/>
</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-08-23T02:07:47.743273" elapsed="0.075323"/>
</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-08-23T02:07:47.738768" elapsed="0.079885"/>
</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-08-23T02:07:47.738359" elapsed="0.080339"/>
</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-08-23T02:07:47.735701" elapsed="0.083052"/>
</kw>
<kw name="Perform_Test">
<kw name="Load_And_Send_Message">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:47.820273" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-multiple-replace-commit-request.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-multiple-replace-commit-request.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:47.820420" level="INFO">${data} = &lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="71"&gt;
&lt;commit/&gt;
&lt;/rpc&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:47.819818" elapsed="0.000629"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:47.820495" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:47.820644" level="INFO">${request} = &lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="71"&gt;
&lt;commit/&gt;
&lt;/rpc&gt;
</msg>
<var>${request}</var>
<arg>${name}-request</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:47.819512" elapsed="0.001159"/>
</kw>
<kw name="Send_Message">
<kw name="Transmit_Message">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:47.823018" level="INFO">&lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="71"&gt;</msg>
<arg>${message}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:47.821448" elapsed="0.001627"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:47.823524" level="INFO">&lt;commit/&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:47.823215" elapsed="0.000360"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:47.824148" level="INFO">&lt;/rpc&gt;

]]&gt;]]&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:47.823713" elapsed="0.000489"/>
</kw>
<arg>${message}</arg>
<doc>Transmit message to Netconf connection and discard the echo of the message.</doc>
<status status="PASS" start="2026-08-23T02:07:47.821126" elapsed="0.003133"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:47.830670" level="INFO">&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="71"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<msg time="2026-08-23T02:07:47.830763" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="71"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:47.824396" elapsed="0.006394"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:47.830851" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T02:07:47.831003" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="71"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${request}</arg>
<doc>Send message to Netconf connection and get the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:47.820814" elapsed="0.010252"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:47.831112" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:07:47.831258" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="71"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${actual}</var>
<arg>${name}</arg>
<doc>Load a message from the data file set, send it to Netconf and return the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:47.819220" elapsed="0.012066"/>
</kw>
<kw name="Load_Expected_Reply">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:47.832250" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-multiple-replace-commit-reply.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-multiple-replace-commit-reply.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:47.832377" level="INFO">${data} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="71"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:47.832042" elapsed="0.000362"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:47.832450" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:07:47.832597" level="INFO">${expected_reply} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="71"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected_reply}</var>
<arg>${name}-reply</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:47.831715" elapsed="0.000910"/>
</kw>
<return>
<value>${expected_reply}</value>
<status status="PASS" start="2026-08-23T02:07:47.832668" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:07:47.832814" level="INFO">${expected} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="71"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected}</var>
<arg>${name}</arg>
<doc>Load the expected reply from the data file set and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:47.831423" elapsed="0.001432"/>
</kw>
<kw name="Remove String" owner="String">
<msg time="2026-08-23T02:07:47.833219" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="71"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>]]&gt;]]&gt;</arg>
<doc>Removes all ``removables`` from the given ``string``.</doc>
<status status="PASS" start="2026-08-23T02:07:47.833001" elapsed="0.000247"/>
</kw>
<kw name="Strip String" owner="String">
<msg time="2026-08-23T02:07:47.833616" level="INFO">${actual} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="71"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>mode=both</arg>
<doc>Remove leading and/or trailing whitespaces from the given string.</doc>
<status status="PASS" start="2026-08-23T02:07:47.833392" elapsed="0.000253"/>
</kw>
<kw name="Elements Should Be Equal" owner="XML">
<arg>${actual}</arg>
<arg>${expected}</arg>
<arg>normalize_whitespace=True</arg>
<doc>Verifies that the given ``source`` element is equal to ``expected``.</doc>
<status status="PASS" start="2026-08-23T02:07:47.833794" elapsed="0.000447"/>
</kw>
<return>
<value>${actual}</value>
<status status="PASS" start="2026-08-23T02:07:47.834293" elapsed="0.000028"/>
</return>
<arg>merge-multiple-replace-commit</arg>
<doc>Load and send the request from the dataset and compare the returned reply to the one stored in the dataset.</doc>
<status status="PASS" start="2026-08-23T02:07:47.818936" elapsed="0.015480"/>
</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-08-23T02:07:47.835596" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:47.835232" elapsed="0.000425"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.835212" elapsed="0.000470"/>
</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-08-23T02:07:47.835814" elapsed="0.000325"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:07:47.841024" 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-08-23T02:07:47.840597" elapsed="0.000455"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-08-23T02:07:47.841296" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-23T02:07:47.841152" elapsed="0.000202"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.841132" elapsed="0.000246"/>
</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-08-23T02:07:47.841513" 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-08-23T02:07:47.841671" 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-08-23T02:07:47.841829" elapsed="0.000038"/>
</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-08-23T02:07:47.842003" 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-08-23T02:07:47.842158" 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-08-23T02:07:47.842309" elapsed="0.000054"/>
</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-08-23T02:07:47.842500" 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-08-23T02:07:47.840302" elapsed="0.002275"/>
</kw>
<status status="PASS" start="2026-08-23T02:07:47.835020" elapsed="0.007606"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-08-23T02:07:47.834662" elapsed="0.008004"/>
</kw>
<doc>Commit the replace and check the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:47.735206" elapsed="0.107498"/>
</test>
<test id="s1-s3-s1-t40" name="Check_Multiple_Modules_Merge_Replace" line="243">
<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-08-23T02:07:47.845775" elapsed="0.000229"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:07:47.845527" elapsed="0.000532"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:47.847018" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:47.846907" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.846888" 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-08-23T02:07:47.851516" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:47.851409" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.851391" elapsed="0.000194"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:47.852557" 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-08-23T02:07:47.852177" elapsed="0.000407"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:07:47.853074" 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-08-23T02:07:47.852733" elapsed="0.000367"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:07:47.853146" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:47.853301" 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-08-23T02:07:47.851797" elapsed="0.001529"/>
</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-08-23T02:07:47.858557" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:47.858447" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.858428" 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-08-23T02:07:47.859893" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:47.859761" elapsed="0.000179"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.859742" elapsed="0.000220"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:07:47.860455" level="INFO">${karaf_connection_index} = 18</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-08-23T02:07:47.860094" elapsed="0.000387"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:47.860887" level="INFO">${current_connection_index} = 23</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-08-23T02:07:47.860625" elapsed="0.000288"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:47.891520" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:47.861450" elapsed="0.030476"/>
</kw>
<msg time="2026-08-23T02:07:47.892304" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:07:47.892408" 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 "n "e "t "c "o "n "f "...</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-08-23T02:07:47.861075" elapsed="0.031415"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:07:47.916141" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "h "e "c "k "_ "M "u "l "t "i "p "l "e "_ "M "o "d "u "l "e "s "_ "M "e "r "g "e "_ "R "e "p "l "a "c "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-08-23T02:07:47.893741" elapsed="0.022582"/>
</kw>
<msg time="2026-08-23T02:07:47.916492" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:07:47.916551" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "h "e "c "k "_ "M "u "l "t "i "p ...</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-08-23T02:07:47.892929" elapsed="0.023693"/>
</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-08-23T02:07:47.916940" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:47.916702" elapsed="0.000318"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.916683" elapsed="0.000362"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:47.917552" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "h "e "c "k "_ "M "u "l "t "i "p "l "e "_ "M "o "d "u "l "e "s "_ "M "e "r "g "e "_ "R "e "p "l "a "c "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-08-23T02:07:47.917177" elapsed="0.000450"/>
</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-08-23T02:07:47.917916" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:47.917693" elapsed="0.000302"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.917675" elapsed="0.000345"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:07:47.918054" 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-08-23T02:07:47.920894" elapsed="0.000149"/>
</kw>
<msg time="2026-08-23T02:07:47.921113" 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-08-23T02:07:47.920218" elapsed="0.000993"/>
</kw>
<kw name="Open 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-08-23T02:07:47.922021" elapsed="0.000038"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:47.922824" elapsed="0.000060"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:07:47.918888" elapsed="0.004077"/>
</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-08-23T02:07:47.918298" elapsed="0.004780"/>
</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-08-23T02:07:47.859461" elapsed="0.063715"/>
</kw>
<msg time="2026-08-23T02:07:47.923267" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:47.923310" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "h "e "c "k "_ "M "u "l "t "i "p ...</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-08-23T02:07:47.858769" elapsed="0.064578"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:07:47.923528" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:07:47.923422" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.923404" 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-08-23T02:07:47.924180" 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-08-23T02:07:47.924527" elapsed="0.000026"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:07:47.924601" 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-08-23T02:07:47.858108" elapsed="0.066601"/>
</kw>
<msg time="2026-08-23T02:07:47.924802" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:47.924867" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "h "e "c "k "_ "M "u "l "t "i "p ...</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-08-23T02:07:47.853686" elapsed="0.071219"/>
</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-08-23T02:07:47.925217" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:47.924981" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:47.924963" elapsed="0.000332"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:07:47.853555" elapsed="0.071763"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:07:47.853381" elapsed="0.071966"/>
</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-08-23T02:07:47.851051" elapsed="0.074348"/>
</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-08-23T02:07:47.846600" elapsed="0.078852"/>
</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-08-23T02:07:47.846194" elapsed="0.079302"/>
</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-08-23T02:07:47.843543" elapsed="0.082043"/>
</kw>
<kw name="Load_And_Send_Message">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:47.926547" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-multiple-replace-check-request.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-multiple-replace-check-request.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:47.926676" level="INFO">${data} = &lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="72"&gt;
    &lt;get-config&gt;
        &lt;source&gt;
            &lt;running/&gt;
        &lt;/source&gt;
    &lt;/get-config&gt;
&lt;/rpc&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:47.926336" elapsed="0.000368"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:47.926750" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:47.926915" level="INFO">${request} = &lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="72"&gt;
    &lt;get-config&gt;
        &lt;source&gt;
            &lt;running/&gt;
        &lt;/source&gt;
    &lt;/get-config&gt;
&lt;/rpc&gt;
</msg>
<var>${request}</var>
<arg>${name}-request</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:47.926028" elapsed="0.000915"/>
</kw>
<kw name="Send_Message">
<kw name="Transmit_Message">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:47.929521" level="INFO">&lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="72"&gt;</msg>
<arg>${message}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:47.927892" elapsed="0.001687"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:47.930106" level="INFO">&lt;get-config&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:47.929724" elapsed="0.000435"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:47.931343" level="INFO">&lt;source&gt;
            &lt;running/&gt;
        &lt;/source&gt;
    &lt;/get-config&gt;
&lt;/rpc&gt;

]]&gt;]]&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:47.930298" elapsed="0.001100"/>
</kw>
<arg>${message}</arg>
<doc>Transmit message to Netconf connection and discard the echo of the message.</doc>
<status status="PASS" start="2026-08-23T02:07:47.927574" elapsed="0.003881"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:47.986745" level="INFO">&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="72"&gt;
    &lt;data&gt;
        &lt;aaa-encrypt-service-config xmlns="config:aaa:authn:encrypt:service:config"&gt;
            &lt;encrypt-type&gt;AES&lt;/encrypt-type&gt;
            &lt;encrypt-key-length&gt;128&lt;/encrypt-key-length&gt;
            &lt;password-length&gt;12&lt;/password-length&gt;
            &lt;cipher-transforms&gt;AES/GCM/NoPadding&lt;/cipher-transforms&gt;
            &lt;encrypt-key&gt;svW8eCV45iNA&lt;/encrypt-key&gt;
            &lt;encrypt-salt&gt;szGsvGrFGnYbd9nd1t9nEw==&lt;/encrypt-salt&gt;
            &lt;auth-tag-length&gt;128&lt;/auth-tag-length&gt;
            &lt;encrypt-method&gt;PBKDF2WithHmacSHA1&lt;/encrypt-method&gt;
            &lt;encrypt-iteration-count&gt;32768&lt;/encrypt-iteration-count&gt;
        &lt;/aaa-encrypt-service-config&gt;
        &lt;key-stores xmlns="urn:opendaylight:yang:aaa:cert:mdsal"&gt;
            &lt;id&gt;KeyStores:1&lt;/id&gt;
            &lt;ssl-data&gt;
                &lt;bundle-name&gt;opendaylight&lt;/bundle-name&gt;
                &lt;tls-protocols/&gt;
                &lt;odl-keystore&gt;
                    &lt;store-password&gt;szGsvGrFGnYbd9nd1t9nE/fx+V2RdCDYC56eieY+0NUj2isn/xZEgHOUDk8=&lt;/store-password&gt;
                    &lt;sign-alg&gt;SHA1WithRSAEncryption&lt;/sign-alg&gt;
                    &lt;validity&gt;365&lt;/validity&gt;
                    &lt;alias&gt;controller&lt;/alias&gt;
                    &lt;name&gt;ctl.jks&lt;/name&gt;
                    &lt;dname&gt;CN=ODL, OU=Dev, O=LinuxFoundation, L=QC Montreal, C=CA&lt;/dname&gt;
                    &lt;keystoreFile&gt;szGsvGrFGnYbd9nd1t9nE0JpQtr6AxLteOf9yUIRItqLm3NkTNx/el6TA99g1gQs8oNL0ip4IPpl4rt7rFRRPPBAYfnI5Hkh+b8tHGDNwygXVh0qPTd02Ju1oPl0gQiXDeG3LxTe8oV0ONxVMiVDPRLInTiudW5V+NAL0c/qNo47UDfypSDuyY7eUL/QqoheS+TBVtkEivw2fS5E+lNKVmSRnedcKds+JRGqsn0ie6kCPmdOS26Zo5s8D6M2tT+r5in4jHovTq6a3RAmy5ZEJJbHJx/m+Y3778MRBkcD2nV3THNE3WXHfY8z+tUfGap/IGFvqumYYtRL35QgVchzJa3JZ2mMxPc2WLe5i2J1nYXYU6QDbT3UoksnTVzBRz0eznEzQQs47v/7gSOqx+Xug8kld3PASYNi5fZD0YmZGe+lI8ON47+4URudcRM9QmzWRu2LhIpGk8Fk0ueaJh5QF0VbVHat5S7fi1fkSNf2wHTs2pFv75hWSsg+7KDTAgfExMImhBPJ+pc8raT7kLEYiBPXy8NMvlDSksgfvSIcyyharJNj8wtxEFkBVWeX0SFzwlZy9oICi+li5ZM8WhSAbtBGTbpBJ9ADwg8WZo7uznJx+rhIUrjoziNRYqUVp/euIq6rjbE/k6jZCtKTP/qoqy0lShP6M9GfuB6O1akHdOHMWOqX2Q6G8qdVPuyAshiJrIthlJEiY5LX8xhXOQDAuGvwB5hFN/aXa0bMksLEHsTKpXSRnhLCJQxzrKpSSIuQqMzsDUQJQMzch1NGpbSFDwOySU5aeyvsTo4AYPT6Xf6YhGsYDk39B6R/CFsBVO13/4SfkiINKvhpYwQ/vfftmmF/7SXYXp/YR7nffSZTr1ooWJHAaGzqAQw+it9HIaJd7IqTROyhS23F00eX3h/OVwbsBB6PmGXh0LvOoCEfctsl0hTpnouPExetsGBZ7dfPpQIK5UiizhBZjKfr1N3dRVawGP2tFckp3xB0Fr3W8nqRCcWxi5oDGtKcK+z5LinRpCeurFbtZwatTqgh1o/KRXdpQ9E+QmJuyIUnIjoxwuFejwHujtyJR+uAvC90T+G09PnaaMGALkmiJ3kiDn5waQup2qhptMUuF1ZjNirqcbAh7MoEtU02PCQAlBmV0D9Uvp/q9Iw3EFmWhfNT8w/Y03VHw2AK7DY94gJq0vmVUD96ahn4UvWXL5CjFyzXD8ikqdV0fx3zamP53xl6LhQUwBWwiaZVZ6qpfmuSfHRBoOKn5FGmIVpQtgs1i2OYsf8CFMdds6HkzCU9ZR5bcNIUz3U7KzxhaZNpj+tBPjCe5knbuvODRT9AIIZr5NL8zkfLG0R/DySEUJEP9MZFDzaYKqwZUQK9u9lyxXBdRZ/nJJVpYkbOdjraUZOn2wX1MOv768TylMxft2elpWtyo51E7XJca0zO3FT+T6dEDLNuLf70Tjf4ZKlXIs+rbMZRzJiNPU/gOOCncjGnQg7yVNt6CXFzLloYDKyI1+nXar0j8Y7aLeRw4ANqfONtf/a/feF1rxUgkr9kpwha7YR6ZbwLsgEqRGQ1yP0UUYTN4tW9P1fKN220ZErjmNLf5y9d4E1kw0JC9Aowy1OIPHC+GoIH2GXmLp6xrwtvDNX0N9GVVtWxGfdOuRunqus5wncxwKSsJHEV7gC7CttHVSQuYxf+qSVzxDZdZhrEFRDM+2ehQr+jYPjBFDfrFrZ6APcuc6eG8uNgDwFBIT/AvuHqnX/J/C5nmpguP7J8i+L6Tq/vaE06wHDJDHx4janBzQWz38QKtnFFVvSuYlPq4xpjc4XL0w==&lt;/keystoreFile&gt;
                    &lt;key-alg&gt;RSA&lt;/key-alg&gt;
                    &lt;keysize&gt;1024&lt;/keysize&gt;
                &lt;/odl-keystore&gt;
                &lt;cipher-suites&gt;
                    &lt;suiteName/&gt;
                &lt;/cipher-suites&gt;
                &lt;trust-keystore&gt;
                    &lt;keystoreFile&gt;szGsvGrFGnYbd9nd1t9nE0JpQtr6AxLteOf9yIktC+veMTpJpq+B4qQuq9ISdPV1uRcHSk71SvQM3Yb0MmEuAA==&lt;/keystoreFile&gt;
                    &lt;store-password&gt;szGsvGrFGnYbd9nd1t9nE/re1XnJbnW5IKOJusQBPKYGj7gRRA5Mm2KIwp4=&lt;/store-password&gt;
                    &lt;name&gt;truststore.jks&lt;/name&gt;
                &lt;/trust-keystore&gt;
            &lt;/ssl-data&gt;
        &lt;/key-stores&gt;
        &lt;people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:people"&gt;
            &lt;person&gt;
                &lt;id&gt;CUSTOLD&lt;/id&gt;
                &lt;age&gt;99&lt;/age&gt;
            &lt;/person&gt;
            &lt;person&gt;
                &lt;id&gt;CUSTMID&lt;/id&gt;
                &lt;age&gt;40&lt;/age&gt;
            &lt;/person&gt;
            &lt;person&gt;
                &lt;id&gt;CUSTOLD2&lt;/id&gt;
                &lt;age&gt;65&lt;/age&gt;
            &lt;/person&gt;
            &lt;person&gt;
                &lt;id&gt;CUSTYOUNG&lt;/id&gt;
                &lt;age&gt;27&lt;/age&gt;
            &lt;/person&gt;
        &lt;/people&gt;
        &lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people"&gt;
            &lt;car-person&gt;
                &lt;car-id&gt;REPLACE&lt;/car-id&gt;
                &lt;person-id&gt;CUSTYOUNG&lt;/person-id&gt;
            &lt;/car-person&gt;
        &lt;/car-people&gt;
        &lt;cars xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car"&gt;
            &lt;car-entry&gt;
                &lt;id&gt;REPLACE&lt;/id&gt;
                &lt;model&gt;Panda&lt;/model&gt;
                &lt;year&gt;2003&lt;/year&gt;
                &lt;manufacturer&gt;FIAT&lt;/manufacturer&gt;
            &lt;/car-entry&gt;
        &lt;/cars&gt;
    &lt;/data&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<msg time="2026-08-23T02:07:47.986959" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="72"&gt;
    &lt;data&gt;
        &lt;aaa-encrypt-service-config xmlns="config:aaa...</msg>
<var>${reply}</var>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:47.931593" elapsed="0.055396"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:47.987042" elapsed="0.000034"/>
</return>
<msg time="2026-08-23T02:07:47.987202" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="72"&gt;
    &lt;data&gt;
        &lt;aaa-encrypt-service-config xmlns="config:aaa...</msg>
<var>${reply}</var>
<arg>${request}</arg>
<doc>Send message to Netconf connection and get the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:47.927084" elapsed="0.060147"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:47.987275" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:07:47.987420" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="72"&gt;
    &lt;data&gt;
        &lt;aaa-encrypt-service-config xmlns="config:aaa...</msg>
<var>${reply}</var>
<arg>merge-multiple-replace-check</arg>
<doc>Load a message from the data file set, send it to Netconf and return the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:47.925731" elapsed="0.061716"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;REPLACE&lt;/id&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:47.987607" elapsed="0.000389"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;manufacturer&gt;FIAT&lt;/manufacturer&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:47.988144" elapsed="0.000286"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;model&gt;Panda&lt;/model&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:47.988577" elapsed="0.000300"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;year&gt;2003&lt;/year&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:47.989023" elapsed="0.000284"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;car-id&gt;REPLACE&lt;/car-id&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:47.989450" elapsed="0.000282"/>
</kw>
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;TOY001&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:47.989893" elapsed="0.000286"/>
</kw>
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CUST001&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:47.990351" elapsed="0.000283"/>
</kw>
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;car-id&gt;TOY001&lt;/car-id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:47.990781" elapsed="0.000301"/>
</kw>
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUST001&lt;/person-id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:47.991264" elapsed="0.000289"/>
</kw>
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;OLD001&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:47.991697" elapsed="0.000310"/>
</kw>
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CUST002&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:47.992149" elapsed="0.000280"/>
</kw>
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;car-id&gt;OLD001&lt;/car-id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:47.992570" elapsed="0.000293"/>
</kw>
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUST002&lt;/person-id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:47.993004" elapsed="0.000317"/>
</kw>
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CAROLD&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:47.993464" elapsed="0.000279"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CUSTOLD&lt;/id&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:47.993900" elapsed="0.000284"/>
</kw>
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;car-id&gt;CAROLD&lt;/car-id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:47.994324" elapsed="0.000282"/>
</kw>
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUSTOLD&lt;/person-id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:47.994747" elapsed="0.000305"/>
</kw>
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CARYOUNG&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:47.995193" elapsed="0.000281"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CUSTYOUNG&lt;/id&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:47.995615" elapsed="0.000319"/>
</kw>
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;car-id&gt;CARYOUNG&lt;/car-id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:47.996077" elapsed="0.000279"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUSTYOUNG&lt;/person-id&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:47.996497" elapsed="0.000276"/>
</kw>
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CARMID&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:47.996929" elapsed="0.000279"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CUSTMID&lt;/id&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:47.997348" elapsed="0.000275"/>
</kw>
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;car-id&gt;CARMID&lt;/car-id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:47.997764" elapsed="0.000298"/>
</kw>
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUSTMID&lt;/person-id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:47.998239" elapsed="0.000284"/>
</kw>
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CAROLD2&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:47.998665" elapsed="0.000299"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CUSTOLD2&lt;/id&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:47.999105" elapsed="0.000278"/>
</kw>
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;car-id&gt;CAROLD2&lt;/car-id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:47.999523" elapsed="0.000279"/>
</kw>
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;person-id&gt;CUSTOLD2&lt;/person-id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:47.999978" elapsed="0.000280"/>
</kw>
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;CUSTBAD&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:48.000399" elapsed="0.000276"/>
</kw>
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${reply}</arg>
<arg>&lt;id&gt;test&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="PASS" start="2026-08-23T02:07:48.000819" elapsed="0.000296"/>
</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-08-23T02:07:48.002489" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:48.002114" elapsed="0.000437"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.002095" elapsed="0.000481"/>
</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-08-23T02:07:48.002711" elapsed="0.000334"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:07:48.007727" 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-08-23T02:07:48.007318" elapsed="0.000436"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-08-23T02:07:48.008025" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-23T02:07:48.007879" elapsed="0.000205"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.007859" elapsed="0.000249"/>
</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-08-23T02:07:48.008245" 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-08-23T02:07:48.008404" elapsed="0.000019"/>
</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-08-23T02:07:48.008560" 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-08-23T02:07:48.008711" 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-08-23T02:07:48.008877" 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-08-23T02:07:48.009032" 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-08-23T02:07:48.009180" elapsed="0.000018"/>
</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-08-23T02:07:48.007024" elapsed="0.002230"/>
</kw>
<status status="PASS" start="2026-08-23T02:07:48.001903" elapsed="0.007400"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-08-23T02:07:48.001384" elapsed="0.007960"/>
</kw>
<doc>Check that the new content is there and the old content is gone.</doc>
<status status="PASS" start="2026-08-23T02:07:47.842989" elapsed="0.166393"/>
</test>
<test id="s1-s3-s1-t41" name="Remove_Test_Data" line="278">
<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-08-23T02:07:48.012464" elapsed="0.000207"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:07:48.012216" elapsed="0.000511"/>
</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-08-23T02:07:48.013681" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:48.013574" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.013555" elapsed="0.000195"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:48.019998" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:48.019887" elapsed="0.000223"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.019867" elapsed="0.000271"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:48.021121" 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-08-23T02:07:48.020719" elapsed="0.000428"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:07:48.021591" 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-08-23T02:07:48.021293" elapsed="0.000324"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:07:48.021661" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:48.021814" 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-08-23T02:07:48.020358" elapsed="0.001496"/>
</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-08-23T02:07:48.026899" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:48.026776" elapsed="0.000170"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.026757" elapsed="0.000211"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:48.028180" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:48.028074" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.028056" elapsed="0.000192"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:07:48.028742" level="INFO">${karaf_connection_index} = 18</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-08-23T02:07:48.028378" elapsed="0.000390"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.029177" level="INFO">${current_connection_index} = 23</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-08-23T02:07:48.028929" elapsed="0.000273"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.058118" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:48.029721" elapsed="0.028558"/>
</kw>
<msg time="2026-08-23T02:07:48.058446" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:07:48.058491" 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 "n "e "t "c "o "n "f "...</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-08-23T02:07:48.029348" elapsed="0.029180"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.077125" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "R "e "m "o "v "e "_ "T "e "s "t "_ "D "a "t "a "[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-08-23T02:07:48.059082" elapsed="0.018215"/>
</kw>
<msg time="2026-08-23T02:07:48.077463" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:07:48.077507" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "R "e "m "o "v "e "_ "T "e "s "t "_ ...</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-08-23T02:07:48.058683" elapsed="0.018860"/>
</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-08-23T02:07:48.077823" elapsed="0.000061"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:48.077618" elapsed="0.000322"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.077599" elapsed="0.000366"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:48.078465" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "R "e "m "o "v "e "_ "T "e "s "t "_ "D "a "t "a "[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-08-23T02:07:48.078095" elapsed="0.000436"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:48.078796" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:48.078596" elapsed="0.000294"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.078579" elapsed="0.000336"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:07:48.078949" 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-08-23T02:07:48.081801" elapsed="0.000168"/>
</kw>
<msg time="2026-08-23T02:07:48.082043" 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-08-23T02:07:48.081164" elapsed="0.000976"/>
</kw>
<kw name="Open 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-08-23T02:07:48.082986" elapsed="0.000037"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:48.083820" elapsed="0.000061"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:07:48.079792" elapsed="0.004169"/>
</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-08-23T02:07:48.079200" elapsed="0.004877"/>
</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-08-23T02:07:48.027747" elapsed="0.056428"/>
</kw>
<msg time="2026-08-23T02:07:48.084266" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:48.084310" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "R "e "m "o "v "e "_ "T "e "s "t "_ ...</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-08-23T02:07:48.027106" elapsed="0.057241"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:07:48.084681" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-23T02:07:48.084422" elapsed="0.000320"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.084404" elapsed="0.000364"/>
</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-08-23T02:07:48.085342" 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-08-23T02:07:48.085659" elapsed="0.000026"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:07:48.085732" 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-08-23T02:07:48.026443" elapsed="0.059418"/>
</kw>
<msg time="2026-08-23T02:07:48.085957" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:48.086000" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "R "e "m "o "v "e "_ "T "e "s "t "_ ...</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-08-23T02:07:48.022221" elapsed="0.063815"/>
</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-08-23T02:07:48.086346" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:48.086111" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.086093" elapsed="0.000330"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:07:48.022090" elapsed="0.064355"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:07:48.021911" elapsed="0.064564"/>
</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-08-23T02:07:48.019467" elapsed="0.067061"/>
</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-08-23T02:07:48.013291" elapsed="0.073290"/>
</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-08-23T02:07:48.012882" elapsed="0.073742"/>
</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-08-23T02:07:48.010219" elapsed="0.076456"/>
</kw>
<kw name="Perform_Test">
<kw name="Load_And_Send_Message">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:48.087971" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-multiple-remove-request.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-multiple-remove-request.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:48.088165" level="INFO">${data} = &lt;rpc message-id="6" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
&lt;edit-config&gt;
    &lt;target&gt;
        &lt;candidate/&gt;
    &lt;/target&gt;
    &lt;test-option&gt;
        set
    &lt;/test-option&gt;
    &lt;default-operati...</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:48.087738" elapsed="0.000456"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:48.088242" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:48.088388" level="INFO">${request} = &lt;rpc message-id="6" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
&lt;edit-config&gt;
    &lt;target&gt;
        &lt;candidate/&gt;
    &lt;/target&gt;
    &lt;test-option&gt;
        set
    &lt;/test-option&gt;
    &lt;default-operati...</msg>
<var>${request}</var>
<arg>${name}-request</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:48.087438" elapsed="0.000978"/>
</kw>
<kw name="Send_Message">
<kw name="Transmit_Message">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.091236" level="INFO">&lt;rpc message-id="6" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;</msg>
<arg>${message}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:48.089160" elapsed="0.002134"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.091774" level="INFO">&lt;edit-config&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:48.091435" elapsed="0.000390"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.098051" level="INFO">&lt;target&gt;
        &lt;candidate/&gt;
    &lt;/target&gt;
    &lt;test-option&gt;
        set
    &lt;/test-option&gt;
    &lt;default-operation&gt;none&lt;/default-operation&gt;
    &lt;config xmlns:a="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
    &lt;cars xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car" a:operation="remove"&gt;
    &lt;/cars&gt;
    &lt;people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:people" a:operation="remove"&gt;
    &lt;/people&gt;
    &lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people" a:operation="remove"&gt;
    &lt;/car-people&gt;
    &lt;/config&gt;
&lt;/edit-config&gt;
&lt;/rpc&gt;

]]&gt;]]&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:48.092028" elapsed="0.006088"/>
</kw>
<arg>${message}</arg>
<doc>Transmit message to Netconf connection and discard the echo of the message.</doc>
<status status="PASS" start="2026-08-23T02:07:48.088861" elapsed="0.009313"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.099884" level="INFO">&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="6"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<msg time="2026-08-23T02:07:48.099972" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="6"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:48.098313" elapsed="0.001687"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:48.100046" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:48.100194" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="6"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${request}</arg>
<doc>Send message to Netconf connection and get the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:48.088556" elapsed="0.011665"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:48.100265" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:07:48.100407" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="6"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${actual}</var>
<arg>${name}</arg>
<doc>Load a message from the data file set, send it to Netconf and return the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:48.087134" elapsed="0.013301"/>
</kw>
<kw name="Load_Expected_Reply">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:48.101395" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-multiple-remove-reply.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-multiple-remove-reply.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:48.101523" level="INFO">${data} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="6"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:48.101184" elapsed="0.000367"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:48.101598" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:07:48.101745" level="INFO">${expected_reply} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="6"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected_reply}</var>
<arg>${name}-reply</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:48.100879" elapsed="0.000893"/>
</kw>
<return>
<value>${expected_reply}</value>
<status status="PASS" start="2026-08-23T02:07:48.101816" elapsed="0.000040"/>
</return>
<msg time="2026-08-23T02:07:48.101979" level="INFO">${expected} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="6"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected}</var>
<arg>${name}</arg>
<doc>Load the expected reply from the data file set and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:48.100573" elapsed="0.001434"/>
</kw>
<kw name="Remove String" owner="String">
<msg time="2026-08-23T02:07:48.102346" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="6"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>]]&gt;]]&gt;</arg>
<doc>Removes all ``removables`` from the given ``string``.</doc>
<status status="PASS" start="2026-08-23T02:07:48.102149" elapsed="0.000226"/>
</kw>
<kw name="Strip String" owner="String">
<msg time="2026-08-23T02:07:48.102739" level="INFO">${actual} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="6"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>mode=both</arg>
<doc>Remove leading and/or trailing whitespaces from the given string.</doc>
<status status="PASS" start="2026-08-23T02:07:48.102519" elapsed="0.000249"/>
</kw>
<kw name="Elements Should Be Equal" owner="XML">
<arg>${actual}</arg>
<arg>${expected}</arg>
<arg>normalize_whitespace=True</arg>
<doc>Verifies that the given ``source`` element is equal to ``expected``.</doc>
<status status="PASS" start="2026-08-23T02:07:48.102927" elapsed="0.000459"/>
</kw>
<return>
<value>${actual}</value>
<status status="PASS" start="2026-08-23T02:07:48.103440" elapsed="0.000028"/>
</return>
<arg>merge-multiple-remove</arg>
<doc>Load and send the request from the dataset and compare the returned reply to the one stored in the dataset.</doc>
<status status="PASS" start="2026-08-23T02:07:48.086855" elapsed="0.016708"/>
</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-08-23T02:07:48.104965" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:48.104582" elapsed="0.000446"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.104564" elapsed="0.000490"/>
</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-08-23T02:07:48.105188" elapsed="0.000311"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:07:48.110166" 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-08-23T02:07:48.109742" elapsed="0.000451"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-08-23T02:07:48.110407" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:07:48.110267" elapsed="0.000197"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.110248" elapsed="0.000240"/>
</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-08-23T02:07:48.110623" 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-08-23T02:07:48.110778" 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-08-23T02:07:48.110957" elapsed="0.000042"/>
</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-08-23T02:07:48.111135" 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-08-23T02:07:48.111286" 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-08-23T02:07:48.111435" 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-08-23T02:07:48.111611" 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-08-23T02:07:48.109449" elapsed="0.002242"/>
</kw>
<status status="PASS" start="2026-08-23T02:07:48.104162" elapsed="0.007578"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-08-23T02:07:48.103806" elapsed="0.007973"/>
</kw>
<doc>Remove the testing elements and all their subelements and check the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:48.009679" elapsed="0.102138"/>
</test>
<test id="s1-s3-s1-t42" name="Commit_Test_Data_Removal" line="282">
<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-08-23T02:07:48.114766" elapsed="0.000251"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:07:48.114520" 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-08-23T02:07:48.116025" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:48.115916" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.115897" elapsed="0.000196"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:48.120519" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:48.120413" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.120395" elapsed="0.000192"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:48.121567" 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-08-23T02:07:48.121173" elapsed="0.000421"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:07:48.122052" 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-08-23T02:07:48.121741" elapsed="0.000337"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:07:48.122123" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:07:48.122275" 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-08-23T02:07:48.120798" elapsed="0.001502"/>
</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-08-23T02:07:48.127527" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:48.127418" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.127399" elapsed="0.000197"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:48.128770" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:48.128664" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.128646" elapsed="0.000215"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:07:48.129352" level="INFO">${karaf_connection_index} = 18</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-08-23T02:07:48.128996" elapsed="0.000383"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.129806" level="INFO">${current_connection_index} = 23</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-08-23T02:07:48.129560" elapsed="0.000288"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.170655" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:48.130376" elapsed="0.040487"/>
</kw>
<msg time="2026-08-23T02:07:48.171043" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:07:48.171090" 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 "n "e "t "c "o "n "f "...</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-08-23T02:07:48.130000" elapsed="0.041128"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.200842" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "o "m "m "i "t "_ "T "e "s "t "_ "D "a "t "a "_ "R "e "m "o "v "a "l "[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-08-23T02:07:48.171696" elapsed="0.029328"/>
</kw>
<msg time="2026-08-23T02:07:48.201193" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:07:48.201239" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "o "m "m "i "t "_ "T "e "s "t "_ ...</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-08-23T02:07:48.171298" elapsed="0.029978"/>
</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-08-23T02:07:48.201572" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:48.201357" elapsed="0.000290"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.201335" elapsed="0.000338"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:48.202209" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "o "m "m "i "t "_ "T "e "s "t "_ "D "a "t "a "_ "R "e "m "o "v "a "l "[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-08-23T02:07:48.201806" elapsed="0.000487"/>
</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-08-23T02:07:48.202564" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:48.202360" elapsed="0.000280"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.202342" elapsed="0.000323"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:07:48.202701" elapsed="0.000032"/>
</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-08-23T02:07:48.205631" elapsed="0.000149"/>
</kw>
<msg time="2026-08-23T02:07:48.205873" 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-08-23T02:07:48.204962" elapsed="0.001016"/>
</kw>
<kw name="Open 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-08-23T02:07:48.206797" elapsed="0.000074"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:48.207647" elapsed="0.000036"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:07:48.203563" elapsed="0.004199"/>
</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-08-23T02:07:48.202987" elapsed="0.004916"/>
</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-08-23T02:07:48.128360" elapsed="0.079645"/>
</kw>
<msg time="2026-08-23T02:07:48.208097" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:48.208141" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "o "m "m "i "t "_ "T "e "s "t "_ ...</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-08-23T02:07:48.127736" elapsed="0.080444"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:07:48.208362" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:07:48.208256" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.208238" elapsed="0.000206"/>
</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-08-23T02:07:48.208829" elapsed="0.000216"/>
</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-08-23T02:07:48.209344" elapsed="0.000026"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:07:48.209459" 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-08-23T02:07:48.127080" elapsed="0.082492"/>
</kw>
<msg time="2026-08-23T02:07:48.209664" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:48.209708" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "o "m "m "i "t "_ "T "e "s "t "_ ...</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-08-23T02:07:48.122647" elapsed="0.087098"/>
</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-08-23T02:07:48.210076" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:48.209820" elapsed="0.000311"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.209802" elapsed="0.000352"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:07:48.122517" elapsed="0.087660"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:07:48.122352" elapsed="0.087880"/>
</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-08-23T02:07:48.120060" elapsed="0.090229"/>
</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-08-23T02:07:48.115614" elapsed="0.094732"/>
</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-08-23T02:07:48.115212" elapsed="0.095184"/>
</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-08-23T02:07:48.112565" elapsed="0.097884"/>
</kw>
<kw name="Perform_Test">
<kw name="Load_And_Send_Message">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:48.211960" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-multiple-remove-commit-request.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-multiple-remove-commit-request.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:48.212149" level="INFO">${data} = &lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="8"&gt;
&lt;commit/&gt;
&lt;/rpc&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:48.211516" elapsed="0.000661"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:48.212225" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:48.212375" level="INFO">${request} = &lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="8"&gt;
&lt;commit/&gt;
&lt;/rpc&gt;
</msg>
<var>${request}</var>
<arg>${name}-request</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:48.211212" elapsed="0.001189"/>
</kw>
<kw name="Send_Message">
<kw name="Transmit_Message">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.214809" level="INFO">&lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="8"&gt;</msg>
<arg>${message}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:48.213151" elapsed="0.001729"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.215327" level="INFO">&lt;commit/&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:48.215021" elapsed="0.000357"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.215910" level="INFO">&lt;/rpc&gt;

]]&gt;]]&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:48.215515" elapsed="0.000448"/>
</kw>
<arg>${message}</arg>
<doc>Transmit message to Netconf connection and discard the echo of the message.</doc>
<status status="PASS" start="2026-08-23T02:07:48.212851" elapsed="0.003167"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.224138" level="INFO">&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="8"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<msg time="2026-08-23T02:07:48.224230" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="8"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:48.216153" elapsed="0.008105"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:48.224305" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:07:48.224454" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="8"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${request}</arg>
<doc>Send message to Netconf connection and get the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:48.212543" elapsed="0.011940"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:48.224527" elapsed="0.000025"/>
</return>
<msg time="2026-08-23T02:07:48.224669" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="8"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${actual}</var>
<arg>${name}</arg>
<doc>Load a message from the data file set, send it to Netconf and return the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:48.210919" elapsed="0.013778"/>
</kw>
<kw name="Load_Expected_Reply">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:48.225666" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-multiple-remove-commit-reply.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/merge-multiple-remove-commit-reply.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:48.225795" level="INFO">${data} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="8"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:48.225457" elapsed="0.000414"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:48.225921" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:07:48.226086" level="INFO">${expected_reply} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="8"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected_reply}</var>
<arg>${name}-reply</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:48.225152" elapsed="0.000962"/>
</kw>
<return>
<value>${expected_reply}</value>
<status status="PASS" start="2026-08-23T02:07:48.226158" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:07:48.226306" level="INFO">${expected} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="8"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected}</var>
<arg>${name}</arg>
<doc>Load the expected reply from the data file set and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:48.224855" elapsed="0.001478"/>
</kw>
<kw name="Remove String" owner="String">
<msg time="2026-08-23T02:07:48.226686" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="8"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>]]&gt;]]&gt;</arg>
<doc>Removes all ``removables`` from the given ``string``.</doc>
<status status="PASS" start="2026-08-23T02:07:48.226478" elapsed="0.000237"/>
</kw>
<kw name="Strip String" owner="String">
<msg time="2026-08-23T02:07:48.227108" level="INFO">${actual} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="8"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>mode=both</arg>
<doc>Remove leading and/or trailing whitespaces from the given string.</doc>
<status status="PASS" start="2026-08-23T02:07:48.226878" elapsed="0.000259"/>
</kw>
<kw name="Elements Should Be Equal" owner="XML">
<arg>${actual}</arg>
<arg>${expected}</arg>
<arg>normalize_whitespace=True</arg>
<doc>Verifies that the given ``source`` element is equal to ``expected``.</doc>
<status status="PASS" start="2026-08-23T02:07:48.227284" elapsed="0.000432"/>
</kw>
<return>
<value>${actual}</value>
<status status="PASS" start="2026-08-23T02:07:48.227772" elapsed="0.000029"/>
</return>
<arg>merge-multiple-remove-commit</arg>
<doc>Load and send the request from the dataset and compare the returned reply to the one stored in the dataset.</doc>
<status status="PASS" start="2026-08-23T02:07:48.210615" elapsed="0.017299"/>
</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-08-23T02:07:48.229123" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:48.228729" elapsed="0.000457"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.228709" elapsed="0.000502"/>
</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-08-23T02:07:48.229344" elapsed="0.000313"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:07:48.234605" 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-08-23T02:07:48.234180" elapsed="0.000453"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-08-23T02:07:48.234868" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-23T02:07:48.234708" elapsed="0.000218"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.234689" elapsed="0.000262"/>
</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-08-23T02:07:48.235088" 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-08-23T02:07:48.235246" 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-08-23T02:07:48.235411" elapsed="0.000023"/>
</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-08-23T02:07:48.235572" 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-08-23T02:07:48.235725" 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-08-23T02:07:48.235896" 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-08-23T02:07:48.236053" 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-08-23T02:07:48.233848" elapsed="0.002280"/>
</kw>
<status status="PASS" start="2026-08-23T02:07:48.228518" elapsed="0.007660"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-08-23T02:07:48.228167" elapsed="0.008051"/>
</kw>
<doc>Commit the removal and check the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:48.112098" elapsed="0.124159"/>
</test>
<test id="s1-s3-s1-t43" name="Connector_Simplified_Pattern" line="286">
<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-08-23T02:07:48.239459" elapsed="0.000216"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:07:48.239201" elapsed="0.000529"/>
</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-08-23T02:07:48.240726" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:48.240614" elapsed="0.000161"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.240594" elapsed="0.000203"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:48.245443" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:48.245332" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.245314" elapsed="0.000198"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:48.246543" 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-08-23T02:07:48.246156" elapsed="0.000422"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:07:48.247056" 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-08-23T02:07:48.246730" elapsed="0.000353"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:07:48.247128" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:48.247285" 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-08-23T02:07:48.245739" elapsed="0.001572"/>
</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-08-23T02:07:48.252638" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:48.252528" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.252508" elapsed="0.000210"/>
</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-08-23T02:07:48.253981" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:48.253815" elapsed="0.000214"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.253796" elapsed="0.000255"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:07:48.254554" level="INFO">${karaf_connection_index} = 18</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-08-23T02:07:48.254189" elapsed="0.000392"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.255015" level="INFO">${current_connection_index} = 23</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-08-23T02:07:48.254740" elapsed="0.000301"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.314264" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:48.255572" elapsed="0.058857"/>
</kw>
<msg time="2026-08-23T02:07:48.314614" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:07:48.314661" 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 "n "e "t "c "o "n "f "...</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-08-23T02:07:48.255191" elapsed="0.059507"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.340680" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "o "n "n "e "c "t "o "r "_ "S "i "m "p "l "i "f "i "e "d "_ "P "a "t "t "e "r "n "[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-08-23T02:07:48.315274" elapsed="0.025617"/>
</kw>
<msg time="2026-08-23T02:07:48.341068" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:07:48.341115" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "o "n "n "e "c "t "o "r "_ "S "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-08-23T02:07:48.314886" elapsed="0.026265"/>
</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-08-23T02:07:48.341472" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:48.341258" elapsed="0.000292"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.341238" elapsed="0.000337"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:48.342125" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "o "n "n "e "c "t "o "r "_ "S "i "m "p "l "i "f "i "e "d "_ "P "a "t "t "e "r "n "[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-08-23T02:07:48.341710" elapsed="0.000487"/>
</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-08-23T02:07:48.342471" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:48.342264" elapsed="0.000319"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.342246" elapsed="0.000364"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:07:48.342645" elapsed="0.000031"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-23T02:07:48.345623" elapsed="0.000150"/>
</kw>
<msg time="2026-08-23T02:07:48.345871" 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-08-23T02:07:48.344947" elapsed="0.001038"/>
</kw>
<kw name="Open 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-08-23T02:07:48.346780" elapsed="0.000038"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:48.347638" elapsed="0.000038"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:07:48.343537" elapsed="0.004219"/>
</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-08-23T02:07:48.342948" elapsed="0.004957"/>
</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-08-23T02:07:48.253505" elapsed="0.094525"/>
</kw>
<msg time="2026-08-23T02:07:48.348125" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:48.348169" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "o "n "n "e "c "t "o "r "_ "S "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-08-23T02:07:48.252885" elapsed="0.095320"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:07:48.348390" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:07:48.348281" elapsed="0.000169"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.348262" 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-08-23T02:07:48.348896" 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-08-23T02:07:48.349259" elapsed="0.000027"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:07:48.349337" 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-08-23T02:07:48.252179" elapsed="0.097269"/>
</kw>
<msg time="2026-08-23T02:07:48.349541" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:48.349585" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "o "n "n "e "c "t "o "r "_ "S "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-08-23T02:07:48.247683" elapsed="0.101939"/>
</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-08-23T02:07:48.349988" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:48.349696" elapsed="0.000356"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.349678" elapsed="0.000398"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:07:48.247542" elapsed="0.102558"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:07:48.247366" elapsed="0.102764"/>
</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-08-23T02:07:48.244963" elapsed="0.105222"/>
</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-08-23T02:07:48.240301" elapsed="0.109940"/>
</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-08-23T02:07:48.239885" elapsed="0.110400"/>
</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-08-23T02:07:48.237140" elapsed="0.113198"/>
</kw>
<kw name="Perform_Test">
<kw name="Load_And_Send_Message">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:48.352012" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/none-replace-request.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/none-replace-request.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:48.352167" level="INFO">${data} = &lt;rpc message-id="m-1" a="64" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
    &lt;edit-config&gt;
        &lt;target&gt;
            &lt;candidate/&gt;
        &lt;/target&gt;
        &lt;default-operation&gt;none&lt;/default-ope...</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:48.351576" elapsed="0.000620"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:48.352244" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:07:48.352396" level="INFO">${request} = &lt;rpc message-id="m-1" a="64" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
    &lt;edit-config&gt;
        &lt;target&gt;
            &lt;candidate/&gt;
        &lt;/target&gt;
        &lt;default-operation&gt;none&lt;/default-ope...</msg>
<var>${request}</var>
<arg>${name}-request</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:48.351265" elapsed="0.001192"/>
</kw>
<kw name="Send_Message">
<kw name="Transmit_Message">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.357369" level="INFO">&lt;rpc message-id="m-1" a="64" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;</msg>
<arg>${message}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:48.353271" elapsed="0.004156"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.357974" level="INFO">&lt;edit-config&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:48.357573" elapsed="0.000453"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.362695" level="INFO">&lt;target&gt;
            &lt;candidate/&gt;
        &lt;/target&gt;
        &lt;default-operation&gt;none&lt;/default-operation&gt;
        &lt;config&gt;
            &lt;cars xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car"
                    xmlns:a="urn:ietf:params:xml:ns:netconf:base:1.0" a:operation="replace"&gt;
                &lt;car-entry&gt;
                    &lt;id&gt;connector&lt;/id&gt;
                &lt;/car-entry&gt;
            &lt;/cars&gt;
        &lt;/config&gt;
    &lt;/edit-config&gt;
&lt;/rpc&gt;

]]&gt;]]&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:48.358179" elapsed="0.004583"/>
</kw>
<arg>${message}</arg>
<doc>Transmit message to Netconf connection and discard the echo of the message.</doc>
<status status="PASS" start="2026-08-23T02:07:48.352926" elapsed="0.009899"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.365832" level="INFO">&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" a="64" message-id="m-1"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<msg time="2026-08-23T02:07:48.365938" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" a="64" message-id="m-1"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:48.362989" elapsed="0.002977"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:48.366015" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:07:48.366167" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" a="64" message-id="m-1"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${request}</arg>
<doc>Send message to Netconf connection and get the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:48.352608" elapsed="0.013588"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:48.366250" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T02:07:48.366404" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" a="64" message-id="m-1"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${actual}</var>
<arg>${name}</arg>
<doc>Load a message from the data file set, send it to Netconf and return the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:48.350788" elapsed="0.015644"/>
</kw>
<kw name="Load_Expected_Reply">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:48.367418" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/none-replace-reply.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/none-replace-reply.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:48.367549" level="INFO">${data} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" a="64" message-id="m-1"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:48.367197" elapsed="0.000380"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:48.367623" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:48.367774" level="INFO">${expected_reply} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" a="64" message-id="m-1"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected_reply}</var>
<arg>${name}-reply</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:48.366887" elapsed="0.000914"/>
</kw>
<return>
<value>${expected_reply}</value>
<status status="PASS" start="2026-08-23T02:07:48.367864" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:07:48.368013" level="INFO">${expected} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" a="64" message-id="m-1"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected}</var>
<arg>${name}</arg>
<doc>Load the expected reply from the data file set and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:48.366571" elapsed="0.001470"/>
</kw>
<kw name="Remove String" owner="String">
<msg time="2026-08-23T02:07:48.368396" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" a="64" message-id="m-1"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>]]&gt;]]&gt;</arg>
<doc>Removes all ``removables`` from the given ``string``.</doc>
<status status="PASS" start="2026-08-23T02:07:48.368184" elapsed="0.000241"/>
</kw>
<kw name="Strip String" owner="String">
<msg time="2026-08-23T02:07:48.368795" level="INFO">${actual} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" a="64" message-id="m-1"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>mode=both</arg>
<doc>Remove leading and/or trailing whitespaces from the given string.</doc>
<status status="PASS" start="2026-08-23T02:07:48.368570" elapsed="0.000254"/>
</kw>
<kw name="Elements Should Be Equal" owner="XML">
<arg>${actual}</arg>
<arg>${expected}</arg>
<arg>normalize_whitespace=True</arg>
<doc>Verifies that the given ``source`` element is equal to ``expected``.</doc>
<status status="PASS" start="2026-08-23T02:07:48.369014" elapsed="0.000431"/>
</kw>
<return>
<value>${actual}</value>
<status status="PASS" start="2026-08-23T02:07:48.369500" elapsed="0.000027"/>
</return>
<arg>none-replace</arg>
<doc>Load and send the request from the dataset and compare the returned reply to the one stored in the dataset.</doc>
<status status="PASS" start="2026-08-23T02:07:48.350505" elapsed="0.019119"/>
</kw>
<kw name="Perform_Test">
<kw name="Load_And_Send_Message">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:48.370934" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/commit-edit-request.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/commit-edit-request.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:48.371099" level="INFO">${data} = &lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="4"&gt;
&lt;commit/&gt;
&lt;/rpc&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:48.370704" elapsed="0.000423"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:48.371174" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:48.371332" level="INFO">${request} = &lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="4"&gt;
&lt;commit/&gt;
&lt;/rpc&gt;
</msg>
<var>${request}</var>
<arg>${name}-request</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:48.370392" elapsed="0.000969"/>
</kw>
<kw name="Send_Message">
<kw name="Transmit_Message">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.373626" level="INFO">&lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="4"&gt;</msg>
<arg>${message}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:48.372117" elapsed="0.001580"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.374213" level="INFO">&lt;commit/&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:48.373875" elapsed="0.000390"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.375335" level="INFO">&lt;/rpc&gt;

]]&gt;]]&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:48.374426" elapsed="0.000985"/>
</kw>
<arg>${message}</arg>
<doc>Transmit message to Netconf connection and discard the echo of the message.</doc>
<status status="PASS" start="2026-08-23T02:07:48.371797" elapsed="0.003687"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.383063" level="INFO">&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="4"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<msg time="2026-08-23T02:07:48.383162" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="4"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:48.375634" elapsed="0.007557"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:48.383241" elapsed="0.000036"/>
</return>
<msg time="2026-08-23T02:07:48.383405" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="4"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${request}</arg>
<doc>Send message to Netconf connection and get the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:48.371504" elapsed="0.011931"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:48.383488" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:07:48.383644" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="4"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${actual}</var>
<arg>${name}</arg>
<doc>Load a message from the data file set, send it to Netconf and return the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:48.370086" elapsed="0.013587"/>
</kw>
<kw name="Load_Expected_Reply">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:48.384708" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/commit-edit-reply.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/commit-edit-reply.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:48.384900" level="INFO">${data} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="4"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:48.384481" elapsed="0.000448"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:48.384978" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T02:07:48.385131" level="INFO">${expected_reply} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="4"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected_reply}</var>
<arg>${name}-reply</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:48.384162" elapsed="0.000996"/>
</kw>
<return>
<value>${expected_reply}</value>
<status status="PASS" start="2026-08-23T02:07:48.385202" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:07:48.385348" level="INFO">${expected} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="4"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected}</var>
<arg>${name}</arg>
<doc>Load the expected reply from the data file set and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:48.383824" elapsed="0.001551"/>
</kw>
<kw name="Remove String" owner="String">
<msg time="2026-08-23T02:07:48.385731" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="4"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>]]&gt;]]&gt;</arg>
<doc>Removes all ``removables`` from the given ``string``.</doc>
<status status="PASS" start="2026-08-23T02:07:48.385527" elapsed="0.000233"/>
</kw>
<kw name="Strip String" owner="String">
<msg time="2026-08-23T02:07:48.386151" level="INFO">${actual} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="4"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>mode=both</arg>
<doc>Remove leading and/or trailing whitespaces from the given string.</doc>
<status status="PASS" start="2026-08-23T02:07:48.385924" elapsed="0.000256"/>
</kw>
<kw name="Elements Should Be Equal" owner="XML">
<arg>${actual}</arg>
<arg>${expected}</arg>
<arg>normalize_whitespace=True</arg>
<doc>Verifies that the given ``source`` element is equal to ``expected``.</doc>
<status status="PASS" start="2026-08-23T02:07:48.386327" elapsed="0.000448"/>
</kw>
<return>
<value>${actual}</value>
<status status="PASS" start="2026-08-23T02:07:48.386828" elapsed="0.000045"/>
</return>
<arg>commit-edit</arg>
<doc>Load and send the request from the dataset and compare the returned reply to the one stored in the dataset.</doc>
<status status="PASS" start="2026-08-23T02:07:48.369786" elapsed="0.017189"/>
</kw>
<kw name="Perform_Test">
<kw name="Load_And_Send_Message">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:48.388329" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/delete-request.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/delete-request.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:48.388455" level="INFO">${data} = &lt;rpc message-id="6" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
&lt;edit-config&gt;
    &lt;target&gt;
        &lt;candidate/&gt;
    &lt;/target&gt;
    &lt;test-option&gt;
        set
    &lt;/test-option&gt;
    &lt;default-operati...</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:48.388063" elapsed="0.000421"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:48.388531" elapsed="0.000032"/>
</return>
<msg time="2026-08-23T02:07:48.388694" level="INFO">${request} = &lt;rpc message-id="6" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
&lt;edit-config&gt;
    &lt;target&gt;
        &lt;candidate/&gt;
    &lt;/target&gt;
    &lt;test-option&gt;
        set
    &lt;/test-option&gt;
    &lt;default-operati...</msg>
<var>${request}</var>
<arg>${name}-request</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:48.387732" elapsed="0.000991"/>
</kw>
<kw name="Send_Message">
<kw name="Transmit_Message">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.391151" level="INFO">&lt;rpc message-id="6" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;</msg>
<arg>${message}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:48.389499" elapsed="0.001711"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.391707" level="INFO">&lt;edit-config&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:48.391354" elapsed="0.000407"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.397974" level="INFO">&lt;target&gt;
        &lt;candidate/&gt;
    &lt;/target&gt;
    &lt;test-option&gt;
        set
    &lt;/test-option&gt;
    &lt;default-operation&gt;none&lt;/default-operation&gt;
    &lt;config xmlns:a="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
    &lt;cars xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car" a:operation="remove"&gt;
    &lt;/cars&gt;
    &lt;people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:people" a:operation="remove"&gt;
    &lt;/people&gt;
    &lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people" a:operation="remove"&gt;
    &lt;/car-people&gt;
    &lt;/config&gt;
&lt;/edit-config&gt;
&lt;/rpc&gt;

]]&gt;]]&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:48.391925" elapsed="0.006122"/>
</kw>
<arg>${message}</arg>
<doc>Transmit message to Netconf connection and discard the echo of the message.</doc>
<status status="PASS" start="2026-08-23T02:07:48.389202" elapsed="0.008905"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.399808" level="INFO">&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="6"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<msg time="2026-08-23T02:07:48.399917" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="6"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:48.398248" elapsed="0.001696"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:48.399992" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:07:48.400142" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="6"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${request}</arg>
<doc>Send message to Netconf connection and get the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:48.388904" elapsed="0.011266"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:48.400214" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:07:48.400357" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="6"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${actual}</var>
<arg>${name}</arg>
<doc>Load a message from the data file set, send it to Netconf and return the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:48.387424" elapsed="0.012960"/>
</kw>
<kw name="Load_Expected_Reply">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:48.401395" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/delete-reply.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/delete-reply.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:48.401541" level="INFO">${data} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="6"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:48.401186" elapsed="0.000382"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:48.401613" elapsed="0.000217"/>
</return>
<msg time="2026-08-23T02:07:48.401983" level="INFO">${expected_reply} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="6"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected_reply}</var>
<arg>${name}-reply</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:48.400870" elapsed="0.001141"/>
</kw>
<return>
<value>${expected_reply}</value>
<status status="PASS" start="2026-08-23T02:07:48.402055" elapsed="0.000025"/>
</return>
<msg time="2026-08-23T02:07:48.402200" level="INFO">${expected} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="6"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected}</var>
<arg>${name}</arg>
<doc>Load the expected reply from the data file set and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:48.400523" elapsed="0.001703"/>
</kw>
<kw name="Remove String" owner="String">
<msg time="2026-08-23T02:07:48.402562" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="6"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>]]&gt;]]&gt;</arg>
<doc>Removes all ``removables`` from the given ``string``.</doc>
<status status="PASS" start="2026-08-23T02:07:48.402368" elapsed="0.000222"/>
</kw>
<kw name="Strip String" owner="String">
<msg time="2026-08-23T02:07:48.402965" level="INFO">${actual} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="6"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>mode=both</arg>
<doc>Remove leading and/or trailing whitespaces from the given string.</doc>
<status status="PASS" start="2026-08-23T02:07:48.402732" elapsed="0.000321"/>
</kw>
<kw name="Elements Should Be Equal" owner="XML">
<arg>${actual}</arg>
<arg>${expected}</arg>
<arg>normalize_whitespace=True</arg>
<doc>Verifies that the given ``source`` element is equal to ``expected``.</doc>
<status status="PASS" start="2026-08-23T02:07:48.403205" elapsed="0.000397"/>
</kw>
<return>
<value>${actual}</value>
<status status="PASS" start="2026-08-23T02:07:48.403654" elapsed="0.000027"/>
</return>
<arg>delete</arg>
<doc>Load and send the request from the dataset and compare the returned reply to the one stored in the dataset.</doc>
<status status="PASS" start="2026-08-23T02:07:48.387140" elapsed="0.016636"/>
</kw>
<kw name="Perform_Test">
<kw name="Load_And_Send_Message">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:48.405059" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/commit-edit-request.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/commit-edit-request.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:48.405180" level="INFO">${data} = &lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="4"&gt;
&lt;commit/&gt;
&lt;/rpc&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:48.404824" elapsed="0.000382"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:48.405253" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:07:48.405399" level="INFO">${request} = &lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="4"&gt;
&lt;commit/&gt;
&lt;/rpc&gt;
</msg>
<var>${request}</var>
<arg>${name}-request</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:48.404510" elapsed="0.000916"/>
</kw>
<kw name="Send_Message">
<kw name="Transmit_Message">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.407817" level="INFO">&lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="4"&gt;</msg>
<arg>${message}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:48.406162" elapsed="0.001723"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.408336" level="INFO">&lt;commit/&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:48.408026" elapsed="0.000361"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.408945" level="INFO">&lt;/rpc&gt;

]]&gt;]]&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:48.408523" elapsed="0.000484"/>
</kw>
<arg>${message}</arg>
<doc>Transmit message to Netconf connection and discard the echo of the message.</doc>
<status status="PASS" start="2026-08-23T02:07:48.405868" elapsed="0.003195"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.415217" level="INFO">&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="4"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<msg time="2026-08-23T02:07:48.415308" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="4"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:48.409199" elapsed="0.006136"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:48.415381" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:07:48.415529" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="4"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${request}</arg>
<doc>Send message to Netconf connection and get the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:48.405565" elapsed="0.009991"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:48.415598" elapsed="0.000025"/>
</return>
<msg time="2026-08-23T02:07:48.415738" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="4"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${actual}</var>
<arg>${name}</arg>
<doc>Load a message from the data file set, send it to Netconf and return the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:48.404222" elapsed="0.011544"/>
</kw>
<kw name="Load_Expected_Reply">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:48.416760" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/commit-edit-reply.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/commit-edit-reply.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:48.416906" level="INFO">${data} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="4"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:48.416532" elapsed="0.000402"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:48.416980" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T02:07:48.417130" level="INFO">${expected_reply} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="4"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected_reply}</var>
<arg>${name}-reply</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:48.416215" elapsed="0.000942"/>
</kw>
<return>
<value>${expected_reply}</value>
<status status="PASS" start="2026-08-23T02:07:48.417198" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:07:48.417363" level="INFO">${expected} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="4"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected}</var>
<arg>${name}</arg>
<doc>Load the expected reply from the data file set and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:48.415923" elapsed="0.001466"/>
</kw>
<kw name="Remove String" owner="String">
<msg time="2026-08-23T02:07:48.417725" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="4"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>]]&gt;]]&gt;</arg>
<doc>Removes all ``removables`` from the given ``string``.</doc>
<status status="PASS" start="2026-08-23T02:07:48.417529" elapsed="0.000225"/>
</kw>
<kw name="Strip String" owner="String">
<msg time="2026-08-23T02:07:48.418130" level="INFO">${actual} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="4"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>mode=both</arg>
<doc>Remove leading and/or trailing whitespaces from the given string.</doc>
<status status="PASS" start="2026-08-23T02:07:48.417910" elapsed="0.000290"/>
</kw>
<kw name="Elements Should Be Equal" owner="XML">
<arg>${actual}</arg>
<arg>${expected}</arg>
<arg>normalize_whitespace=True</arg>
<doc>Verifies that the given ``source`` element is equal to ``expected``.</doc>
<status status="PASS" start="2026-08-23T02:07:48.418346" elapsed="0.000396"/>
</kw>
<return>
<value>${actual}</value>
<status status="PASS" start="2026-08-23T02:07:48.418795" elapsed="0.000028"/>
</return>
<arg>commit-edit</arg>
<doc>Load and send the request from the dataset and compare the returned reply to the one stored in the dataset.</doc>
<status status="PASS" start="2026-08-23T02:07:48.403950" elapsed="0.014988"/>
</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-08-23T02:07:48.420378" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:48.419994" elapsed="0.000447"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.419974" elapsed="0.000493"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>'${SetupUtils__Known_Bug_ID}' != ''</arg>
<arg>Set_Known_Bug_Id</arg>
<arg>${EMPTY}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:07:48.420627" elapsed="0.000341"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:07:48.425625" 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-08-23T02:07:48.425217" elapsed="0.000435"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-08-23T02:07:48.425887" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:07:48.425727" elapsed="0.000217"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.425709" elapsed="0.000259"/>
</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-08-23T02:07:48.426106" 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-08-23T02:07:48.426265" 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-08-23T02:07:48.426422" 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-08-23T02:07:48.426575" 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-08-23T02:07:48.426727" 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-08-23T02:07:48.426893" 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-08-23T02:07:48.427045" 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-08-23T02:07:48.424926" elapsed="0.002193"/>
</kw>
<status status="PASS" start="2026-08-23T02:07:48.419752" elapsed="0.007417"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-08-23T02:07:48.419201" elapsed="0.008009"/>
</kw>
<doc>Several requests in a (simplified) pattern typical for requests from netconf-connector.</doc>
<status status="PASS" start="2026-08-23T02:07:48.236544" elapsed="0.190706"/>
</test>
<test id="s1-s3-s1-t44" name="Test_Bug_7791" line="293">
<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-08-23T02:07:48.430451" elapsed="0.000211"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:07:48.430202" elapsed="0.000514"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:48.431676" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:48.431567" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.431548" elapsed="0.000196"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:48.436198" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:48.436086" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.436068" elapsed="0.000198"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:48.437282" 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-08-23T02:07:48.436894" elapsed="0.000415"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:07:48.437749" 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-08-23T02:07:48.437456" elapsed="0.000318"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:07:48.437872" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T02:07:48.438037" 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-08-23T02:07:48.436497" elapsed="0.001565"/>
</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-08-23T02:07:48.443279" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:48.443170" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.443151" elapsed="0.000197"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:48.444577" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:48.444462" elapsed="0.000163"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.444442" elapsed="0.000205"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:07:48.445264" level="INFO">${karaf_connection_index} = 18</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-08-23T02:07:48.444892" elapsed="0.000399"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.445692" level="INFO">${current_connection_index} = 23</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-08-23T02:07:48.445439" elapsed="0.000279"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.471593" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:48.446268" elapsed="0.025742"/>
</kw>
<msg time="2026-08-23T02:07:48.472492" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:07:48.472625" 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 "n "e "t "c "o "n "f "...</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-08-23T02:07:48.445889" elapsed="0.026825"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.484388" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "T "e "s "t "_ "B "u "g "_ "7 "7 "9 "1 "[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-08-23T02:07:48.474147" elapsed="0.010416"/>
</kw>
<msg time="2026-08-23T02:07:48.484734" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:07:48.484779" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "T "e "s "t "_ "B "u "g "_ "7 "7 "9 ...</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-08-23T02:07:48.473160" elapsed="0.011656"/>
</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-08-23T02:07:48.485133" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:48.484918" elapsed="0.000293"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.484897" elapsed="0.000339"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:48.485748" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "T "e "s "t "_ "B "u "g "_ "7 "7 "9 "1 "[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-08-23T02:07:48.485367" elapsed="0.000446"/>
</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-08-23T02:07:48.486112" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:48.485907" elapsed="0.000280"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.485888" elapsed="0.000324"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:07:48.486247" 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-08-23T02:07:48.489133" elapsed="0.000163"/>
</kw>
<msg time="2026-08-23T02:07:48.489367" 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-08-23T02:07:48.488461" elapsed="0.001006"/>
</kw>
<kw name="Open 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-08-23T02:07:48.490283" elapsed="0.000037"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:48.491117" elapsed="0.000038"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:07:48.487098" elapsed="0.004135"/>
</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-08-23T02:07:48.486502" elapsed="0.004881"/>
</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-08-23T02:07:48.444135" elapsed="0.047351"/>
</kw>
<msg time="2026-08-23T02:07:48.491616" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:48.491660" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "T "e "s "t "_ "B "u "g "_ "7 "7 "9 ...</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-08-23T02:07:48.443487" elapsed="0.048210"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:07:48.492087" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-23T02:07:48.491774" elapsed="0.000375"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.491754" elapsed="0.000419"/>
</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-08-23T02:07:48.492564" 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-08-23T02:07:48.492905" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:07:48.492978" 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-08-23T02:07:48.442818" elapsed="0.050269"/>
</kw>
<msg time="2026-08-23T02:07:48.493181" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:48.493225" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "T "e "s "t "_ "B "u "g "_ "7 "7 "9 ...</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-08-23T02:07:48.438425" elapsed="0.054837"/>
</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-08-23T02:07:48.493571" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:48.493336" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.493319" elapsed="0.000329"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:07:48.438294" elapsed="0.055378"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:07:48.438119" elapsed="0.055583"/>
</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-08-23T02:07:48.435718" elapsed="0.058037"/>
</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-08-23T02:07:48.431280" elapsed="0.062529"/>
</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-08-23T02:07:48.430870" elapsed="0.063024"/>
</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-08-23T02:07:48.428177" elapsed="0.065771"/>
</kw>
<kw name="Perform_Test">
<kw name="Load_And_Send_Message">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:48.497123" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/bug7791-1-request.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/bug7791-1-request.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:48.497275" level="INFO">${data} = &lt;rpc message-id="m-2" a="64" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
    &lt;edit-config&gt;
        &lt;target&gt;
            &lt;candidate/&gt;
        &lt;/target&gt;
        &lt;default-operation&gt;none&lt;/default-ope...</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:48.496877" elapsed="0.000427"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:48.497362" elapsed="0.000033"/>
</return>
<msg time="2026-08-23T02:07:48.497521" level="INFO">${request} = &lt;rpc message-id="m-2" a="64" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
    &lt;edit-config&gt;
        &lt;target&gt;
            &lt;candidate/&gt;
        &lt;/target&gt;
        &lt;default-operation&gt;none&lt;/default-ope...</msg>
<var>${request}</var>
<arg>${name}-request</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:48.494679" elapsed="0.002872"/>
</kw>
<kw name="Send_Message">
<kw name="Transmit_Message">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.500402" level="INFO">&lt;rpc message-id="m-2" a="64" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;</msg>
<arg>${message}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:48.498306" elapsed="0.002156"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.501025" level="INFO">&lt;edit-config&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:48.500618" elapsed="0.000461"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.505197" level="INFO">&lt;target&gt;
            &lt;candidate/&gt;
        &lt;/target&gt;
        &lt;default-operation&gt;none&lt;/default-operation&gt;
        &lt;config&gt;
            &lt;cars xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car" xmlns:a="urn:ietf:params:xml:ns:netconf:base:1.0" a:operation="replace"&gt;
            &lt;/cars&gt;
        &lt;/config&gt;
    &lt;/edit-config&gt;
&lt;/rpc&gt;

]]&gt;]]&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:48.501220" elapsed="0.004046"/>
</kw>
<arg>${message}</arg>
<doc>Transmit message to Netconf connection and discard the echo of the message.</doc>
<status status="PASS" start="2026-08-23T02:07:48.498007" elapsed="0.007319"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.507695" level="INFO">&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" a="64" message-id="m-2"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<msg time="2026-08-23T02:07:48.507792" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" a="64" message-id="m-2"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:48.505514" elapsed="0.002307"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:48.507896" elapsed="0.000032"/>
</return>
<msg time="2026-08-23T02:07:48.508053" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" a="64" message-id="m-2"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${request}</arg>
<doc>Send message to Netconf connection and get the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:48.497695" elapsed="0.010388"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:48.508126" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:07:48.508273" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" a="64" message-id="m-2"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${actual}</var>
<arg>${name}</arg>
<doc>Load a message from the data file set, send it to Netconf and return the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:48.494387" elapsed="0.013915"/>
</kw>
<kw name="Load_Expected_Reply">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:48.509304" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/bug7791-1-reply.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/bug7791-1-reply.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:48.509437" level="INFO">${data} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" a="64" message-id="m-2"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:48.509089" elapsed="0.000377"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:48.509515" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:48.509667" level="INFO">${expected_reply} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" a="64" message-id="m-2"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected_reply}</var>
<arg>${name}-reply</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:48.508759" elapsed="0.000936"/>
</kw>
<return>
<value>${expected_reply}</value>
<status status="PASS" start="2026-08-23T02:07:48.509739" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T02:07:48.509927" level="INFO">${expected} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" a="64" message-id="m-2"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected}</var>
<arg>${name}</arg>
<doc>Load the expected reply from the data file set and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:48.508443" elapsed="0.001514"/>
</kw>
<kw name="Remove String" owner="String">
<msg time="2026-08-23T02:07:48.510301" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" a="64" message-id="m-2"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>]]&gt;]]&gt;</arg>
<doc>Removes all ``removables`` from the given ``string``.</doc>
<status status="PASS" start="2026-08-23T02:07:48.510100" elapsed="0.000231"/>
</kw>
<kw name="Strip String" owner="String">
<msg time="2026-08-23T02:07:48.510696" level="INFO">${actual} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" a="64" message-id="m-2"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>mode=both</arg>
<doc>Remove leading and/or trailing whitespaces from the given string.</doc>
<status status="PASS" start="2026-08-23T02:07:48.510475" elapsed="0.000251"/>
</kw>
<kw name="Elements Should Be Equal" owner="XML">
<arg>${actual}</arg>
<arg>${expected}</arg>
<arg>normalize_whitespace=True</arg>
<doc>Verifies that the given ``source`` element is equal to ``expected``.</doc>
<status status="PASS" start="2026-08-23T02:07:48.510887" elapsed="0.000418"/>
</kw>
<return>
<value>${actual}</value>
<status status="PASS" start="2026-08-23T02:07:48.511358" elapsed="0.000028"/>
</return>
<arg>bug7791-1</arg>
<doc>Load and send the request from the dataset and compare the returned reply to the one stored in the dataset.</doc>
<status status="PASS" start="2026-08-23T02:07:48.494108" elapsed="0.017374"/>
</kw>
<kw name="Perform_Test">
<kw name="Load_And_Send_Message">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:48.512820" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/bug7791-2-request.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/bug7791-2-request.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:48.513020" level="INFO">${data} = &lt;rpc message-id="m-3" a="64" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
    &lt;edit-config&gt;
        &lt;target&gt;
            &lt;candidate/&gt;
        &lt;/target&gt;
        &lt;default-operation&gt;none&lt;/default-ope...</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:48.512602" elapsed="0.000448"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:48.513098" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:07:48.513250" level="INFO">${request} = &lt;rpc message-id="m-3" a="64" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
    &lt;edit-config&gt;
        &lt;target&gt;
            &lt;candidate/&gt;
        &lt;/target&gt;
        &lt;default-operation&gt;none&lt;/default-ope...</msg>
<var>${request}</var>
<arg>${name}-request</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:48.512263" elapsed="0.001016"/>
</kw>
<kw name="Send_Message">
<kw name="Transmit_Message">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.515876" level="INFO">&lt;rpc message-id="m-3" a="64" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;</msg>
<arg>${message}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:48.514061" elapsed="0.001888"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.560654" level="INFO">&lt;edit-config&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:48.516134" elapsed="0.044601"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.565406" level="INFO">&lt;target&gt;
            &lt;candidate/&gt;
        &lt;/target&gt;
        &lt;default-operation&gt;none&lt;/default-operation&gt;
        &lt;config&gt;
            &lt;cars xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car"&gt;
                &lt;car-entry xmlns:a="urn:ietf:params:xml:ns:netconf:base:1.0" a:operation="replace"&gt;
                    &lt;id&gt;bug7791&lt;/id&gt;
                &lt;/car-entry&gt;
            &lt;/cars&gt;
        &lt;/config&gt;
    &lt;/edit-config&gt;
&lt;/rpc&gt;

]]&gt;]]&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:48.561011" elapsed="0.004538"/>
</kw>
<arg>${message}</arg>
<doc>Transmit message to Netconf connection and discard the echo of the message.</doc>
<status status="PASS" start="2026-08-23T02:07:48.513713" elapsed="0.051904"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.570794" level="INFO">&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" a="64" message-id="m-3"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<msg time="2026-08-23T02:07:48.570911" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" a="64" message-id="m-3"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:48.565762" elapsed="0.005179"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:48.570995" elapsed="0.000051"/>
</return>
<msg time="2026-08-23T02:07:48.571179" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" a="64" message-id="m-3"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${request}</arg>
<doc>Send message to Netconf connection and get the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:48.513420" elapsed="0.057787"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:48.571252" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:07:48.571423" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" a="64" message-id="m-3"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${actual}</var>
<arg>${name}</arg>
<doc>Load a message from the data file set, send it to Netconf and return the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:48.511953" elapsed="0.059499"/>
</kw>
<kw name="Load_Expected_Reply">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:48.572508" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/bug7791-2-reply.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/bug7791-2-reply.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:48.572676" level="INFO">${data} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" a="64" message-id="m-3"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:48.572281" elapsed="0.000422"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:48.572749" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:48.572916" level="INFO">${expected_reply} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" a="64" message-id="m-3"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected_reply}</var>
<arg>${name}-reply</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:48.571970" elapsed="0.000973"/>
</kw>
<return>
<value>${expected_reply}</value>
<status status="PASS" start="2026-08-23T02:07:48.572988" elapsed="0.000025"/>
</return>
<msg time="2026-08-23T02:07:48.573132" level="INFO">${expected} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" a="64" message-id="m-3"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected}</var>
<arg>${name}</arg>
<doc>Load the expected reply from the data file set and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:48.571629" elapsed="0.001529"/>
</kw>
<kw name="Remove String" owner="String">
<msg time="2026-08-23T02:07:48.573504" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" a="64" message-id="m-3"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>]]&gt;]]&gt;</arg>
<doc>Removes all ``removables`` from the given ``string``.</doc>
<status status="PASS" start="2026-08-23T02:07:48.573301" elapsed="0.000231"/>
</kw>
<kw name="Strip String" owner="String">
<msg time="2026-08-23T02:07:48.573918" level="INFO">${actual} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" a="64" message-id="m-3"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>mode=both</arg>
<doc>Remove leading and/or trailing whitespaces from the given string.</doc>
<status status="PASS" start="2026-08-23T02:07:48.573675" elapsed="0.000272"/>
</kw>
<kw name="Elements Should Be Equal" owner="XML">
<arg>${actual}</arg>
<arg>${expected}</arg>
<arg>normalize_whitespace=True</arg>
<doc>Verifies that the given ``source`` element is equal to ``expected``.</doc>
<status status="PASS" start="2026-08-23T02:07:48.574091" elapsed="0.000496"/>
</kw>
<return>
<value>${actual}</value>
<status status="PASS" start="2026-08-23T02:07:48.574641" elapsed="0.000027"/>
</return>
<arg>bug7791-2</arg>
<doc>Load and send the request from the dataset and compare the returned reply to the one stored in the dataset.</doc>
<status status="PASS" start="2026-08-23T02:07:48.511640" elapsed="0.063123"/>
</kw>
<kw name="Perform_Test">
<kw name="Load_And_Send_Message">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:48.576055" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/commit-edit-request.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/commit-edit-request.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:48.576177" level="INFO">${data} = &lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="4"&gt;
&lt;commit/&gt;
&lt;/rpc&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:48.575827" elapsed="0.000377"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:48.576250" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:07:48.576395" level="INFO">${request} = &lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="4"&gt;
&lt;commit/&gt;
&lt;/rpc&gt;
</msg>
<var>${request}</var>
<arg>${name}-request</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:48.575525" elapsed="0.000896"/>
</kw>
<kw name="Send_Message">
<kw name="Transmit_Message">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.578717" level="INFO">&lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="4"&gt;</msg>
<arg>${message}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:48.577168" elapsed="0.001656"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.579304" level="INFO">&lt;commit/&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:48.578982" elapsed="0.000373"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.579979" level="INFO">&lt;/rpc&gt;

]]&gt;]]&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:48.579494" elapsed="0.000539"/>
</kw>
<arg>${message}</arg>
<doc>Transmit message to Netconf connection and discard the echo of the message.</doc>
<status status="PASS" start="2026-08-23T02:07:48.576866" elapsed="0.003225"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.588287" level="INFO">&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="4"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<msg time="2026-08-23T02:07:48.588381" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="4"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:48.580228" elapsed="0.008181"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:48.588458" elapsed="0.000032"/>
</return>
<msg time="2026-08-23T02:07:48.588610" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="4"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${request}</arg>
<doc>Send message to Netconf connection and get the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:48.576560" elapsed="0.012078"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:48.588681" elapsed="0.000025"/>
</return>
<msg time="2026-08-23T02:07:48.588822" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="4"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${actual}</var>
<arg>${name}</arg>
<doc>Load a message from the data file set, send it to Netconf and return the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:48.575217" elapsed="0.013655"/>
</kw>
<kw name="Load_Expected_Reply">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:48.590040" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/commit-edit-reply.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/commit-edit-reply.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:48.590172" level="INFO">${data} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="4"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:48.589809" elapsed="0.000390"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:48.590245" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:48.590393" level="INFO">${expected_reply} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="4"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected_reply}</var>
<arg>${name}-reply</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:48.589502" elapsed="0.000918"/>
</kw>
<return>
<value>${expected_reply}</value>
<status status="PASS" start="2026-08-23T02:07:48.590464" elapsed="0.000025"/>
</return>
<msg time="2026-08-23T02:07:48.590608" level="INFO">${expected} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="4"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected}</var>
<arg>${name}</arg>
<doc>Load the expected reply from the data file set and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:48.589013" elapsed="0.001621"/>
</kw>
<kw name="Remove String" owner="String">
<msg time="2026-08-23T02:07:48.590991" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="4"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>]]&gt;]]&gt;</arg>
<doc>Removes all ``removables`` from the given ``string``.</doc>
<status status="PASS" start="2026-08-23T02:07:48.590776" elapsed="0.000244"/>
</kw>
<kw name="Strip String" owner="String">
<msg time="2026-08-23T02:07:48.591406" level="INFO">${actual} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="4"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>mode=both</arg>
<doc>Remove leading and/or trailing whitespaces from the given string.</doc>
<status status="PASS" start="2026-08-23T02:07:48.591163" elapsed="0.000272"/>
</kw>
<kw name="Elements Should Be Equal" owner="XML">
<arg>${actual}</arg>
<arg>${expected}</arg>
<arg>normalize_whitespace=True</arg>
<doc>Verifies that the given ``source`` element is equal to ``expected``.</doc>
<status status="PASS" start="2026-08-23T02:07:48.591580" elapsed="0.000475"/>
</kw>
<return>
<value>${actual}</value>
<status status="PASS" start="2026-08-23T02:07:48.592108" elapsed="0.000028"/>
</return>
<arg>commit-edit</arg>
<doc>Load and send the request from the dataset and compare the returned reply to the one stored in the dataset.</doc>
<status status="PASS" start="2026-08-23T02:07:48.574943" elapsed="0.017288"/>
</kw>
<kw name="Perform_Test">
<kw name="Load_And_Send_Message">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:48.593476" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/delete-request.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/delete-request.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:48.593600" level="INFO">${data} = &lt;rpc message-id="6" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
&lt;edit-config&gt;
    &lt;target&gt;
        &lt;candidate/&gt;
    &lt;/target&gt;
    &lt;test-option&gt;
        set
    &lt;/test-option&gt;
    &lt;default-operati...</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:48.593269" elapsed="0.000360"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:48.593675" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:48.593822" level="INFO">${request} = &lt;rpc message-id="6" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
&lt;edit-config&gt;
    &lt;target&gt;
        &lt;candidate/&gt;
    &lt;/target&gt;
    &lt;test-option&gt;
        set
    &lt;/test-option&gt;
    &lt;default-operati...</msg>
<var>${request}</var>
<arg>${name}-request</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:48.592969" elapsed="0.000897"/>
</kw>
<kw name="Send_Message">
<kw name="Transmit_Message">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.596306" level="INFO">&lt;rpc message-id="6" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;</msg>
<arg>${message}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:48.594627" elapsed="0.001737"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.596865" level="INFO">&lt;edit-config&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:48.596507" elapsed="0.000410"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.603115" level="INFO">&lt;target&gt;
        &lt;candidate/&gt;
    &lt;/target&gt;
    &lt;test-option&gt;
        set
    &lt;/test-option&gt;
    &lt;default-operation&gt;none&lt;/default-operation&gt;
    &lt;config xmlns:a="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
    &lt;cars xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car" a:operation="remove"&gt;
    &lt;/cars&gt;
    &lt;people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:people" a:operation="remove"&gt;
    &lt;/people&gt;
    &lt;car-people xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car-people" a:operation="remove"&gt;
    &lt;/car-people&gt;
    &lt;/config&gt;
&lt;/edit-config&gt;
&lt;/rpc&gt;

]]&gt;]]&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:48.597056" elapsed="0.006128"/>
</kw>
<arg>${message}</arg>
<doc>Transmit message to Netconf connection and discard the echo of the message.</doc>
<status status="PASS" start="2026-08-23T02:07:48.594333" elapsed="0.008910"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.605008" level="INFO">&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="6"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<msg time="2026-08-23T02:07:48.605097" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="6"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:48.603383" elapsed="0.001741"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:48.605172" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:07:48.605321" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="6"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${request}</arg>
<doc>Send message to Netconf connection and get the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:48.594043" elapsed="0.011305"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:48.605392" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:07:48.605535" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="6"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${actual}</var>
<arg>${name}</arg>
<doc>Load a message from the data file set, send it to Netconf and return the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:48.592661" elapsed="0.012901"/>
</kw>
<kw name="Load_Expected_Reply">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:48.606527" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/delete-reply.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/delete-reply.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:48.606698" level="INFO">${data} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="6"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:48.606317" elapsed="0.000409"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:48.606774" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:48.606942" level="INFO">${expected_reply} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="6"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected_reply}</var>
<arg>${name}-reply</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:48.606011" elapsed="0.000958"/>
</kw>
<return>
<value>${expected_reply}</value>
<status status="PASS" start="2026-08-23T02:07:48.607013" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:07:48.607184" level="INFO">${expected} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="6"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected}</var>
<arg>${name}</arg>
<doc>Load the expected reply from the data file set and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:48.605697" elapsed="0.001515"/>
</kw>
<kw name="Remove String" owner="String">
<msg time="2026-08-23T02:07:48.607550" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="6"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>]]&gt;]]&gt;</arg>
<doc>Removes all ``removables`` from the given ``string``.</doc>
<status status="PASS" start="2026-08-23T02:07:48.607353" elapsed="0.000226"/>
</kw>
<kw name="Strip String" owner="String">
<msg time="2026-08-23T02:07:48.608154" level="INFO">${actual} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="6"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>mode=both</arg>
<doc>Remove leading and/or trailing whitespaces from the given string.</doc>
<status status="PASS" start="2026-08-23T02:07:48.607722" elapsed="0.000462"/>
</kw>
<kw name="Elements Should Be Equal" owner="XML">
<arg>${actual}</arg>
<arg>${expected}</arg>
<arg>normalize_whitespace=True</arg>
<doc>Verifies that the given ``source`` element is equal to ``expected``.</doc>
<status status="PASS" start="2026-08-23T02:07:48.608329" elapsed="0.000394"/>
</kw>
<return>
<value>${actual}</value>
<status status="PASS" start="2026-08-23T02:07:48.608775" elapsed="0.000027"/>
</return>
<arg>delete</arg>
<doc>Load and send the request from the dataset and compare the returned reply to the one stored in the dataset.</doc>
<status status="PASS" start="2026-08-23T02:07:48.592389" elapsed="0.016527"/>
</kw>
<kw name="Perform_Test">
<kw name="Load_And_Send_Message">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:48.610153" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/commit-edit-request.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/commit-edit-request.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:48.610308" level="INFO">${data} = &lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="4"&gt;
&lt;commit/&gt;
&lt;/rpc&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:48.609944" elapsed="0.000391"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:48.610382" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:07:48.610528" level="INFO">${request} = &lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="4"&gt;
&lt;commit/&gt;
&lt;/rpc&gt;
</msg>
<var>${request}</var>
<arg>${name}-request</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:48.609626" elapsed="0.000929"/>
</kw>
<kw name="Send_Message">
<kw name="Transmit_Message">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.612718" level="INFO">&lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="4"&gt;</msg>
<arg>${message}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:48.611317" elapsed="0.001465"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.613298" level="INFO">&lt;commit/&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:48.612954" elapsed="0.000397"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.613973" level="INFO">&lt;/rpc&gt;

]]&gt;]]&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:48.613491" elapsed="0.000537"/>
</kw>
<arg>${message}</arg>
<doc>Transmit message to Netconf connection and discard the echo of the message.</doc>
<status status="PASS" start="2026-08-23T02:07:48.611001" elapsed="0.003083"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.619566" level="INFO">&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="4"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<msg time="2026-08-23T02:07:48.619659" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="4"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:48.614220" elapsed="0.005468"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:48.619735" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:07:48.619900" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="4"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${request}</arg>
<doc>Send message to Netconf connection and get the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:48.610694" elapsed="0.009235"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:48.619973" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:07:48.620116" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="4"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${actual}</var>
<arg>${name}</arg>
<doc>Load a message from the data file set, send it to Netconf and return the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:48.609343" elapsed="0.010800"/>
</kw>
<kw name="Load_Expected_Reply">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:48.621108" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/commit-edit-reply.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/commit-edit-reply.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:48.621229" level="INFO">${data} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="4"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:48.620894" elapsed="0.000363"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:48.621303" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:48.621451" level="INFO">${expected_reply} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="4"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected_reply}</var>
<arg>${name}-reply</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:48.620570" elapsed="0.000907"/>
</kw>
<return>
<value>${expected_reply}</value>
<status status="PASS" start="2026-08-23T02:07:48.621520" elapsed="0.000025"/>
</return>
<msg time="2026-08-23T02:07:48.621663" level="INFO">${expected} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="4"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected}</var>
<arg>${name}</arg>
<doc>Load the expected reply from the data file set and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:48.620277" elapsed="0.001412"/>
</kw>
<kw name="Remove String" owner="String">
<msg time="2026-08-23T02:07:48.622042" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="4"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>]]&gt;]]&gt;</arg>
<doc>Removes all ``removables`` from the given ``string``.</doc>
<status status="PASS" start="2026-08-23T02:07:48.621830" elapsed="0.000240"/>
</kw>
<kw name="Strip String" owner="String">
<msg time="2026-08-23T02:07:48.622431" level="INFO">${actual} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="4"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>mode=both</arg>
<doc>Remove leading and/or trailing whitespaces from the given string.</doc>
<status status="PASS" start="2026-08-23T02:07:48.622215" elapsed="0.000244"/>
</kw>
<kw name="Elements Should Be Equal" owner="XML">
<arg>${actual}</arg>
<arg>${expected}</arg>
<arg>normalize_whitespace=True</arg>
<doc>Verifies that the given ``source`` element is equal to ``expected``.</doc>
<status status="PASS" start="2026-08-23T02:07:48.622601" elapsed="0.000434"/>
</kw>
<return>
<value>${actual}</value>
<status status="PASS" start="2026-08-23T02:07:48.623089" elapsed="0.000028"/>
</return>
<arg>commit-edit</arg>
<doc>Load and send the request from the dataset and compare the returned reply to the one stored in the dataset.</doc>
<status status="PASS" start="2026-08-23T02:07:48.609072" elapsed="0.014141"/>
</kw>
<kw name="Report Failure Due To Bug" owner="Utils" type="TEARDOWN">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:07:48.624410" 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-08-23T02:07:48.623967" elapsed="0.000471"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-08-23T02:07:48.624910" elapsed="0.000029"/>
</return>
<status status="PASS" start="2026-08-23T02:07:48.624560" elapsed="0.000411"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.624537" elapsed="0.000462"/>
</if>
<kw name="Comment" owner="BuiltIn">
<arg>Jira tickets are {PROJECT}-{NUMBER} while Bugzilla tickets are {NUMBER}</arg>
<doc>Displays the given messages in the log file as keyword arguments.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:48.625189" elapsed="0.000023"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${match}</var>
<arg>Should Contain</arg>
<arg>${number}</arg>
<arg>-</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:48.625358" elapsed="0.000020"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${bug_url}</var>
<arg>${match}</arg>
<arg>https://jira.opendaylight.org/browse/${number}</arg>
<arg>https://bugs.opendaylight.org/show_bug.cgi?id=${number}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:48.625528" elapsed="0.000020"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${msg}</var>
<arg>This test fails due to ${bug_url}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:48.625689" elapsed="0.000020"/>
</kw>
<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-08-23T02:07:48.625862" elapsed="0.000022"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<arg>${msg}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:48.626020" elapsed="0.000020"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${msg}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:48.626172" elapsed="0.000020"/>
</kw>
<if>
<branch type="IF" condition="&quot;${include_bug_in_tags}&quot;==&quot;True&quot;">
<kw name="Set Tags" owner="BuiltIn">
<arg>${bug_url}</arg>
<doc>Adds given ``tags`` for the current test or all tests in a suite.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:48.626403" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:48.626254" elapsed="0.000201"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:07:48.626238" elapsed="0.000240"/>
</if>
<arg>7791</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="PASS" start="2026-08-23T02:07:48.623609" elapsed="0.002917"/>
</kw>
<doc>Send (checking replies) series of netconf messages to trigger
https://bugs.opendaylight.org/show_bug.cgi?id=7791</doc>
<status status="PASS" start="2026-08-23T02:07:48.427571" elapsed="0.199004"/>
</test>
<test id="s1-s3-s1-t45" name="Delete_Not_Existing_Element" line="303">
<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-08-23T02:07:48.629796" elapsed="0.000230"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:07:48.629549" elapsed="0.000532"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:48.631068" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:48.630951" elapsed="0.000164"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.630931" elapsed="0.000206"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:48.635640" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:48.635534" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.635516" elapsed="0.000191"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:48.636697" 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-08-23T02:07:48.636310" elapsed="0.000413"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:07:48.637184" 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-08-23T02:07:48.636887" elapsed="0.000323"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:07:48.637255" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:07:48.637407" 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-08-23T02:07:48.635946" elapsed="0.001485"/>
</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-08-23T02:07:48.642681" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:48.642574" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.642555" elapsed="0.000194"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:48.644000" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:48.643891" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.643872" elapsed="0.000197"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:07:48.644570" level="INFO">${karaf_connection_index} = 18</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-08-23T02:07:48.644202" elapsed="0.000394"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.645015" level="INFO">${current_connection_index} = 23</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-08-23T02:07:48.644742" elapsed="0.000299"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.673776" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:48.645601" elapsed="0.028363"/>
</kw>
<msg time="2026-08-23T02:07:48.674139" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:07:48.674185" 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 "n "e "t "c "o "n "f "...</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-08-23T02:07:48.645224" elapsed="0.028999"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.695620" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "D "e "l "e "t "e "_ "N "o "t "_ "E "x "i "s "t "i "n "g "_ "E "l "e "m "e "n "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-08-23T02:07:48.674785" elapsed="0.021135"/>
</kw>
<msg time="2026-08-23T02:07:48.696174" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:07:48.696243" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "D "e "l "e "t "e "_ "N "o "t "_ "E ...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:07:48.674380" elapsed="0.021917"/>
</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-08-23T02:07:48.696743" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:48.696412" elapsed="0.000475"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.696383" elapsed="0.000543"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:48.697677" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "D "e "l "e "t "e "_ "N "o "t "_ "E "x "i "s "t "i "n "g "_ "E "l "e "m "e "n "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-08-23T02:07:48.697123" elapsed="0.000679"/>
</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-08-23T02:07:48.698250" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:48.697945" elapsed="0.000433"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.697917" elapsed="0.000500"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:07:48.698468" elapsed="0.000042"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-23T02:07:48.702770" elapsed="0.000175"/>
</kw>
<msg time="2026-08-23T02:07:48.703019" 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-08-23T02:07:48.701752" elapsed="0.001367"/>
</kw>
<kw name="Open 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-08-23T02:07:48.703938" elapsed="0.000038"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:48.704747" elapsed="0.000036"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:07:48.699705" elapsed="0.005298"/>
</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-08-23T02:07:48.698866" elapsed="0.006254"/>
</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-08-23T02:07:48.643568" elapsed="0.061651"/>
</kw>
<msg time="2026-08-23T02:07:48.705311" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:48.705354" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "D "e "l "e "t "e "_ "N "o "t "_ "E ...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:07:48.642920" elapsed="0.062472"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:07:48.705574" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-08-23T02:07:48.705467" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.705448" elapsed="0.000208"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:48.706063" 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-08-23T02:07:48.706392" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:07:48.706463" 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-08-23T02:07:48.642235" elapsed="0.064336"/>
</kw>
<msg time="2026-08-23T02:07:48.706663" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:48.706743" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "D "e "l "e "t "e "_ "N "o "t "_ "E ...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:07:48.637805" elapsed="0.068977"/>
</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-08-23T02:07:48.707185" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:48.706945" elapsed="0.000295"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.706926" elapsed="0.000337"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:07:48.637673" elapsed="0.069613"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:07:48.637490" elapsed="0.069829"/>
</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-08-23T02:07:48.635177" elapsed="0.072198"/>
</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-08-23T02:07:48.630636" elapsed="0.076794"/>
</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-08-23T02:07:48.630221" elapsed="0.077254"/>
</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-08-23T02:07:48.627463" elapsed="0.080063"/>
</kw>
<kw name="Perform_Test">
<kw name="Load_And_Send_Message">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:48.708984" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/delete-not-existing-request.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/delete-not-existing-request.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:48.709169" level="INFO">${data} = &lt;rpc message-id="6" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
&lt;edit-config&gt;
    &lt;target&gt;
        &lt;candidate/&gt;
    &lt;/target&gt;
    &lt;test-option&gt;
        set
    &lt;/test-option&gt;
    &lt;default-operati...</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:48.708749" elapsed="0.000449"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:48.709246" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:07:48.709396" level="INFO">${request} = &lt;rpc message-id="6" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
&lt;edit-config&gt;
    &lt;target&gt;
        &lt;candidate/&gt;
    &lt;/target&gt;
    &lt;test-option&gt;
        set
    &lt;/test-option&gt;
    &lt;default-operati...</msg>
<var>${request}</var>
<arg>${name}-request</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:48.708265" elapsed="0.001159"/>
</kw>
<kw name="Send_Message">
<kw name="Transmit_Message">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.711908" level="INFO">&lt;rpc message-id="6" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;</msg>
<arg>${message}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:48.710163" elapsed="0.001803"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.712457" level="INFO">&lt;edit-config&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:48.712109" elapsed="0.000405"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.716276" level="INFO">&lt;target&gt;
        &lt;candidate/&gt;
    &lt;/target&gt;
    &lt;test-option&gt;
        set
    &lt;/test-option&gt;
    &lt;default-operation&gt;none&lt;/default-operation&gt;
    &lt;config xmlns:a="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
      &lt;cars xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car" a:operation="delete"&gt;
      &lt;/cars&gt;
    &lt;/config&gt;
&lt;/edit-config&gt;
&lt;/rpc&gt;

]]&gt;]]&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:48.712671" elapsed="0.003669"/>
</kw>
<arg>${message}</arg>
<doc>Transmit message to Netconf connection and discard the echo of the message.</doc>
<status status="PASS" start="2026-08-23T02:07:48.709869" elapsed="0.006528"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.720334" level="INFO">&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply message-id="6" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
    &lt;rpc-error&gt;
        &lt;error-type&gt;protocol&lt;/error-type&gt;
        &lt;error-tag&gt;data-missing&lt;/error-tag&gt;
        &lt;error-severity&gt;error&lt;/error-severity&gt;
        &lt;error-message&gt;Data is missing, cannot execute DELETE operation&lt;/error-message&gt;
    &lt;/rpc-error&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<msg time="2026-08-23T02:07:48.720432" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply message-id="6" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
    &lt;rpc-error&gt;
        &lt;error-type&gt;protocol&lt;/error-type&gt;
      ...</msg>
<var>${reply}</var>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:48.716548" elapsed="0.003913"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:48.720507" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:07:48.720655" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply message-id="6" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
    &lt;rpc-error&gt;
        &lt;error-type&gt;protocol&lt;/error-type&gt;
      ...</msg>
<var>${reply}</var>
<arg>${request}</arg>
<doc>Send message to Netconf connection and get the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:48.709564" elapsed="0.011120"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:48.720728" elapsed="0.000025"/>
</return>
<msg time="2026-08-23T02:07:48.720889" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply message-id="6" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
    &lt;rpc-error&gt;
        &lt;error-type&gt;protocol&lt;/error-type&gt;
      ...</msg>
<var>${actual}</var>
<arg>${name}</arg>
<doc>Load a message from the data file set, send it to Netconf and return the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:48.707979" elapsed="0.012939"/>
</kw>
<kw name="Load_Expected_Reply">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:48.721919" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/delete-not-existing-reply.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/delete-not-existing-reply.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:48.722048" level="INFO">${data} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply message-id="6" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
&lt;rpc-error&gt;
&lt;error-type&gt;protocol&lt;/error-type&gt;
&lt;error-tag&gt;data-missing&lt;...</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:48.721694" elapsed="0.000383"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:48.722123" elapsed="0.000036"/>
</return>
<msg time="2026-08-23T02:07:48.722281" level="INFO">${expected_reply} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply message-id="6" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
&lt;rpc-error&gt;
&lt;error-type&gt;protocol&lt;/error-type&gt;
&lt;error-tag&gt;data-missing&lt;...</msg>
<var>${expected_reply}</var>
<arg>${name}-reply</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:48.721388" elapsed="0.000921"/>
</kw>
<return>
<value>${expected_reply}</value>
<status status="PASS" start="2026-08-23T02:07:48.722353" elapsed="0.000024"/>
</return>
<msg time="2026-08-23T02:07:48.722497" level="INFO">${expected} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply message-id="6" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
&lt;rpc-error&gt;
&lt;error-type&gt;protocol&lt;/error-type&gt;
&lt;error-tag&gt;data-missing&lt;...</msg>
<var>${expected}</var>
<arg>${name}</arg>
<doc>Load the expected reply from the data file set and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:48.721053" elapsed="0.001472"/>
</kw>
<kw name="Remove String" owner="String">
<msg time="2026-08-23T02:07:48.722880" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply message-id="6" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
    &lt;rpc-error&gt;
        &lt;error-type&gt;protocol&lt;/error-type&gt;
      ...</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>]]&gt;]]&gt;</arg>
<doc>Removes all ``removables`` from the given ``string``.</doc>
<status status="PASS" start="2026-08-23T02:07:48.722665" elapsed="0.000246"/>
</kw>
<kw name="Strip String" owner="String">
<msg time="2026-08-23T02:07:48.723273" level="INFO">${actual} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply message-id="6" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
    &lt;rpc-error&gt;
        &lt;error-type&gt;protocol&lt;/error-type&gt;
        ...</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>mode=both</arg>
<doc>Remove leading and/or trailing whitespaces from the given string.</doc>
<status status="PASS" start="2026-08-23T02:07:48.723054" elapsed="0.000249"/>
</kw>
<kw name="Elements Should Be Equal" owner="XML">
<arg>${actual}</arg>
<arg>${expected}</arg>
<arg>normalize_whitespace=True</arg>
<doc>Verifies that the given ``source`` element is equal to ``expected``.</doc>
<status status="PASS" start="2026-08-23T02:07:48.723447" elapsed="0.000467"/>
</kw>
<return>
<value>${actual}</value>
<status status="PASS" start="2026-08-23T02:07:48.723969" elapsed="0.000027"/>
</return>
<arg>delete-not-existing</arg>
<doc>Load and send the request from the dataset and compare the returned reply to the one stored in the dataset.</doc>
<status status="PASS" start="2026-08-23T02:07:48.707685" elapsed="0.016407"/>
</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-08-23T02:07:48.725262" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:48.724898" elapsed="0.000427"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.724879" elapsed="0.000472"/>
</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-08-23T02:07:48.725484" elapsed="0.000312"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:07:48.730609" 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-08-23T02:07:48.730210" elapsed="0.000426"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-08-23T02:07:48.730873" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-23T02:07:48.730710" elapsed="0.000221"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.730691" elapsed="0.000264"/>
</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-08-23T02:07:48.731092" 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-08-23T02:07:48.731250" 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-08-23T02:07:48.731409" 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-08-23T02:07:48.731561" 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-08-23T02:07:48.731712" 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-08-23T02:07:48.731884" 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-08-23T02:07:48.732039" 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-08-23T02:07:48.729910" elapsed="0.002204"/>
</kw>
<status status="PASS" start="2026-08-23T02:07:48.724675" elapsed="0.007529"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-08-23T02:07:48.724336" elapsed="0.007909"/>
</kw>
<doc>Attempt to delete the elements again and check that it fails with the correct error.</doc>
<status status="PASS" start="2026-08-23T02:07:48.626940" elapsed="0.105344"/>
</test>
<test id="s1-s3-s1-t46" name="Commit_Delete_Not_Existing_Module" line="307">
<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-08-23T02:07:48.735281" elapsed="0.000206"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:07:48.735033" elapsed="0.000508"/>
</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-08-23T02:07:48.736490" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:48.736383" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.736364" 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-08-23T02:07:48.740981" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:48.740873" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.740854" elapsed="0.000194"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:48.742075" 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-08-23T02:07:48.741659" elapsed="0.000443"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:07:48.742578" 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-08-23T02:07:48.742248" elapsed="0.000356"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:07:48.742650" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:07:48.742803" 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-08-23T02:07:48.741254" elapsed="0.001574"/>
</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-08-23T02:07:48.748060" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:48.747950" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.747929" elapsed="0.000200"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:48.749326" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:48.749218" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.749200" elapsed="0.000195"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:07:48.749908" level="INFO">${karaf_connection_index} = 18</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-08-23T02:07:48.749528" elapsed="0.000432"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.750362" level="INFO">${current_connection_index} = 23</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-08-23T02:07:48.750116" elapsed="0.000273"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.785906" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:48.750936" elapsed="0.035163"/>
</kw>
<msg time="2026-08-23T02:07:48.786291" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:07:48.786339" 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 "n "e "t "c "o "n "f "...</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-08-23T02:07:48.750539" elapsed="0.035837"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.806026" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "o "m "m "i "t "_ "D "e "l "e "t "e "_ "N "o "t "_ "E "x "i "s "t "i "n "g "_ "M "o "d "u "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-08-23T02:07:48.787011" elapsed="0.019196"/>
</kw>
<msg time="2026-08-23T02:07:48.806377" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:07:48.806422" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "o "m "m "i "t "_ "D "e "l "e "t ...</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-08-23T02:07:48.786561" elapsed="0.019897"/>
</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-08-23T02:07:48.806759" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:48.806539" elapsed="0.000319"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.806517" elapsed="0.000369"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:48.807402" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "o "m "m "i "t "_ "D "e "l "e "t "e "_ "N "o "t "_ "E "x "i "s "t "i "n "g "_ "M "o "d "u "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-08-23T02:07:48.807021" elapsed="0.000504"/>
</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-08-23T02:07:48.807798" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:48.807592" elapsed="0.000305"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.807574" elapsed="0.000348"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:07:48.807958" elapsed="0.000036"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-23T02:07:48.810932" elapsed="0.000150"/>
</kw>
<msg time="2026-08-23T02:07:48.811154" 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-08-23T02:07:48.810235" elapsed="0.001020"/>
</kw>
<kw name="Open 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-08-23T02:07:48.812070" elapsed="0.000037"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:48.812905" elapsed="0.000038"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:07:48.808816" elapsed="0.004206"/>
</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-08-23T02:07:48.808232" elapsed="0.004906"/>
</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-08-23T02:07:48.748916" elapsed="0.064322"/>
</kw>
<msg time="2026-08-23T02:07:48.813332" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:48.813377" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "o "m "m "i "t "_ "D "e "l "e "t ...</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-08-23T02:07:48.748271" elapsed="0.065144"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:07:48.813615" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-08-23T02:07:48.813506" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.813473" elapsed="0.000225"/>
</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-08-23T02:07:48.814286" 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-08-23T02:07:48.814605" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:07:48.814676" 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-08-23T02:07:48.747558" elapsed="0.067229"/>
</kw>
<msg time="2026-08-23T02:07:48.814902" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:48.814948" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "o "m "m "i "t "_ "D "e "l "e "t ...</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-08-23T02:07:48.743197" elapsed="0.071788"/>
</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-08-23T02:07:48.815298" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:48.815062" elapsed="0.000290"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.815044" elapsed="0.000332"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:07:48.743067" elapsed="0.072331"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:07:48.742898" elapsed="0.072535"/>
</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-08-23T02:07:48.740505" elapsed="0.074982"/>
</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-08-23T02:07:48.736102" elapsed="0.079442"/>
</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-08-23T02:07:48.735676" elapsed="0.079914"/>
</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-08-23T02:07:48.733035" elapsed="0.082608"/>
</kw>
<kw name="Perform_Test">
<kw name="Load_And_Send_Message">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:48.817147" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/commit-no-transaction-request.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/commit-no-transaction-request.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:48.817403" level="INFO">${data} = &lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="10"&gt;
&lt;commit/&gt;
&lt;/rpc&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:48.816928" elapsed="0.000503"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:48.817500" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:07:48.817651" level="INFO">${request} = &lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="10"&gt;
&lt;commit/&gt;
&lt;/rpc&gt;
</msg>
<var>${request}</var>
<arg>${name}-request</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:48.816412" elapsed="0.001266"/>
</kw>
<kw name="Send_Message">
<kw name="Transmit_Message">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.820123" level="INFO">&lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="10"&gt;</msg>
<arg>${message}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:48.818428" elapsed="0.001752"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.820632" level="INFO">&lt;commit/&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:48.820324" elapsed="0.000360"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.821285" level="INFO">&lt;/rpc&gt;

]]&gt;]]&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:48.820823" elapsed="0.000515"/>
</kw>
<arg>${message}</arg>
<doc>Transmit message to Netconf connection and discard the echo of the message.</doc>
<status status="PASS" start="2026-08-23T02:07:48.818136" elapsed="0.003260"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.828844" level="INFO">&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="10"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<msg time="2026-08-23T02:07:48.828938" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="10"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:48.821556" elapsed="0.007410"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:48.829012" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:07:48.829160" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="10"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${request}</arg>
<doc>Send message to Netconf connection and get the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:48.817821" elapsed="0.011367"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:48.829231" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:07:48.829392" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="10"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${actual}</var>
<arg>${name}</arg>
<doc>Load a message from the data file set, send it to Netconf and return the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:48.816121" elapsed="0.013301"/>
</kw>
<kw name="Load_Expected_Reply">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:48.830390" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/commit-no-transaction-reply.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/commit-no-transaction-reply.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:48.830513" level="INFO">${data} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="10"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:48.830182" elapsed="0.000358"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:48.830586" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:07:48.830734" level="INFO">${expected_reply} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="10"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected_reply}</var>
<arg>${name}-reply</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:48.829876" elapsed="0.000884"/>
</kw>
<return>
<value>${expected_reply}</value>
<status status="PASS" start="2026-08-23T02:07:48.830803" elapsed="0.000025"/>
</return>
<msg time="2026-08-23T02:07:48.830964" level="INFO">${expected} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="10"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected}</var>
<arg>${name}</arg>
<doc>Load the expected reply from the data file set and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:48.829562" elapsed="0.001429"/>
</kw>
<kw name="Remove String" owner="String">
<msg time="2026-08-23T02:07:48.831333" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="10"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>]]&gt;]]&gt;</arg>
<doc>Removes all ``removables`` from the given ``string``.</doc>
<status status="PASS" start="2026-08-23T02:07:48.831133" elapsed="0.000228"/>
</kw>
<kw name="Strip String" owner="String">
<msg time="2026-08-23T02:07:48.831730" level="INFO">${actual} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="10"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>mode=both</arg>
<doc>Remove leading and/or trailing whitespaces from the given string.</doc>
<status status="PASS" start="2026-08-23T02:07:48.831506" elapsed="0.000253"/>
</kw>
<kw name="Elements Should Be Equal" owner="XML">
<arg>${actual}</arg>
<arg>${expected}</arg>
<arg>normalize_whitespace=True</arg>
<doc>Verifies that the given ``source`` element is equal to ``expected``.</doc>
<status status="PASS" start="2026-08-23T02:07:48.831923" elapsed="0.000426"/>
</kw>
<return>
<value>${actual}</value>
<status status="PASS" start="2026-08-23T02:07:48.832403" elapsed="0.000028"/>
</return>
<arg>commit-no-transaction</arg>
<doc>Load and send the request from the dataset and compare the returned reply to the one stored in the dataset.</doc>
<status status="PASS" start="2026-08-23T02:07:48.815812" elapsed="0.016714"/>
</kw>
<kw name="Report Failure Due To Bug" owner="Utils" type="TEARDOWN">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:07:48.833669" 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-08-23T02:07:48.833250" elapsed="0.000447"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-08-23T02:07:48.833973" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-23T02:07:48.833807" elapsed="0.000223"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.833788" elapsed="0.000266"/>
</if>
<kw name="Comment" owner="BuiltIn">
<arg>Jira tickets are {PROJECT}-{NUMBER} while Bugzilla tickets are {NUMBER}</arg>
<doc>Displays the given messages in the log file as keyword arguments.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:48.834205" elapsed="0.000022"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${match}</var>
<arg>Should Contain</arg>
<arg>${number}</arg>
<arg>-</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:48.834369" elapsed="0.000020"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${bug_url}</var>
<arg>${match}</arg>
<arg>https://jira.opendaylight.org/browse/${number}</arg>
<arg>https://bugs.opendaylight.org/show_bug.cgi?id=${number}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:48.834534" elapsed="0.000020"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${msg}</var>
<arg>This test fails due to ${bug_url}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:48.834694" elapsed="0.000020"/>
</kw>
<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-08-23T02:07:48.834862" elapsed="0.000022"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<arg>${msg}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:48.835016" elapsed="0.000020"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${msg}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:48.835168" elapsed="0.000020"/>
</kw>
<if>
<branch type="IF" condition="&quot;${include_bug_in_tags}&quot;==&quot;True&quot;">
<kw name="Set Tags" owner="BuiltIn">
<arg>${bug_url}</arg>
<doc>Adds given ``tags`` for the current test or all tests in a suite.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:48.835398" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:48.835249" elapsed="0.000200"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:07:48.835233" elapsed="0.000240"/>
</if>
<arg>4455</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="PASS" start="2026-08-23T02:07:48.832913" elapsed="0.002608"/>
</kw>
<doc>Attempt to commit and check the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:48.732541" elapsed="0.103025"/>
</test>
<test id="s1-s3-s1-t47" name="Remove_Not_Existing_Module" line="312">
<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-08-23T02:07:48.838924" elapsed="0.000211"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:07:48.838654" 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-08-23T02:07:48.840140" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:48.840033" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.840014" 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-08-23T02:07:48.844615" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:48.844510" elapsed="0.000150"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.844492" elapsed="0.000190"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:48.845651" 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-08-23T02:07:48.845274" elapsed="0.000403"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:07:48.846139" 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-08-23T02:07:48.845828" elapsed="0.000338"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:07:48.846209" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:48.846361" 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-08-23T02:07:48.844907" elapsed="0.001478"/>
</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-08-23T02:07:48.851393" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:48.851287" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.851268" 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-08-23T02:07:48.852624" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:48.852518" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.852499" elapsed="0.000193"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:07:48.853229" level="INFO">${karaf_connection_index} = 18</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-08-23T02:07:48.852823" elapsed="0.000434"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.853646" level="INFO">${current_connection_index} = 23</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-08-23T02:07:48.853404" elapsed="0.000268"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.883539" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:48.854254" elapsed="0.029448"/>
</kw>
<msg time="2026-08-23T02:07:48.883898" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:07:48.883945" 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 "n "e "t "c "o "n "f "...</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-08-23T02:07:48.853876" elapsed="0.030106"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.902945" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "R "e "m "o "v "e "_ "N "o "t "_ "E "x "i "s "t "i "n "g "_ "M "o "d "u "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-08-23T02:07:48.884520" elapsed="0.018603"/>
</kw>
<msg time="2026-08-23T02:07:48.903290" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:07:48.903336" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "R "e "m "o "v "e "_ "N "o "t "_ "E ...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:07:48.884141" elapsed="0.019231"/>
</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-08-23T02:07:48.903660" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:48.903449" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.903428" elapsed="0.000334"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:48.904290" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "R "e "m "o "v "e "_ "N "o "t "_ "E "x "i "s "t "i "n "g "_ "M "o "d "u "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-08-23T02:07:48.903916" elapsed="0.000443"/>
</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-08-23T02:07:48.904629" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:48.904427" elapsed="0.000277"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.904409" elapsed="0.000320"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:07:48.904763" 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-08-23T02:07:48.907585" elapsed="0.000146"/>
</kw>
<msg time="2026-08-23T02:07:48.907801" 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-08-23T02:07:48.906953" elapsed="0.000965"/>
</kw>
<kw name="Open 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-08-23T02:07:48.908699" elapsed="0.000037"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:48.909537" elapsed="0.000038"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:07:48.905597" elapsed="0.004056"/>
</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-08-23T02:07:48.905035" elapsed="0.004730"/>
</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-08-23T02:07:48.852218" elapsed="0.057668"/>
</kw>
<msg time="2026-08-23T02:07:48.909979" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:48.910022" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "R "e "m "o "v "e "_ "N "o "t "_ "E ...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:07:48.851600" elapsed="0.058458"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:07:48.910239" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-08-23T02:07:48.910133" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.910115" 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-08-23T02:07:48.910700" 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-08-23T02:07:48.911234" elapsed="0.000026"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:07:48.911307" 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-08-23T02:07:48.850954" elapsed="0.060460"/>
</kw>
<msg time="2026-08-23T02:07:48.911506" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:48.911592" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "R "e "m "o "v "e "_ "N "o "t "_ "E ...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:07:48.846741" elapsed="0.064891"/>
</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-08-23T02:07:48.911963" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:48.911708" elapsed="0.000310"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.911691" elapsed="0.000351"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:07:48.846611" elapsed="0.065454"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:07:48.846439" elapsed="0.065654"/>
</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-08-23T02:07:48.844158" elapsed="0.067988"/>
</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-08-23T02:07:48.839725" elapsed="0.072475"/>
</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-08-23T02:07:48.839326" elapsed="0.072918"/>
</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-08-23T02:07:48.836434" elapsed="0.075860"/>
</kw>
<kw name="Perform_Test">
<kw name="Load_And_Send_Message">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:48.913587" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/remove-not-existing-request.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/remove-not-existing-request.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:48.913773" level="INFO">${data} = &lt;rpc message-id="6" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
&lt;edit-config&gt;
    &lt;target&gt;
        &lt;candidate/&gt;
    &lt;/target&gt;
    &lt;test-option&gt;
        set
    &lt;/test-option&gt;
    &lt;default-operati...</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:48.913376" elapsed="0.000428"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:48.913868" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:48.914018" level="INFO">${request} = &lt;rpc message-id="6" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
&lt;edit-config&gt;
    &lt;target&gt;
        &lt;candidate/&gt;
    &lt;/target&gt;
    &lt;test-option&gt;
        set
    &lt;/test-option&gt;
    &lt;default-operati...</msg>
<var>${request}</var>
<arg>${name}-request</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:48.913073" elapsed="0.000973"/>
</kw>
<kw name="Send_Message">
<kw name="Transmit_Message">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.917172" level="INFO">&lt;rpc message-id="6" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;</msg>
<arg>${message}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:48.914772" elapsed="0.002458"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.917752" level="INFO">&lt;edit-config&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:48.917373" elapsed="0.000432"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.921600" level="INFO">&lt;target&gt;
        &lt;candidate/&gt;
    &lt;/target&gt;
    &lt;test-option&gt;
        set
    &lt;/test-option&gt;
    &lt;default-operation&gt;none&lt;/default-operation&gt;
    &lt;config xmlns:a="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
      &lt;cars xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car" a:operation="remove"&gt;
      &lt;/cars&gt;
    &lt;/config&gt;
&lt;/edit-config&gt;
&lt;/rpc&gt;

]]&gt;]]&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:48.917960" elapsed="0.003702"/>
</kw>
<arg>${message}</arg>
<doc>Transmit message to Netconf connection and discard the echo of the message.</doc>
<status status="PASS" start="2026-08-23T02:07:48.914475" elapsed="0.007246"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.923647" level="INFO">&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="6"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<msg time="2026-08-23T02:07:48.923739" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="6"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:48.921878" elapsed="0.001890"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:48.923815" elapsed="0.000045"/>
</return>
<msg time="2026-08-23T02:07:48.923982" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="6"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${request}</arg>
<doc>Send message to Netconf connection and get the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:48.914185" elapsed="0.009825"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:48.924055" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:07:48.924198" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="6"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${actual}</var>
<arg>${name}</arg>
<doc>Load a message from the data file set, send it to Netconf and return the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:48.912726" elapsed="0.011500"/>
</kw>
<kw name="Load_Expected_Reply">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:48.925431" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/remove-not-existing-reply.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/remove-not-existing-reply.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:48.925591" level="INFO">${data} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="6"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:48.925223" elapsed="0.000395"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:48.925665" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:48.925813" level="INFO">${expected_reply} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="6"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected_reply}</var>
<arg>${name}-reply</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:48.924917" elapsed="0.000938"/>
</kw>
<return>
<value>${expected_reply}</value>
<status status="PASS" start="2026-08-23T02:07:48.925901" elapsed="0.000025"/>
</return>
<msg time="2026-08-23T02:07:48.926046" level="INFO">${expected} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="6"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected}</var>
<arg>${name}</arg>
<doc>Load the expected reply from the data file set and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:48.924360" elapsed="0.001713"/>
</kw>
<kw name="Remove String" owner="String">
<msg time="2026-08-23T02:07:48.926411" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="6"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>]]&gt;]]&gt;</arg>
<doc>Removes all ``removables`` from the given ``string``.</doc>
<status status="PASS" start="2026-08-23T02:07:48.926215" elapsed="0.000224"/>
</kw>
<kw name="Strip String" owner="String">
<msg time="2026-08-23T02:07:48.926798" level="INFO">${actual} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="6"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>mode=both</arg>
<doc>Remove leading and/or trailing whitespaces from the given string.</doc>
<status status="PASS" start="2026-08-23T02:07:48.926581" elapsed="0.000245"/>
</kw>
<kw name="Elements Should Be Equal" owner="XML">
<arg>${actual}</arg>
<arg>${expected}</arg>
<arg>normalize_whitespace=True</arg>
<doc>Verifies that the given ``source`` element is equal to ``expected``.</doc>
<status status="PASS" start="2026-08-23T02:07:48.926993" elapsed="0.000392"/>
</kw>
<return>
<value>${actual}</value>
<status status="PASS" start="2026-08-23T02:07:48.927437" elapsed="0.000027"/>
</return>
<arg>remove-not-existing</arg>
<doc>Load and send the request from the dataset and compare the returned reply to the one stored in the dataset.</doc>
<status status="PASS" start="2026-08-23T02:07:48.912452" elapsed="0.015106"/>
</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-08-23T02:07:48.928739" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:48.928362" elapsed="0.000440"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.928345" elapsed="0.000500"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>'${SetupUtils__Known_Bug_ID}' != ''</arg>
<arg>Set_Known_Bug_Id</arg>
<arg>${EMPTY}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:07:48.928982" elapsed="0.000314"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:07:48.933930" 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-08-23T02:07:48.933510" elapsed="0.000448"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-08-23T02:07:48.934172" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:07:48.934032" elapsed="0.000196"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.934013" elapsed="0.000240"/>
</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-08-23T02:07:48.934389" 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-08-23T02:07:48.934548" 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-08-23T02:07:48.934708" elapsed="0.000019"/>
</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-08-23T02:07:48.934875" 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-08-23T02:07:48.935031" 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-08-23T02:07:48.935183" 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-08-23T02:07:48.935333" 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-08-23T02:07:48.933222" elapsed="0.002186"/>
</kw>
<status status="PASS" start="2026-08-23T02:07:48.928158" elapsed="0.007298"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-08-23T02:07:48.927799" elapsed="0.007697"/>
</kw>
<doc>Attempt to remove the "module" element again and check that the operation is "silently ignored".</doc>
<status status="PASS" start="2026-08-23T02:07:48.835854" elapsed="0.099713"/>
</test>
<test id="s1-s3-s1-t48" name="Commit_Remove_Not_Existing_Module" line="316">
<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-08-23T02:07:48.940019" elapsed="0.000207"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:07:48.939749" elapsed="0.000532"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:48.941239" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:48.941131" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.941112" elapsed="0.000195"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:48.945701" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:48.945596" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.945578" elapsed="0.000191"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:48.946725" 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-08-23T02:07:48.946351" elapsed="0.000401"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:07:48.947206" 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-08-23T02:07:48.946913" elapsed="0.000319"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:07:48.947277" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:48.947429" 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-08-23T02:07:48.945991" elapsed="0.001462"/>
</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-08-23T02:07:48.952490" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:48.952383" elapsed="0.000162"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.952364" elapsed="0.000204"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:48.953732" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:48.953627" elapsed="0.000150"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:48.953608" elapsed="0.000191"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:07:48.954306" level="INFO">${karaf_connection_index} = 18</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-08-23T02:07:48.953952" elapsed="0.000381"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.954719" level="INFO">${current_connection_index} = 23</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-08-23T02:07:48.954478" elapsed="0.000267"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:48.985872" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:48.955284" elapsed="0.030768"/>
</kw>
<msg time="2026-08-23T02:07:48.986232" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:07:48.986278" 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 "n "e "t "c "o "n "f "...</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-08-23T02:07:48.954911" elapsed="0.031403"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:07:49.021131" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "o "m "m "i "t "_ "R "e "m "o "v "e "_ "N "o "t "_ "E "x "i "s "t "i "n "g "_ "M "o "d "u "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-08-23T02:07:48.986904" elapsed="0.034408"/>
</kw>
<msg time="2026-08-23T02:07:49.021482" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:07:49.021527" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "o "m "m "i "t "_ "R "e "m "o "v ...</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-08-23T02:07:48.986486" elapsed="0.035079"/>
</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-08-23T02:07:49.021891" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:49.021646" elapsed="0.000323"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:49.021625" elapsed="0.000371"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:49.022500" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "o "m "m "i "t "_ "R "e "m "o "v "e "_ "N "o "t "_ "E "x "i "s "t "i "n "g "_ "M "o "d "u "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-08-23T02:07:49.022127" elapsed="0.000493"/>
</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-08-23T02:07:49.022907" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:49.022686" elapsed="0.000300"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:49.022668" elapsed="0.000342"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:07:49.023045" elapsed="0.000034"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-23T02:07:49.025987" elapsed="0.000150"/>
</kw>
<msg time="2026-08-23T02:07:49.026208" 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-08-23T02:07:49.025289" elapsed="0.001022"/>
</kw>
<kw name="Open 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-08-23T02:07:49.027129" elapsed="0.000037"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:49.027963" elapsed="0.000063"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:07:49.023914" elapsed="0.004194"/>
</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-08-23T02:07:49.023316" elapsed="0.004910"/>
</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-08-23T02:07:48.953330" elapsed="0.074993"/>
</kw>
<msg time="2026-08-23T02:07:49.028414" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:49.028457" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "o "m "m "i "t "_ "R "e "m "o "v ...</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-08-23T02:07:48.952707" elapsed="0.075788"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:07:49.028676" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:07:49.028571" elapsed="0.000163"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:49.028552" 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-08-23T02:07:49.029331" 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-08-23T02:07:49.029651" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:07:49.029721" 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-08-23T02:07:48.952051" elapsed="0.077778"/>
</kw>
<msg time="2026-08-23T02:07:49.029944" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:49.029989" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "o "m "m "i "t "_ "R "e "m "o "v ...</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-08-23T02:07:48.947796" elapsed="0.082230"/>
</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-08-23T02:07:49.030336" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:49.030101" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:49.030084" elapsed="0.000330"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:07:48.947667" elapsed="0.082770"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:07:48.947504" elapsed="0.082964"/>
</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-08-23T02:07:48.945244" elapsed="0.085277"/>
</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-08-23T02:07:48.940845" elapsed="0.089729"/>
</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-08-23T02:07:48.940416" elapsed="0.090202"/>
</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-08-23T02:07:48.936373" elapsed="0.094296"/>
</kw>
<kw name="Perform_Test">
<kw name="Load_And_Send_Message">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:49.032009" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/remove-not-existing-commit-request.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/remove-not-existing-commit-request.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:49.032169" level="INFO">${data} = &lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="88"&gt;
&lt;commit/&gt;
&lt;/rpc&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:49.031742" elapsed="0.000454"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:49.032275" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:07:49.032426" level="INFO">${request} = &lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="88"&gt;
&lt;commit/&gt;
&lt;/rpc&gt;
</msg>
<var>${request}</var>
<arg>${name}-request</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:49.031435" elapsed="0.001018"/>
</kw>
<kw name="Send_Message">
<kw name="Transmit_Message">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:49.035074" level="INFO">&lt;rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="88"&gt;</msg>
<arg>${message}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:49.033212" elapsed="0.001920"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:49.035587" level="INFO">&lt;commit/&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:49.035276" elapsed="0.000362"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:49.036451" level="INFO">&lt;/rpc&gt;

]]&gt;]]&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:49.035779" elapsed="0.000740"/>
</kw>
<arg>${message}</arg>
<doc>Transmit message to Netconf connection and discard the echo of the message.</doc>
<status status="PASS" start="2026-08-23T02:07:49.032916" elapsed="0.003667"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:49.042819" level="INFO">&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="88"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<msg time="2026-08-23T02:07:49.042923" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="88"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:49.036733" elapsed="0.006218"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:49.042999" elapsed="0.000039"/>
</return>
<msg time="2026-08-23T02:07:49.043161" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="88"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${request}</arg>
<doc>Send message to Netconf connection and get the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:49.032602" elapsed="0.010586"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:49.043232" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:07:49.043374" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="88"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${actual}</var>
<arg>${name}</arg>
<doc>Load a message from the data file set, send it to Netconf and return the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:49.031145" elapsed="0.012256"/>
</kw>
<kw name="Load_Expected_Reply">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:49.044639" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/remove-not-existing-commit-reply.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/remove-not-existing-commit-reply.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:49.044767" level="INFO">${data} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="88"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:49.044425" elapsed="0.000369"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:49.044855" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:49.045006" level="INFO">${expected_reply} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="88"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected_reply}</var>
<arg>${name}-reply</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:49.043859" elapsed="0.001173"/>
</kw>
<return>
<value>${expected_reply}</value>
<status status="PASS" start="2026-08-23T02:07:49.045075" elapsed="0.000025"/>
</return>
<msg time="2026-08-23T02:07:49.045218" level="INFO">${expected} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="88"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected}</var>
<arg>${name}</arg>
<doc>Load the expected reply from the data file set and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:49.043540" elapsed="0.001704"/>
</kw>
<kw name="Remove String" owner="String">
<msg time="2026-08-23T02:07:49.045585" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="88"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>]]&gt;]]&gt;</arg>
<doc>Removes all ``removables`` from the given ``string``.</doc>
<status status="PASS" start="2026-08-23T02:07:49.045385" elapsed="0.000227"/>
</kw>
<kw name="Strip String" owner="String">
<msg time="2026-08-23T02:07:49.045995" level="INFO">${actual} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="88"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>mode=both</arg>
<doc>Remove leading and/or trailing whitespaces from the given string.</doc>
<status status="PASS" start="2026-08-23T02:07:49.045757" elapsed="0.000266"/>
</kw>
<kw name="Elements Should Be Equal" owner="XML">
<arg>${actual}</arg>
<arg>${expected}</arg>
<arg>normalize_whitespace=True</arg>
<doc>Verifies that the given ``source`` element is equal to ``expected``.</doc>
<status status="PASS" start="2026-08-23T02:07:49.046165" elapsed="0.000427"/>
</kw>
<return>
<value>${actual}</value>
<status status="PASS" start="2026-08-23T02:07:49.046645" elapsed="0.000027"/>
</return>
<arg>remove-not-existing-commit</arg>
<doc>Load and send the request from the dataset and compare the returned reply to the one stored in the dataset.</doc>
<status status="PASS" start="2026-08-23T02:07:49.030865" elapsed="0.015902"/>
</kw>
<kw name="Report Failure Due To Bug" owner="Utils" type="TEARDOWN">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:07:49.047913" 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-08-23T02:07:49.047484" elapsed="0.000456"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-08-23T02:07:49.048155" elapsed="0.000070"/>
</return>
<status status="PASS" start="2026-08-23T02:07:49.048013" elapsed="0.000245"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:49.047995" elapsed="0.000288"/>
</if>
<kw name="Comment" owner="BuiltIn">
<arg>Jira tickets are {PROJECT}-{NUMBER} while Bugzilla tickets are {NUMBER}</arg>
<doc>Displays the given messages in the log file as keyword arguments.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:49.048434" elapsed="0.000022"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${match}</var>
<arg>Should Contain</arg>
<arg>${number}</arg>
<arg>-</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:49.048601" elapsed="0.000020"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${bug_url}</var>
<arg>${match}</arg>
<arg>https://jira.opendaylight.org/browse/${number}</arg>
<arg>https://bugs.opendaylight.org/show_bug.cgi?id=${number}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:49.048765" elapsed="0.000020"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${msg}</var>
<arg>This test fails due to ${bug_url}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:49.048941" elapsed="0.000021"/>
</kw>
<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-08-23T02:07:49.049096" elapsed="0.000020"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<arg>${msg}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:49.049246" elapsed="0.000020"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${msg}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:49.049394" elapsed="0.000019"/>
</kw>
<if>
<branch type="IF" condition="&quot;${include_bug_in_tags}&quot;==&quot;True&quot;">
<kw name="Set Tags" owner="BuiltIn">
<arg>${bug_url}</arg>
<doc>Adds given ``tags`` for the current test or all tests in a suite.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:49.049619" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:49.049473" elapsed="0.000198"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:07:49.049457" elapsed="0.000237"/>
</if>
<arg>4455</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="PASS" start="2026-08-23T02:07:49.047151" elapsed="0.002590"/>
</kw>
<doc>Attempt to commit and check the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:48.935881" elapsed="0.113907"/>
</test>
<test id="s1-s3-s1-t49" name="Close_Session" line="321">
<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-08-23T02:07:49.052873" elapsed="0.000209"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:07:49.052612" elapsed="0.000524"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:49.054100" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:49.053988" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:49.053970" 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-08-23T02:07:49.058765" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:49.058660" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:49.058642" elapsed="0.000203"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:49.059823" 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-08-23T02:07:49.059416" elapsed="0.000458"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:07:49.060320" 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-08-23T02:07:49.060023" elapsed="0.000323"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:07:49.060391" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:49.060544" 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-08-23T02:07:49.059056" elapsed="0.001512"/>
</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-08-23T02:07:49.065585" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:49.065479" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:49.065461" 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-08-23T02:07:49.066808" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:49.066701" elapsed="0.000176"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:49.066683" elapsed="0.000217"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:07:49.067397" level="INFO">${karaf_connection_index} = 18</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-08-23T02:07:49.067034" elapsed="0.000389"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:49.067855" level="INFO">${current_connection_index} = 23</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-08-23T02:07:49.067567" elapsed="0.000315"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:49.099180" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:49.068404" elapsed="0.031025"/>
</kw>
<msg time="2026-08-23T02:07:49.099618" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:07:49.099668" 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 "n "e "t "c "o "n "f "...</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-08-23T02:07:49.068032" elapsed="0.031681"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:07:49.117819" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "l "o "s "e "_ "S "e "s "s "i "o "n "[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-08-23T02:07:49.100281" elapsed="0.017822"/>
</kw>
<msg time="2026-08-23T02:07:49.118361" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:07:49.118430" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "l "o "s "e "_ "S "e "s "s "i "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-08-23T02:07:49.099903" elapsed="0.018582"/>
</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-08-23T02:07:49.118954" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:49.118601" elapsed="0.000469"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:49.118572" elapsed="0.000536"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:49.119919" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "l "o "s "e "_ "S "e "s "s "i "o "n "[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-08-23T02:07:49.119303" elapsed="0.000713"/>
</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-08-23T02:07:49.120295" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:49.120089" elapsed="0.000281"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:49.120070" elapsed="0.000325"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:07:49.120429" 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-08-23T02:07:49.123332" elapsed="0.000158"/>
</kw>
<msg time="2026-08-23T02:07:49.123562" 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-08-23T02:07:49.122598" elapsed="0.001065"/>
</kw>
<kw name="Open 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-08-23T02:07:49.124482" elapsed="0.000037"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:49.125310" elapsed="0.000036"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:07:49.121269" elapsed="0.004157"/>
</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-08-23T02:07:49.120675" elapsed="0.004866"/>
</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-08-23T02:07:49.066405" elapsed="0.059234"/>
</kw>
<msg time="2026-08-23T02:07:49.125728" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:49.125772" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "l "o "s "e "_ "S "e "s "s "i "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-08-23T02:07:49.065791" elapsed="0.060018"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:07:49.126325" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-23T02:07:49.126055" elapsed="0.000332"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:49.126035" elapsed="0.000375"/>
</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-08-23T02:07:49.126791" 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-08-23T02:07:49.127132" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:07:49.127203" 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-08-23T02:07:49.065146" elapsed="0.062176"/>
</kw>
<msg time="2026-08-23T02:07:49.127415" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:49.127458" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "M "D "S "A "L ". "N "o "r "t "h "b "o "u "n "d ". "C "l "o "s "e "_ "S "e "s "s "i "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-08-23T02:07:49.060943" elapsed="0.066551"/>
</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-08-23T02:07:49.127903" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:49.127602" elapsed="0.000357"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:49.127584" elapsed="0.000399"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:07:49.060796" elapsed="0.067210"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:07:49.060622" elapsed="0.067413"/>
</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-08-23T02:07:49.058304" elapsed="0.069784"/>
</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-08-23T02:07:49.053672" elapsed="0.074469"/>
</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-08-23T02:07:49.053272" elapsed="0.074913"/>
</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-08-23T02:07:49.050575" elapsed="0.077660"/>
</kw>
<kw name="Perform_Test">
<kw name="Load_And_Send_Message">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:49.129487" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/close-session-request.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/close-session-request.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:49.129629" level="INFO">${data} = &lt;rpc message-id="999" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
    &lt;close-session/&gt;
&lt;/rpc&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:49.129274" elapsed="0.000381"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:49.129701" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:07:49.129871" level="INFO">${request} = &lt;rpc message-id="999" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;
    &lt;close-session/&gt;
&lt;/rpc&gt;
</msg>
<var>${request}</var>
<arg>${name}-request</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:49.128971" elapsed="0.000928"/>
</kw>
<kw name="Send_Message">
<kw name="Transmit_Message">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:49.132465" level="INFO">&lt;rpc message-id="999" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"&gt;</msg>
<arg>${message}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:49.130615" elapsed="0.001908"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:49.133075" level="INFO">&lt;close-session/&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:49.132667" elapsed="0.000460"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:49.133709" level="INFO">&lt;/rpc&gt;

]]&gt;]]&gt;</msg>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:49.133265" elapsed="0.000497"/>
</kw>
<arg>${message}</arg>
<doc>Transmit message to Netconf connection and discard the echo of the message.</doc>
<status status="PASS" start="2026-08-23T02:07:49.130326" elapsed="0.003491"/>
</kw>
<kw name="Read Until" owner="SSHLibrary">
<msg time="2026-08-23T02:07:49.137281" level="INFO">&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="999"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<msg time="2026-08-23T02:07:49.137372" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="999"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${ODL_NETCONF_PROMPT}</arg>
<doc>Consumes and returns the server output until ``expected`` is encountered.</doc>
<status status="PASS" start="2026-08-23T02:07:49.133974" elapsed="0.003426"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:49.137447" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:07:49.137594" level="INFO">${reply} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="999"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${reply}</var>
<arg>${request}</arg>
<doc>Send message to Netconf connection and get the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:49.130039" elapsed="0.007583"/>
</kw>
<return>
<value>${reply}</value>
<status status="PASS" start="2026-08-23T02:07:49.137665" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:07:49.137806" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="999"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
]]&gt;]]&gt;</msg>
<var>${actual}</var>
<arg>${name}</arg>
<doc>Load a message from the data file set, send it to Netconf and return the reply.</doc>
<status status="PASS" start="2026-08-23T02:07:49.128668" elapsed="0.009185"/>
</kw>
<kw name="Load_Expected_Reply">
<kw name="Get_Data">
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:07:49.138807" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/close-session-reply.msg"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/MDSAL/close-session-reply.msg&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:07:49.138969" level="INFO">${data} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="999"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${data}</var>
<arg>${datadir}${/}${name}.${dataext}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:07:49.138597" elapsed="0.000400"/>
</kw>
<return>
<value>${data}</value>
<status status="PASS" start="2026-08-23T02:07:49.139042" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:49.139189" level="INFO">${expected_reply} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="999"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected_reply}</var>
<arg>${name}-reply</arg>
<doc>Load the specified data from the data directory and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:49.138289" elapsed="0.000946"/>
</kw>
<return>
<value>${expected_reply}</value>
<status status="PASS" start="2026-08-23T02:07:49.139280" elapsed="0.000313"/>
</return>
<msg time="2026-08-23T02:07:49.139729" level="INFO">${expected} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="999"&gt;
&lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${expected}</var>
<arg>${name}</arg>
<doc>Load the expected reply from the data file set and return it.</doc>
<status status="PASS" start="2026-08-23T02:07:49.137993" elapsed="0.001763"/>
</kw>
<kw name="Remove String" owner="String">
<msg time="2026-08-23T02:07:49.140121" level="INFO">${actual} = 
&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="999"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;
</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>]]&gt;]]&gt;</arg>
<doc>Removes all ``removables`` from the given ``string``.</doc>
<status status="PASS" start="2026-08-23T02:07:49.139918" elapsed="0.000232"/>
</kw>
<kw name="Strip String" owner="String">
<msg time="2026-08-23T02:07:49.140513" level="INFO">${actual} = &lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
&lt;rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="999"&gt;
    &lt;ok/&gt;
&lt;/rpc-reply&gt;</msg>
<var>${actual}</var>
<arg>${actual}</arg>
<arg>mode=both</arg>
<doc>Remove leading and/or trailing whitespaces from the given string.</doc>
<status status="PASS" start="2026-08-23T02:07:49.140294" elapsed="0.000248"/>
</kw>
<kw name="Elements Should Be Equal" owner="XML">
<arg>${actual}</arg>
<arg>${expected}</arg>
<arg>normalize_whitespace=True</arg>
<doc>Verifies that the given ``source`` element is equal to ``expected``.</doc>
<status status="PASS" start="2026-08-23T02:07:49.140686" elapsed="0.000450"/>
</kw>
<return>
<value>${actual}</value>
<status status="PASS" start="2026-08-23T02:07:49.141189" elapsed="0.000028"/>
</return>
<arg>close-session</arg>
<doc>Load and send the request from the dataset and compare the returned reply to the one stored in the dataset.</doc>
<status status="PASS" start="2026-08-23T02:07:49.128395" elapsed="0.012917"/>
</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-08-23T02:07:49.142704" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:49.142343" elapsed="0.000423"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:49.142324" elapsed="0.000468"/>
</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-08-23T02:07:49.142941" elapsed="0.000333"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:07:49.148128" 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-08-23T02:07:49.147694" elapsed="0.000461"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="PASS" start="2026-08-23T02:07:49.148381" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-23T02:07:49.148238" elapsed="0.000201"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:49.148218" elapsed="0.000245"/>
</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-08-23T02:07:49.148600" 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-08-23T02:07:49.148758" 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-08-23T02:07:49.148933" 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-08-23T02:07:49.149086" 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-08-23T02:07:49.149237" 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-08-23T02:07:49.149387" 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-08-23T02:07:49.149535" 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-08-23T02:07:49.147333" elapsed="0.002276"/>
</kw>
<status status="PASS" start="2026-08-23T02:07:49.141915" elapsed="0.007744"/>
</kw>
<doc>Test case teardown. Show linked bugs in case of failure.</doc>
<status status="PASS" start="2026-08-23T02:07:49.141559" elapsed="0.008140"/>
</kw>
<doc>Close the session and check that it was closed properly.</doc>
<status status="PASS" start="2026-08-23T02:07:49.050081" elapsed="0.099657"/>
</test>
<kw name="Teardown_Everything" type="TEARDOWN">
<kw name="Abort_ODL_Netconf_Connection">
<if>
<branch type="IF" condition="${ssh_netconf_pid} == -1">
<return>
<status status="NOT RUN" start="2026-08-23T02:07:49.150881" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:49.150754" elapsed="0.000170"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:49.150737" elapsed="0.000209"/>
</if>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:07:49.151395" level="INFO">${kill_command} = kill 4528</msg>
<var>${kill_command}</var>
<arg>kill ${ssh_netconf_pid}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:07:49.151078" elapsed="0.000343"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T02:07:49.151907" level="INFO">${ssh_netconf_pid} = -1</msg>
<arg>${ssh_netconf_pid}</arg>
<arg>-1</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-23T02:07:49.151571" elapsed="0.000415"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${ssh_control}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-23T02:07:49.152126" elapsed="0.000132"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:49.153920" level="INFO">kill 4528</msg>
<arg>${kill_command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:49.152392" elapsed="0.001584"/>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-08-23T02:07:49.155320" level="INFO">[?2004l-bash: kill: (4528) - No such process
[?2004h[jenkins@releng-19126-54-0-builder-0 ~]&gt;</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="PASS" start="2026-08-23T02:07:49.154121" elapsed="0.001257"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${ssh_netconf}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-23T02:07:49.155514" elapsed="0.000136"/>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-08-23T02:07:49.156666" level="INFO">Connection to 127.0.0.1 closed by remote host.
[?2004h[jenkins@releng-19126-54-0-builder-0 ~]&gt;</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="PASS" start="2026-08-23T02:07:49.155786" elapsed="0.000929"/>
</kw>
<doc>Correctly close the Netconf connection and make sure it is really dead.</doc>
<status status="PASS" start="2026-08-23T02:07:49.150635" elapsed="0.006132"/>
</kw>
<kw name="Delete All Sessions" owner="RequestsLibrary">
<msg time="2026-08-23T02:07:49.156991" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects</doc>
<status status="PASS" start="2026-08-23T02:07:49.156914" elapsed="0.000185"/>
</kw>
<doc>Close the Netconf connection and destroy all sessions in the requests library.</doc>
<status status="PASS" start="2026-08-23T02:07:49.150373" elapsed="0.006778"/>
</kw>
<doc>Metconf MDSAL Northbound test suite.

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

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


The request produced by test cases "Get Config Running", "Get Config Running
To Confirm No_Edit Before Commit", "Get Config Running To Confirm Delete
After Commit" and "Get Config Candidate To Confirm Discard" all use the same
message id ("empty") for their requests. This is possible because the
requests produced by this suite are strictly serialized. The RFC 6241 does
not state that these IDs are unique, it only requires that each ID used is
"XML attribute normalized" if the client wants it to be returned unmodified.
The RFC specifically says that "the content of this attribute is not
interpreted in any way, it only is stored to be returned with the reply to
the request. The reuse of the "empty" string for the 4 test cases was chosen
for simplicity.

TODO: Change the 4 testcases to use unique message IDs.

TODO: There are many sections with too many "Should_[Not_]Contain" keyword
invocations (see Check_Multiple_Modules_Merge_Replace for a particularly bad
example). Create a resource that will be able to extract the data from the
requests and search for them in the response, then convert to usage of this
resource (think "Thou shall not repeat yourself"). The following resource was
found when doing research on this:
http://robotframework.org/robotframework/latest/libraries/XML.html</doc>
<status status="PASS" start="2026-08-23T02:07:39.193176" elapsed="9.964004"/>
</suite>
<status status="PASS" start="2026-08-23T02:07:39.191954" elapsed="9.966366"/>
</suite>
<suite id="s1-s4" name="CRUD" source="/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD">
<suite id="s1-s4-s1" name="CRUD-RPC" source="/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/CRUD-RPC.robot">
<kw name="Setup_Everything" 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-08-23T02:07:49.249532" 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-08-23T02:07:49.245283" elapsed="0.004303"/>
</kw>
<doc>Set suite to not fail fast.</doc>
<status status="PASS" start="2026-08-23T02:07:49.245057" elapsed="0.004596"/>
</kw>
<kw name="Setup_Karaf_Keywords" owner="KarafKeywords">
<kw name="ClusterManagement_Setup" owner="ClusterManagement">
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-08-23T02:07:49.254617" 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-08-23T02:07:49.250869" elapsed="0.003777"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-08-23T02:07:49.254871" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:49.254732" elapsed="0.000189"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:49.254708" elapsed="0.000237"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T02:07:49.255458" 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-08-23T02:07:49.255100" elapsed="0.000400"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-08-23T02:07:49.255991" 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-08-23T02:07:49.255658" elapsed="0.000359"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Convert To Integer" owner="BuiltIn">
<arg>${cluster_size}</arg>
<doc>Converts the given item to an integer number.</doc>
<status status="PASS" start="2026-08-23T02:07:49.256519" elapsed="0.000287"/>
</kw>
<msg time="2026-08-23T02:07:49.256923" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:49.256969" 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-08-23T02:07:49.256181" elapsed="0.000810"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:49.257529" 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-08-23T02:07:49.257160" elapsed="0.000394"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:07:49.258556" level="INFO">@{member_index_list} = [ ]</msg>
<var>@{member_index_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-08-23T02:07:49.258271" elapsed="0.000312"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:07:49.259000" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-08-23T02:07:49.258727" elapsed="0.000386"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:07:49.259574" 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-08-23T02:07:49.259278" elapsed="0.000322"/>
</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-08-23T02:07:49.262725" elapsed="0.000240"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:07:49.263449" level="INFO">${member_ip} = 10.30.170.114</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-08-23T02:07:49.263122" elapsed="0.000353"/>
</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-08-23T02:07:49.263626" elapsed="0.000249"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:07:49.264654" 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-08-23T02:07:49.264360" elapsed="0.000321"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-08-23T02:07:49.264727" elapsed="0.000038"/>
</return>
<msg time="2026-08-23T02:07:49.264911" 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-08-23T02:07:49.264070" elapsed="0.000867"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:07:49.265678" level="INFO">Creating Session using : alias=ClusterManagement__session_1, url=http://10.30.170.114:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x72b0ed1fc450&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-08-23T02:07:49.265095" elapsed="0.000735"/>
</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-08-23T02:07:49.266007" elapsed="0.000191"/>
</kw>
<arg>${index}</arg>
<arg>${member_index_list}</arg>
<arg>${session_list}</arg>
<arg>${index_to_ip_mapping}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>http_retries=${http_retries}</arg>
<doc>Add a corresponding item based on index into the last three arguments.
Create the Http session whose alias is added to list.</doc>
<status status="PASS" start="2026-08-23T02:07:49.262134" elapsed="0.004124"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:07:49.261945" elapsed="0.004357"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="PASS" start="2026-08-23T02:07:49.259663" elapsed="0.006685"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T02:07:49.266931" 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-08-23T02:07:49.266512" elapsed="0.000463"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T02:07:49.267532" level="INFO">${ClusterManagement__index_to_ip_mapping} = {1: '10.30.170.114'}</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-08-23T02:07:49.267133" elapsed="0.000441"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T02:07:49.268133" 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-08-23T02:07:49.267733" elapsed="0.000440"/>
</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-08-23T02:07:49.257806" elapsed="0.010424"/>
</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-08-23T02:07:49.250493" elapsed="0.017791"/>
</kw>
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:49.268462" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:49.268349" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:49.268330" elapsed="0.000200"/>
</if>
<kw name="Run_Bash_Command_On_List_Or_All" owner="ClusterManagement">
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:49.271631" 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-08-23T02:07:49.271252" elapsed="0.000405"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:07:49.272128" 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-08-23T02:07:49.271812" elapsed="0.000342"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:07:49.272198" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:49.272350" 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-08-23T02:07:49.270928" elapsed="0.001447"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:07:49.273357" level="INFO">${member_ip} = 10.30.170.114</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-08-23T02:07:49.273093" elapsed="0.000289"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:49.274249" 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-08-23T02:07:49.274375" 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-08-23T02:07:49.274080" elapsed="0.000322"/>
</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-08-23T02:07:49.277932" elapsed="0.000047"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:49.277259" elapsed="0.000779"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:49.277216" elapsed="0.000889"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:49.278775" 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-08-23T02:07:49.279078" 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-08-23T02:07:49.278394" elapsed="0.000787"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:49.280116" level="INFO">Attempting to execute command "iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save" on remote system "10.30.170.114" 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-08-23T02:07:49.279441" elapsed="0.000831"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:49.281388" 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-08-23T02:07:49.280533" elapsed="0.000954"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-08-23T02:07:49.283071" level="INFO">Length is 0.</msg>
<msg time="2026-08-23T02:07:49.283149" 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-08-23T02:07:49.282591" elapsed="0.000582"/>
</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-08-23T02:07:49.283376" elapsed="0.000325"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-08-23T02:07:49.284624" level="INFO">Logging into '10.30.170.114:22' as 'jenkins'.</msg>
<msg time="2026-08-23T02:07:49.611657" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-186-generic x86_64)

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

 System information as of Sun Aug 23 02:07:23 UTC 2026

  System load:  0.0                Processes:             118
  Usage of /:   13.8% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.114
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

41 updates can be applied immediately.
35 of these updates are standard security updates.
To see these additional updates run: apt list --upgradable

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

New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sun Aug 23 02:07:40 2026 from 10.30.171.240
[?2004h[jenkins@releng-19126-54-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-08-23T02:07:49.284300" elapsed="0.327574"/>
</kw>
<msg time="2026-08-23T02:07:49.612001" 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-08-23T02:07:49.283943" elapsed="0.328158"/>
</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-08-23T02:07:49.281866" elapsed="0.330512"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-23T02:07:49.613363" level="INFO">Executing command 'iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save'.</msg>
<msg time="2026-08-23T02:07:49.625881" level="INFO">Command exited with return code 4.</msg>
<msg time="2026-08-23T02:07:49.626325" level="INFO">${stdout} = </msg>
<msg time="2026-08-23T02:07:49.626556" 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-08-23T02:07:49.612801" elapsed="0.013917"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-08-23T02:07:49.627388" elapsed="0.001321"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:49.631780" 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-08-23T02:07:49.630221" elapsed="0.002012"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-08-23T02:07:49.633359" elapsed="0.000076"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:49.632589" elapsed="0.001096"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:49.632475" elapsed="0.001433"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-08-23T02:07:49.635079" elapsed="0.000152"/>
</return>
<status status="PASS" start="2026-08-23T02:07:49.634249" elapsed="0.001100"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:49.634151" elapsed="0.001368"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-08-23T02:07:49.635743" elapsed="0.000112"/>
</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-08-23T02:07:49.640077" elapsed="0.000408"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-08-23T02:07:49.640753" elapsed="0.000282"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-08-23T02:07:49.641289" elapsed="0.000171"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:07:49.637075" elapsed="0.004466"/>
</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-08-23T02:07:49.276227" elapsed="0.365597"/>
</kw>
<msg time="2026-08-23T02:07:49.641970" 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-08-23T02:07:49.275555" elapsed="0.366471"/>
</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-08-23T02:07:49.275080" elapsed="0.367027"/>
</kw>
<msg time="2026-08-23T02:07:49.642149" 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-08-23T02:07:49.274557" elapsed="0.367637"/>
</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-08-23T02:07:49.646689" elapsed="0.000333"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-08-23T02:07:49.647183" elapsed="0.000146"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-08-23T02:07:49.647608" elapsed="0.000119"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:07:49.642483" elapsed="0.005298"/>
</kw>
<msg time="2026-08-23T02:07:49.647896" 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-08-23T02:07:49.273638" elapsed="0.374284"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:49.648342" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:07:49.648093" elapsed="0.000290"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-23T02:07:49.648427" elapsed="0.000028"/>
</return>
<arg>command=${command}</arg>
<arg>member_index=${index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-08-23T02:07:49.272724" elapsed="0.375827"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:07:49.272552" elapsed="0.376036"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:07:49.272427" elapsed="0.376198"/>
</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-08-23T02:07:49.268746" elapsed="0.379936"/>
</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-08-23T02:07:49.648830" elapsed="0.000233"/>
</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-08-23T02:07:49.662601" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:49.662490" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:49.662471" elapsed="0.000199"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:49.662972" 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-08-23T02:07:49.663075" 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-08-23T02:07:49.662818" elapsed="0.000284"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:49.663508" level="INFO">{}</msg>
<arg>${connection_index_dict}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:07:49.663251" elapsed="0.000301"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:49.663978" level="INFO">1</msg>
<arg>${member_index}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:07:49.663713" elapsed="0.000308"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:07:49.664804" 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-08-23T02:07:49.664574" elapsed="0.000373">Dictionary does not contain key '1'.</status>
</kw>
<msg time="2026-08-23T02:07:49.665057" level="INFO">${status} = FAIL</msg>
<msg time="2026-08-23T02:07:49.665102" 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-08-23T02:07:49.664212" elapsed="0.000913"/>
</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-08-23T02:07:49.665424" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:49.665201" elapsed="0.000299"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:49.665182" elapsed="0.000343"/>
</if>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:07:49.666277" level="INFO">${ip_address} = 10.30.170.114</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-08-23T02:07:49.666010" elapsed="0.000293"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-08-23T02:07:49.666353" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:49.666502" level="INFO">${odl_ip} = 10.30.170.114</msg>
<var>${odl_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-08-23T02:07:49.665722" elapsed="0.000805"/>
</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-08-23T02:07:49.666677" elapsed="0.000420"/>
</kw>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:49.667369" level="INFO">index=4
host=10.30.170.114
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-08-23T02:07:49.667469" level="INFO">${karaf_connection_object} = index=4
host=10.30.170.114
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-08-23T02:07:49.667263" elapsed="0.000232"/>
</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-08-23T02:07:49.667667" elapsed="0.002350"/>
</kw>
<kw name="Login" owner="SSHLibrary">
<msg time="2026-08-23T02:07:49.670449" level="INFO">Logging into '10.30.170.114:8101' as 'karaf'.</msg>
<msg time="2026-08-23T02:07:49.878379" 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-08-23T02:07:49.670182" elapsed="0.208354"/>
</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-08-23T02:07:49.882102" elapsed="0.000454"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-08-23T02:07:49.882722" elapsed="0.000194"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-08-23T02:07:49.883063" elapsed="0.000102"/>
</kw>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:07:49.879665" elapsed="0.003553"/>
</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-08-23T02:07:49.878958" elapsed="0.004306"/>
</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-08-23T02:07:49.662213" elapsed="0.221106"/>
</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-08-23T02:07:49.649787" elapsed="0.233580"/>
</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-08-23T02:07:49.649420" elapsed="0.234001"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:07:49.649282" elapsed="0.234181"/>
</iter>
<var>${index}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="PASS" start="2026-08-23T02:07:49.649119" elapsed="0.234453"/>
</for>
<arg>http_timeout=${http_timeout}</arg>
<doc>Initialize ClusterManagement. Open ssh karaf connections to each ODL.</doc>
<status status="PASS" start="2026-08-23T02:07:49.250021" elapsed="0.633622"/>
</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-08-23T02:07:49.886328" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:49.886205" elapsed="0.000176"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:49.886180" elapsed="0.000225"/>
</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-08-23T02:07:49.891209" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:49.891094" elapsed="0.000161"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:49.891075" elapsed="0.000202"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:49.892243" 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-08-23T02:07:49.891828" elapsed="0.000442"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:07:49.892722" 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-08-23T02:07:49.892426" elapsed="0.000322"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:07:49.892793" elapsed="0.000037"/>
</return>
<msg time="2026-08-23T02:07:49.892974" 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-08-23T02:07:49.891500" elapsed="0.001498"/>
</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-08-23T02:07:49.898590" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:49.898479" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:49.898459" elapsed="0.000200"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:49.899990" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:49.899786" elapsed="0.000319"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:49.899767" elapsed="0.000363"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:07:49.900700" 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-08-23T02:07:49.900276" elapsed="0.000465"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:49.901232" 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-08-23T02:07:49.900994" elapsed="0.000277"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:49.938878" 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 "/ "n "e "t "[78Cc "[A[78Co</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:49.902891" elapsed="0.036129"/>
</kw>
<msg time="2026-08-23T02:07:49.939176" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:07:49.939250" 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-08-23T02:07:49.901493" elapsed="0.037810"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:07:49.967158" level="INFO">"n "f "- "c "s "i "t "- "1 "n "o "d "e "- "g "a "t "e "- "u "s "e "r "f "e "a "t "u "r "e "s "- "a "l "l "- "v "a "n "a "d "i "u "m "/ "t "e "s "t "/ "c "s "i "t "/ "s "u "i "t "e "s "/ "n "e "t "c "o "n "f "/ "C "R "U "D "/ "C "R "U "[78CD "[A[78C-
 "R "P "C ". "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-08-23T02:07:49.940943" elapsed="0.026373"/>
</kw>
<msg time="2026-08-23T02:07:49.967467" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:07:49.967539" level="INFO">${message_wait} =  "n "f "- "c "s "i "t "- "1 "n "o "d "e "- "g "a "t "e "- "u "s "e "r "f "e "a "t "u "r "e "s "- "a "l "l "- "v "a "n "a ...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:07:49.939558" elapsed="0.028031"/>
</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-08-23T02:07:49.968124" elapsed="0.000047"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:49.967752" elapsed="0.000515"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:49.967730" elapsed="0.000565"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:49.969000" level="INFO"> "n "f "- "c "s "i "t "- "1 "n "o "d "e "- "g "a "t "e "- "u "s "e "r "f "e "a "t "u "r "e "s "- "a "l "l "- "v "a "n "a "d "i "u "m "/ "t "e "s "t "/ "c "s "i "t "/ "s "u "i "t "e "s "/ "n "e "t "c "o "n "f "/ "C "R "U "D "/ "C "R "U "[78CD "[A[78C-
 "R "P "C ". "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-08-23T02:07:49.968440" elapsed="0.000684"/>
</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-08-23T02:07:49.969597" elapsed="0.000062"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:49.969284" elapsed="0.000472"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:49.969264" elapsed="0.000519"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:07:49.969818" elapsed="0.000054"/>
</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-08-23T02:07:49.971678" elapsed="0.000335"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-08-23T02:07:49.972218" elapsed="0.000152"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-08-23T02:07:49.972556" 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-08-23T02:07:49.971026" elapsed="0.001739"/>
</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-08-23T02:07:49.970103" elapsed="0.002872"/>
</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-08-23T02:07:49.899439" elapsed="0.073639"/>
</kw>
<msg time="2026-08-23T02:07:49.973170" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:49.973214" level="INFO">${message} =  "n "f "- "c "s "i "t "- "1 "n "o "d "e "- "g "a "t "e "- "u "s "e "r "f "e "a "t "u "r "e "s "- "a "l "l "- "v "a "n "a ...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:07:49.898808" elapsed="0.074443"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:07:49.973434" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:07:49.973327" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:49.973308" 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-08-23T02:07:49.974005" 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-08-23T02:07:49.974395" elapsed="0.000026"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:07:49.974469" 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-08-23T02:07:49.898177" elapsed="0.076402"/>
</kw>
<msg time="2026-08-23T02:07:49.974672" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:49.974715" level="INFO">${output} =  "n "f "- "c "s "i "t "- "1 "n "o "d "e "- "g "a "t "e "- "u "s "e "r "f "e "a "t "u "r "e "s "- "a "l "l "- "v "a "n "a ...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:07:49.893381" elapsed="0.081371"/>
</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-08-23T02:07:49.975114" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:49.974827" elapsed="0.000343"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:49.974809" elapsed="0.000384"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:07:49.893232" elapsed="0.081984"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:07:49.893054" elapsed="0.082191"/>
</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-08-23T02:07:49.890787" elapsed="0.084511"/>
</kw>
<doc>Log suite name to karaf log, useful in suite setup.</doc>
<status status="PASS" start="2026-08-23T02:07:49.884256" elapsed="0.091097"/>
</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-08-23T02:07:49.883797" elapsed="0.091598"/>
</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-08-23T02:07:49.244726" elapsed="0.730721"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:07:49.975913" level="INFO">Creating Session using : alias=operational, url=http://10.30.170.114:8181/rests/data, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x72b0ece3acd0&gt;, timeout=None, proxies=None, verify=False,                     debug=0 </msg>
<arg>operational</arg>
<arg>http://${ODL_SYSTEM_IP}:${RESTCONFPORT}${REST_API}</arg>
<arg>auth=${AUTH}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="PASS" start="2026-08-23T02:07:49.975599" elapsed="0.000505"/>
</kw>
<kw name="Setup_NetconfKeywords" owner="NetconfKeywords">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:07:49.976924" level="INFO">${tmp} = {}</msg>
<var>${tmp}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-23T02:07:49.976617" elapsed="0.000333"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T02:07:49.981163" level="INFO">${NetconfKeywords__mounted_device_types} = {}</msg>
<arg>${NetconfKeywords__mounted_device_types}</arg>
<arg>${tmp}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-23T02:07:49.977110" elapsed="0.004100"/>
</kw>
<if>
<branch type="IF" condition="${create_session_for_templated_requests}">
<kw name="Create_Default_Session" owner="TemplatedRequests">
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:07:49.985546" level="INFO">Creating Session using : alias=default, url=http://10.30.170.114:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x72b0ecf08fd0&gt;, timeout=2, proxies=None, verify=False,                     debug=0 </msg>
<arg>default</arg>
<arg>url=${url}</arg>
<arg>auth=${auth}</arg>
<arg>timeout=${timeout}</arg>
<arg>max_retries=${max_retries}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="PASS" start="2026-08-23T02:07:49.985152" elapsed="0.000501"/>
</kw>
<arg>timeout=2</arg>
<doc>Create "default" session to ${url} with authentication and connection parameters.
This Keyword is in this Resource only so that user do not need to call RequestsLibrary directly.</doc>
<status status="PASS" start="2026-08-23T02:07:49.984732" elapsed="0.000989"/>
</kw>
<status status="PASS" start="2026-08-23T02:07:49.981317" elapsed="0.004435"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:49.981297" elapsed="0.004481"/>
</if>
<kw name="Initialize_Artifact_Deployment_And_Usage" owner="NexusKeywords">
<kw name="Open_Connection_To_ODL_System" owner="SSHKeywords">
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:49.991010" level="INFO">${odl_connection} = 7</msg>
<var>${odl_connection}</var>
<arg>${ip_address}</arg>
<arg>prompt=${ODL_SYSTEM_PROMPT}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-08-23T02:07:49.990616" elapsed="0.000420"/>
</kw>
<kw name="Flexible_Controller_Login" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-08-23T02:07:49.992728" level="INFO">Length is 0.</msg>
<msg time="2026-08-23T02:07:49.992806" 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-08-23T02:07:49.992443" elapsed="0.000387"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:07:49.993002" elapsed="0.000318"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-08-23T02:07:49.994194" level="INFO">Logging into '10.30.170.114:22' as 'jenkins'.</msg>
<msg time="2026-08-23T02:07:50.321611" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-186-generic x86_64)

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

 System information as of Sun Aug 23 02:07:23 UTC 2026

  System load:  0.0                Processes:             118
  Usage of /:   13.8% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.114
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

41 updates can be applied immediately.
35 of these updates are standard security updates.
To see these additional updates run: apt list --upgradable

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

New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sun Aug 23 02:07:49 2026 from 10.30.171.240
[?2004h[jenkins@releng-19126-54-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-08-23T02:07:49.993875" elapsed="0.327879"/>
</kw>
<msg time="2026-08-23T02:07:50.321831" 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-08-23T02:07:49.993496" elapsed="0.328429"/>
</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-08-23T02:07:49.992010" elapsed="0.330021"/>
</kw>
<msg time="2026-08-23T02:07:50.322082" 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-08-23T02:07:49.991546" elapsed="0.330583"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-08-23T02:07:49.991218" elapsed="0.330988"/>
</kw>
<return>
<value>${odl_connection}</value>
<status status="PASS" start="2026-08-23T02:07:50.322258" elapsed="0.000043"/>
</return>
<msg time="2026-08-23T02:07:50.322469" level="INFO">${odl} = 7</msg>
<var>${odl}</var>
<doc>Open a connection to the ODL system at ${ip_address} and return its identifier.</doc>
<status status="PASS" start="2026-08-23T02:07:49.990323" elapsed="0.332172"/>
</kw>
<kw name="Put File" owner="SSHLibrary">
<msg time="2026-08-23T02:07:50.331211" level="INFO">[chan 1] Opened sftp connection (server version 3)</msg>
<msg time="2026-08-23T02:07:50.341001" level="INFO">'/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../../tools/deployment/search.sh' -&gt; '/home/jenkins//search.sh'</msg>
<arg>/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../../tools/deployment/search.sh</arg>
<doc>Uploads file(s) from the local machine to the remote machine.</doc>
<status status="PASS" start="2026-08-23T02:07:50.322720" elapsed="0.018367"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-08-23T02:07:50.341312" elapsed="0.000368"/>
</kw>
<if>
<branch type="IF" condition="not (${tools_system_connect})">
<return>
<status status="NOT RUN" start="2026-08-23T02:07:50.342017" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:50.341794" elapsed="0.000283"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:50.341762" elapsed="0.000351"/>
</if>
<kw name="Open_Connection_To_Tools_System" owner="SSHKeywords">
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:50.349380" level="INFO">${tools_connection} = 8</msg>
<var>${tools_connection}</var>
<arg>${ip_address}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-08-23T02:07:50.348646" elapsed="0.000772"/>
</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-08-23T02:07:50.351874" level="INFO">Length is 0.</msg>
<msg time="2026-08-23T02:07:50.351988" 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-08-23T02:07:50.351454" elapsed="0.000559"/>
</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-08-23T02:07:50.352170" elapsed="0.000328"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-08-23T02:07:50.353467" level="INFO">Logging into '10.30.170.120:22' as 'jenkins'.</msg>
<msg time="2026-08-23T02:07:50.914488" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-186-generic x86_64)

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

 System information as of Sun Aug 23 02:07:50 UTC 2026

  System load:  0.0                Processes:             103
  Usage of /:   21.3% of 38.58GB   Users logged in:       1
  Memory usage: 5%                 IPv4 address for ens3: 10.30.170.120
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

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


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


Last login: Sun Aug 23 01:46:04 2026 from 10.30.171.240
[?2004h[jenkins@releng-19126-54-1-docker-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-08-23T02:07:50.353149" elapsed="0.561491"/>
</kw>
<msg time="2026-08-23T02:07:50.914725" 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-08-23T02:07:50.352765" elapsed="0.562046"/>
</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-08-23T02:07:50.350779" elapsed="0.564166"/>
</kw>
<msg time="2026-08-23T02:07:50.914999" 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-08-23T02:07:50.350179" elapsed="0.564870"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-08-23T02:07:50.349685" elapsed="0.565442"/>
</kw>
<return>
<value>${tools_connection}</value>
<status status="PASS" start="2026-08-23T02:07:50.915180" elapsed="0.000044"/>
</return>
<doc>Open a connection to the tools system at ${ip_address} and return its identifier.</doc>
<status status="PASS" start="2026-08-23T02:07:50.348138" elapsed="0.567222"/>
</kw>
<doc>Places search utility to ODL system, which will be needed for version detection.
By default also initialize a SSH connection to Tools system,
as following Keywords assume a working connection towards target system.</doc>
<status status="PASS" start="2026-08-23T02:07:49.986048" elapsed="0.929386"/>
</kw>
<doc>Setup the environment for the other keywords of this Resource to work properly.</doc>
<status status="PASS" start="2026-08-23T02:07:49.976361" elapsed="0.939125"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:50.916278" level="INFO">${device_type_rpc} = rpc-device</msg>
<var>${device_type_rpc}</var>
<arg>"""${USE_NETCONF_CONNECTOR}""" == """True"""</arg>
<arg>default</arg>
<arg>${device_type_rpc}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T02:07:50.915711" elapsed="0.000595"/>
</kw>
<doc>Initialize SetupUtils. Setup everything needed for the test cases.</doc>
<status status="PASS" start="2026-08-23T02:07:49.244417" elapsed="1.671960"/>
</kw>
<test id="s1-s4-s1-t1" name="Start_Testtool" line="49">
<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-08-23T02:07:50.920058" elapsed="0.000219"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:07:50.919739" elapsed="0.000592"/>
</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-08-23T02:07:50.921405" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:50.921281" elapsed="0.000171"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:50.921258" elapsed="0.000218"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:07:50.926622" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:50.926516" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:50.926491" elapsed="0.000199"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:50.927696" 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-08-23T02:07:50.927314" elapsed="0.000408"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:07:50.928217" 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-08-23T02:07:50.927919" elapsed="0.000324"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:07:50.928287" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:07:50.928440" 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-08-23T02:07:50.926938" elapsed="0.001527"/>
</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-08-23T02:07:50.933956" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:50.933814" elapsed="0.000189"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:50.933788" elapsed="0.000238"/>
</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-08-23T02:07:50.935326" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:50.935218" elapsed="0.000210"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:50.935199" elapsed="0.000255"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:07:50.936047" 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-08-23T02:07:50.935601" elapsed="0.000473"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:50.936496" 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-08-23T02:07:50.936231" elapsed="0.000291"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:50.967247" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:50.937102" elapsed="0.030339"/>
</kw>
<msg time="2026-08-23T02:07:50.967649" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:07:50.967700" 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 "n "e "t "c "o "n "f "...</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-08-23T02:07:50.936678" elapsed="0.031059"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:07:50.984699" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "S "t "a "r "t "_ "T "e "s "t "t "o "o "l "[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-08-23T02:07:50.968335" elapsed="0.016575"/>
</kw>
<msg time="2026-08-23T02:07:50.985092" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:07:50.985137" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "S "t "a "r "t "_ "T "e "s "t "t "o "o "l "[...</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-08-23T02:07:50.967935" elapsed="0.017240"/>
</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-08-23T02:07:50.985472" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:50.985251" elapsed="0.000301"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:50.985231" elapsed="0.000347"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:50.986141" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "S "t "a "r "t "_ "T "e "s "t "t "o "o "l "[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-08-23T02:07:50.985722" elapsed="0.000485"/>
</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-08-23T02:07:50.986485" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:50.986273" elapsed="0.000290"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:50.986255" elapsed="0.000333"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:07:50.986622" 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-08-23T02:07:50.990002" elapsed="0.000149"/>
</kw>
<msg time="2026-08-23T02:07:50.990225" 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-08-23T02:07:50.989261" elapsed="0.001067"/>
</kw>
<kw name="Open 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-08-23T02:07:50.991404" elapsed="0.000040"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:50.992740" elapsed="0.000040"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:07:50.987540" elapsed="0.005337"/>
</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-08-23T02:07:50.986931" elapsed="0.006075"/>
</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-08-23T02:07:50.934916" elapsed="0.058189"/>
</kw>
<msg time="2026-08-23T02:07:50.993198" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:50.993241" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "S "t "a "r "t "_ "T "e "s "t "t "o "o "l "[...</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-08-23T02:07:50.934180" elapsed="0.059098"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:07:50.993460" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:07:50.993353" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:50.993335" 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-08-23T02:07:50.994065" 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-08-23T02:07:50.994436" elapsed="0.000026"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:07:50.994510" 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-08-23T02:07:50.933442" elapsed="0.061176"/>
</kw>
<msg time="2026-08-23T02:07:50.994710" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:50.994754" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "S "t "a "r "t "_ "T "e "s "t "t "o "o "l "[...</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-08-23T02:07:50.928869" elapsed="0.065921"/>
</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-08-23T02:07:50.995134" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:50.994884" elapsed="0.000305"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:50.994866" elapsed="0.000346"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:07:50.928709" elapsed="0.066526"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:07:50.928524" elapsed="0.066743"/>
</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-08-23T02:07:50.926146" elapsed="0.069175"/>
</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-08-23T02:07:50.920969" elapsed="0.074407"/>
</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-08-23T02:07:50.920481" elapsed="0.074939"/>
</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-08-23T02:07:50.917229" elapsed="0.078243"/>
</kw>
<kw name="Install_And_Start_Testtool" owner="NetconfKeywords">
<kw name="Deploy_Test_Tool" owner="NexusKeywords">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:07:51.016338" level="INFO">${name_prefix} = netconf-testtool-</msg>
<var>${name_prefix}</var>
<arg>${artifact}-</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:07:51.016035" elapsed="0.000329"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:51.016893" level="INFO">${extension} = jar</msg>
<var>${extension}</var>
<arg>'${component}'=='odl-micro'</arg>
<arg>tar</arg>
<arg>jar</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T02:07:51.016525" elapsed="0.000395"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:51.017477" level="INFO">${name_suffix} = -executable.jar</msg>
<var>${name_suffix}</var>
<arg>"${suffix}" != ""</arg>
<arg>-${suffix}.${extension}</arg>
<arg>.${extension}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T02:07:51.017084" elapsed="0.000419"/>
</kw>
<kw name="Deploy_Artifact" owner="NexusKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_url}""" != ""</arg>
<arg>Deploy_From_Url</arg>
<arg>${explicit_url}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:07:51.018753" elapsed="0.000321"/>
</kw>
<kw name="Fetch From Left" owner="String">
<msg time="2026-08-23T02:07:51.019594" level="INFO">${urlbase} = https://nexus.opendaylight.org/content/repositories/opendaylight.snapshot</msg>
<var>${urlbase}</var>
<arg>${BUNDLE_URL}</arg>
<arg>/org/opendaylight</arg>
<doc>Returns contents of the ``string`` before the first occurrence of ``marker``.</doc>
<status status="PASS" start="2026-08-23T02:07:51.019234" elapsed="0.000386"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:51.020192" level="INFO">${urlbase} = https://nexus.opendaylight.org/content/repositories/opendaylight.snapshot</msg>
<var>${urlbase}</var>
<arg>'${urlbase}' != '${BUNDLE_URL}'</arg>
<arg>${urlbase}</arg>
<arg>${fallback_url}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T02:07:51.019782" elapsed="0.000437"/>
</kw>
<kw name="Run_Keyword_If_At_Most_Magnesium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Most" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &lt;= ${Stream_dict}[${upper_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:07:51.039459" elapsed="0.000430"/>
</kw>
<arg>magnesium</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${upper_bound} to vanadium and in case vanadium is at most ${upper_bound},
run Collections.Remove_Values_From_List [['mdsal', 'odlparent', 'yangtools', 'carpeople', 'netconf', 'bgpcep'], 'carpeople'] {} and return its value.</doc>
<status status="PASS" start="2026-08-23T02:07:51.038947" elapsed="0.001015"/>
</kw>
<msg time="2026-08-23T02:07:51.040012" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Most</arg>
<arg>magnesium</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:07:51.030109" elapsed="0.009957"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${RELEASE_INTEGRATED_COMPONENTS}</arg>
<arg>carpeople</arg>
<doc>Compare magnesium to vanadium and in case vanadium is at most magnesium,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-08-23T02:07:51.029672" elapsed="0.010470"/>
</kw>
<kw name="Run_Keyword_If_At_Most_Aluminium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Most" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &lt;= ${Stream_dict}[${upper_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:07:51.058679" elapsed="0.000415"/>
</kw>
<arg>aluminium</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${upper_bound} to vanadium and in case vanadium is at most ${upper_bound},
run Collections.Remove_Values_From_List [['mdsal', 'odlparent', 'yangtools', 'carpeople', 'netconf', 'bgpcep'], 'netconf'] {} and return its value.</doc>
<status status="PASS" start="2026-08-23T02:07:51.058226" elapsed="0.000960"/>
</kw>
<msg time="2026-08-23T02:07:51.059284" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Most</arg>
<arg>aluminium</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:07:51.049565" elapsed="0.009775"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${RELEASE_INTEGRATED_COMPONENTS}</arg>
<arg>netconf</arg>
<doc>Compare aluminium to vanadium and in case vanadium is at most aluminium,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-08-23T02:07:51.049179" elapsed="0.010237"/>
</kw>
<kw name="Run_Keyword_If_At_Most_Silicon" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Most" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &lt;= ${Stream_dict}[${upper_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:07:51.077824" elapsed="0.000417"/>
</kw>
<arg>silicon</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${upper_bound} to vanadium and in case vanadium is at most ${upper_bound},
run Collections.Remove_Values_From_List [['mdsal', 'odlparent', 'yangtools', 'carpeople', 'netconf', 'bgpcep'], 'bgpcep'] {} and return its value.</doc>
<status status="PASS" start="2026-08-23T02:07:51.077370" elapsed="0.000939"/>
</kw>
<msg time="2026-08-23T02:07:51.078355" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Most</arg>
<arg>silicon</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:07:51.068823" elapsed="0.009580"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${RELEASE_INTEGRATED_COMPONENTS}</arg>
<arg>bgpcep</arg>
<doc>Compare silicon to vanadium and in case vanadium is at most silicon,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-08-23T02:07:51.068438" elapsed="0.010040"/>
</kw>
<if>
<branch type="IF" condition="'${build_version}'=='${EMPTY}'">
<kw name="NexusKeywords__Detect_Version_To_Pull" owner="NexusKeywords">
<kw name="NexusKeywords__Get_Items_To_Look_At" owner="NexusKeywords">
<kw name="Dictionary Should Contain Key" owner="Collections">
<arg>${COMPONENT_MAPPING}</arg>
<arg>${component}</arg>
<arg>Component not supported by NexusKeywords version detection: ${component}</arg>
<doc>Fails if ``key`` is not found from ``dictionary``.</doc>
<status status="PASS" start="2026-08-23T02:07:51.081466" elapsed="0.000253"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Get From Dictionary" owner="Collections">
<arg>${COMPONENT_MAPPING}</arg>
<arg>${component}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-08-23T02:07:51.082250" elapsed="0.000178"/>
</kw>
<msg time="2026-08-23T02:07:51.082475" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Collections.Get_From_Dictionary</arg>
<arg>${COMPONENT_MAPPING}</arg>
<arg>${component}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:07:51.081907" elapsed="0.000618"/>
</kw>
<msg time="2026-08-23T02:07:51.082626" level="INFO">${itemlist} = netconf-api</msg>
<var>${itemlist}</var>
<arg>${component}</arg>
<doc>Get a list of items that might contain the version number that we are looking for.</doc>
<status status="PASS" start="2026-08-23T02:07:51.081155" elapsed="0.001496"/>
</kw>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:51.082956" level="INFO">index=8
host=10.30.170.120
alias=None
port=22
timeout=10 seconds
newline=

prompt=&gt;
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-08-23T02:07:51.083070" level="INFO">${current_ssh_connection} = index=8
host=10.30.170.120
alias=None
port=22
timeout=10 seconds
newline=

prompt=&gt;
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-08-23T02:07:51.082813" elapsed="0.000284"/>
</kw>
<kw name="Open_Connection_To_ODL_System" owner="SSHKeywords">
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:07:51.088246" level="INFO">${odl_connection} = 9</msg>
<var>${odl_connection}</var>
<arg>${ip_address}</arg>
<arg>prompt=${ODL_SYSTEM_PROMPT}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-08-23T02:07:51.087819" elapsed="0.000454"/>
</kw>
<kw name="Flexible_Controller_Login" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-08-23T02:07:51.090116" level="INFO">Length is 0.</msg>
<msg time="2026-08-23T02:07:51.090195" 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-08-23T02:07:51.089774" elapsed="0.000445"/>
</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-08-23T02:07:51.090375" elapsed="0.000378"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-08-23T02:07:51.092157" level="INFO">Logging into '10.30.170.114:22' as 'jenkins'.</msg>
<msg time="2026-08-23T02:07:51.426244" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-186-generic x86_64)

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

 System information as of Sun Aug 23 02:07:23 UTC 2026

  System load:  0.0                Processes:             118
  Usage of /:   13.8% of 77.35GB   Users logged in:       0
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.114
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

41 updates can be applied immediately.
35 of these updates are standard security updates.
To see these additional updates run: apt list --upgradable

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

New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sun Aug 23 02:07:50 2026 from 10.30.171.240
[?2004h[jenkins@releng-19126-54-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-08-23T02:07:51.091330" elapsed="0.335039"/>
</kw>
<msg time="2026-08-23T02:07:51.426494" 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-08-23T02:07:51.090941" elapsed="0.335626"/>
</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-08-23T02:07:51.089290" elapsed="0.337375"/>
</kw>
<msg time="2026-08-23T02:07:51.426779" 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-08-23T02:07:51.088894" elapsed="0.337935"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-08-23T02:07:51.088452" elapsed="0.338472"/>
</kw>
<return>
<value>${odl_connection}</value>
<status status="PASS" start="2026-08-23T02:07:51.426975" elapsed="0.000043"/>
</return>
<doc>Open a connection to the ODL system at ${ip_address} and return its identifier.</doc>
<status status="PASS" start="2026-08-23T02:07:51.087474" elapsed="0.339659"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-23T02:07:51.427593" level="INFO">Executing command 'sh search.sh /tmp/netconf-karaf-12.0.0-SNAPSHOT/system netconf-api'.</msg>
<msg time="2026-08-23T02:07:51.490571" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-23T02:07:51.490866" level="INFO">${version} = 12.0.0-SNAPSHOT
org/opendaylight/netconf</msg>
<msg time="2026-08-23T02:07:51.490977" level="INFO">${result} = 0</msg>
<var>${version}</var>
<var>${result}</var>
<arg>sh search.sh ${WORKSPACE}/${BUNDLEFOLDER}/system ${itemlist}</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-23T02:07:51.427325" elapsed="0.063705"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-08-23T02:07:51.491401" elapsed="0.000497"/>
</kw>
<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-08-23T02:07:51.499003" elapsed="0.000201"/>
</kw>
<msg time="2026-08-23T02:07:51.499265" 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-08-23T02:07:51.498140" elapsed="0.001195"/>
</kw>
<kw name="Open 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-08-23T02:07:51.499551" elapsed="0.000030"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:51.499772" elapsed="0.000028"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:07:51.492458" elapsed="0.007448"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:51.500467" level="INFO">12.0.0-SNAPSHOT
org/opendaylight/netconf</msg>
<arg>${version}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:07:51.500112" elapsed="0.000417"/>
</kw>
<if>
<branch type="IF" condition="${result}!=0">
<kw name="Fail" owner="BuiltIn">
<arg>Component "${component}": searching for "${itemlist}" found no version, cannot locate test tool.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:51.501006" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:51.500635" elapsed="0.000450"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:51.500603" elapsed="0.000518"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-08-23T02:07:51.501642" level="INFO">${version} = 12.0.0-SNAPSHOT</msg>
<msg time="2026-08-23T02:07:51.501704" level="INFO">${location} = org/opendaylight/netconf</msg>
<var>${version}</var>
<var>${location}</var>
<arg>${version}</arg>
<arg>max_split=1</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-08-23T02:07:51.501318" elapsed="0.000418"/>
</kw>
<return>
<value>${version}</value>
<value>${location}</value>
<status status="PASS" start="2026-08-23T02:07:51.501807" elapsed="0.000062"/>
</return>
<msg time="2026-08-23T02:07:51.502097" level="INFO">${version} = 12.0.0-SNAPSHOT</msg>
<msg time="2026-08-23T02:07:51.502158" level="INFO">${location} = org/opendaylight/netconf</msg>
<var>${version}</var>
<var>${location}</var>
<arg>${component}</arg>
<doc>Determine the exact Nexus directory to be used as a source for a particular test tool
Figure out what version of the tool needs to be pulled out of the
Nexus by looking at the version directory of the subsystem from
which the tool is being pulled. This code is REALLY UGLY but there
is no way around it until the bug
https://bugs.opendaylight.org/show_bug.cgi?id=5206 gets fixed.
I also don't want to depend on maven-metadata-local.xml and other
bits and pieces of ODL distribution which are not required for ODL
to function properly.</doc>
<status status="PASS" start="2026-08-23T02:07:51.080721" elapsed="0.421468"/>
</kw>
<status status="PASS" start="2026-08-23T02:07:51.078555" elapsed="0.423692"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${version}</var>
<var>${location}</var>
<arg>${build_version}</arg>
<arg>${build_location}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:51.502487" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:51.502281" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:51.078533" elapsed="0.424067"/>
</if>
<if>
<branch type="IF" condition="'SNAPSHOT' in '${version}'">
<kw name="Remove Values From List" owner="Collections">
<arg>${RELEASE_INTEGRATED_COMPONENTS}</arg>
<arg>netconf</arg>
<arg>bgpcep</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-08-23T02:07:51.502992" elapsed="0.000273"/>
</kw>
<status status="PASS" start="2026-08-23T02:07:51.502676" elapsed="0.000644"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:51.502654" elapsed="0.000700"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:51.504113" level="INFO">${is_staged} = "FALSE"</msg>
<var>${is_staged}</var>
<arg>"opendaylight.release" not in '${urlbase}' and "opendaylight.snapshot" not in '${urlbase}'</arg>
<arg>"TRUE"</arg>
<arg>"FALSE"</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T02:07:51.503563" elapsed="0.000586"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:51.504952" level="INFO">${is_mri_component} = "FALSE"</msg>
<var>${is_mri_component}</var>
<arg>'${component}' in ${RELEASE_INTEGRATED_COMPONENTS}</arg>
<arg>"TRUE"</arg>
<arg>"FALSE"</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T02:07:51.504378" elapsed="0.000611"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:51.505757" level="INFO">${urlbase} = https://nexus.opendaylight.org/content/repositories/opendaylight.snapshot</msg>
<var>${urlbase}</var>
<arg>${is_mri_component} == "TRUE" and ${is_staged} == "FALSE"</arg>
<arg>${NEXUS_RELEASE_BASE_URL}</arg>
<arg>${urlbase}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T02:07:51.505216" elapsed="0.000578"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:07:51.506542" level="INFO">${url} = https://nexus.opendaylight.org/content/repositories/opendaylight.snapshot/org/opendaylight/netconf/netconf-testtool/12.0.0-SNAPSHOT</msg>
<var>${url}</var>
<arg>${urlbase}/${location}/${artifact}/${version}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:07:51.506035" elapsed="0.000594"/>
</kw>
<kw name="Execute_Command_Should_Pass" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Execute_Command_Passes" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-23T02:07:51.509381" level="INFO">Executing command 'curl -L https://nexus.opendaylight.org/content/repositories/opendaylight.snapshot/org/opendaylight/netconf/netconf-testtool/12.0.0-SNAPSHOT/maven-metadata.xml'.</msg>
<msg time="2026-08-23T02:07:51.592794" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-23T02:07:51.593112" level="INFO">${stdout} = &lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;metadata modelVersion="1.1.0"&gt;
  &lt;groupId&gt;org.opendaylight.netconf&lt;/groupId&gt;
  &lt;artifactId&gt;netconf-testtool&lt;/artifactId&gt;
  &lt;versioning&gt;
    &lt;lastUpdated&gt;2026082...</msg>
<msg time="2026-08-23T02:07:51.593221" level="INFO">${stderr} =   % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0   ...</msg>
<msg time="2026-08-23T02:07:51.593315" level="INFO">${rc} = 0</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>${command}</arg>
<arg>return_stderr=True</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-23T02:07:51.509139" elapsed="0.084225"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-08-23T02:07:51.595258" level="INFO">Length is 316.</msg>
<msg time="2026-08-23T02:07:51.595458" level="FAIL">'  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0100  2787  100  2787    0     0  47881      0 --:--:-- --:--:-- --:--:-- 48051' should be empty.</msg>
<arg>${stderr}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-08-23T02:07:51.594614" elapsed="0.001003">'  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0100  2787  100  2787    0     0  47881      0 --:--:-- --:--:-- --:--:-- 48051' should be empty.</status>
</kw>
<msg time="2026-08-23T02:07:51.595888" level="INFO">${emptiness_status} = FAIL</msg>
<msg time="2026-08-23T02:07:51.595993" level="INFO">${result} = '  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0  ...</msg>
<var>${emptiness_status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${stderr}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:07:51.593784" elapsed="0.002264"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:51.597444" level="INFO">${success} = True</msg>
<var>${success}</var>
<arg>(${rc} == 0) and (("${emptiness_status}" == "PASS") or not ${stderr_must_be_empty})</arg>
<arg>True</arg>
<arg>False</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T02:07:51.596467" elapsed="0.001037"/>
</kw>
<if>
<branch type="IF" condition="(${log_on_success} and ${success}) or (${log_on_failure} and not ${success})">
<kw name="Log_Command_Results" owner="SSHKeywords">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:51.600006" level="INFO">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;metadata modelVersion="1.1.0"&gt;
  &lt;groupId&gt;org.opendaylight.netconf&lt;/groupId&gt;
  &lt;artifactId&gt;netconf-testtool&lt;/artifactId&gt;
  &lt;versioning&gt;
    &lt;lastUpdated&gt;20260822190854&lt;/lastUpdated&gt;
    &lt;snapshot&gt;
      &lt;timestamp&gt;20260822.190854&lt;/timestamp&gt;
      &lt;buildNumber&gt;265&lt;/buildNumber&gt;
    &lt;/snapshot&gt;
    &lt;snapshotVersions&gt;
      &lt;snapshotVersion&gt;
        &lt;extension&gt;pom&lt;/extension&gt;
        &lt;value&gt;12.0.0-20260822.190854-265&lt;/value&gt;
        &lt;updated&gt;20260822190854&lt;/updated&gt;
      &lt;/snapshotVersion&gt;
      &lt;snapshotVersion&gt;
        &lt;extension&gt;jar&lt;/extension&gt;
        &lt;value&gt;12.0.0-20260822.190854-265&lt;/value&gt;
        &lt;updated&gt;20260822190854&lt;/updated&gt;
      &lt;/snapshotVersion&gt;
      &lt;snapshotVersion&gt;
        &lt;classifier&gt;javadoc&lt;/classifier&gt;
        &lt;extension&gt;jar&lt;/extension&gt;
        &lt;value&gt;12.0.0-20260822.190854-265&lt;/value&gt;
        &lt;updated&gt;20260822190854&lt;/updated&gt;
      &lt;/snapshotVersion&gt;
      &lt;snapshotVersion&gt;
        &lt;classifier&gt;executable&lt;/classifier&gt;
        &lt;extension&gt;jar&lt;/extension&gt;
        &lt;value&gt;12.0.0-20260822.190854-265&lt;/value&gt;
        &lt;updated&gt;20260822190854&lt;/updated&gt;
      &lt;/snapshotVersion&gt;
      &lt;snapshotVersion&gt;
        &lt;classifier&gt;stress-client&lt;/classifier&gt;
        &lt;extension&gt;jar&lt;/extension&gt;
        &lt;value&gt;12.0.0-20260822.190854-265&lt;/value&gt;
        &lt;updated&gt;20260822190854&lt;/updated&gt;
      &lt;/snapshotVersion&gt;
      &lt;snapshotVersion&gt;
        &lt;classifier&gt;rest-perf-client&lt;/classifier&gt;
        &lt;extension&gt;jar&lt;/extension&gt;
        &lt;value&gt;12.0.0-20260822.190854-265&lt;/value&gt;
        &lt;updated&gt;20260822190854&lt;/updated&gt;
      &lt;/snapshotVersion&gt;
      &lt;snapshotVersion&gt;
        &lt;classifier&gt;scale-util&lt;/classifier&gt;
        &lt;extension&gt;jar&lt;/extension&gt;
        &lt;value&gt;12.0.0-20260822.190854-265&lt;/value&gt;
        &lt;updated&gt;20260822190854&lt;/updated&gt;
      &lt;/snapshotVersion&gt;
      &lt;snapshotVersion&gt;
        &lt;classifier&gt;stress-client&lt;/classifier&gt;
        &lt;extension&gt;tar.gz&lt;/extension&gt;
        &lt;value&gt;12.0.0-20260822.190854-265&lt;/value&gt;
        &lt;updated&gt;20260822190854&lt;/updated&gt;
      &lt;/snapshotVersion&gt;
      &lt;snapshotVersion&gt;
        &lt;classifier&gt;cyclonedx&lt;/classifier&gt;
        &lt;extension&gt;xml&lt;/extension&gt;
        &lt;value&gt;12.0.0-20260822.190854-265&lt;/value&gt;
        &lt;updated&gt;20260822190854&lt;/updated&gt;
      &lt;/snapshotVersion&gt;
      &lt;snapshotVersion&gt;
        &lt;classifier&gt;cyclonedx&lt;/classifier&gt;
        &lt;extension&gt;json&lt;/extension&gt;
        &lt;value&gt;12.0.0-20260822.190854-265&lt;/value&gt;
        &lt;updated&gt;20260822190854&lt;/updated&gt;
      &lt;/snapshotVersion&gt;
      &lt;snapshotVersion&gt;
        &lt;classifier&gt;sources&lt;/classifier&gt;
        &lt;extension&gt;jar&lt;/extension&gt;
        &lt;value&gt;12.0.0-20260822.190854-265&lt;/value&gt;
        &lt;updated&gt;20260822190854&lt;/updated&gt;
      &lt;/snapshotVersion&gt;
    &lt;/snapshotVersions&gt;
  &lt;/versioning&gt;
  &lt;version&gt;12.0.0-SNAPSHOT&lt;/version&gt;
&lt;/metadata&gt;</msg>
<arg>${stdout}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:07:51.599425" elapsed="0.000802"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:51.601271" level="INFO">  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0100  2787  100  2787    0     0  47881      0 --:--:-- --:--:-- --:--:-- 48051</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:07:51.600585" elapsed="0.000791"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:51.601791" level="INFO">0</msg>
<arg>${rc}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:07:51.601548" elapsed="0.000301"/>
</kw>
<arg>${stdout}</arg>
<arg>${stderr}</arg>
<arg>${rc}</arg>
<doc>Log everything returned by SSHLibrary.Execute_Command</doc>
<status status="PASS" start="2026-08-23T02:07:51.598485" elapsed="0.003425"/>
</kw>
<status status="PASS" start="2026-08-23T02:07:51.597682" elapsed="0.004263"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:51.597635" elapsed="0.004339"/>
</if>
<if>
<branch type="IF" condition="${return_success_only}">
<return>
<value>${success}</value>
<status status="NOT RUN" start="2026-08-23T02:07:51.602136" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:51.602030" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:51.602013" elapsed="0.000192"/>
</if>
<if>
<branch type="IF" condition="${success}">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-08-23T02:07:51.602357" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-08-23T02:07:51.602256" elapsed="0.000164"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:51.602241" elapsed="0.000202"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Got rc: ${rc} or stderr was not empty: ${stderr}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:51.602587" elapsed="0.000022"/>
</kw>
<arg>${command}</arg>
<arg>return_success_only=False</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Execute command via the active SSH connection. For success, rc has to be zero and optionally stderr has to be empty.
Log everything, depending on arguments and success. Return either success string or stdout.
TODO: Do we want to support customizing return values the same way as SSHLibrary.Execute_Command does?</doc>
<status status="PASS" start="2026-08-23T02:07:51.508237" elapsed="0.094469"/>
</kw>
<msg time="2026-08-23T02:07:51.602776" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Execute_Command_Passes</arg>
<arg>${command}</arg>
<arg>return_success_only=False</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:07:51.507474" elapsed="0.095352"/>
</kw>
<msg time="2026-08-23T02:07:51.603007" level="INFO">${metadata} = &lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;metadata modelVersion="1.1.0"&gt;
  &lt;groupId&gt;org.opendaylight.netconf&lt;/groupId&gt;
  &lt;artifactId&gt;netconf-testtool&lt;/artifactId&gt;
  &lt;versioning&gt;
    &lt;lastUpdated&gt;2026082...</msg>
<var>${metadata}</var>
<arg>curl -L ${url}/maven-metadata.xml</arg>
<doc>A wrapper for Execute_Command_Passes with return_success_only=False
Also, log_on_success defaults to True (but is customizable, unlike return_success_only)..</doc>
<status status="PASS" start="2026-08-23T02:07:51.506934" elapsed="0.096102"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Command_Should_Pass" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Execute_Command_Passes" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-23T02:07:51.605607" level="INFO">Executing command 'echo "&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;metadata modelVersion="1.1.0"&gt;
  &lt;groupId&gt;org.opendaylight.netconf&lt;/groupId&gt;
  &lt;artifactId&gt;netconf-testtool&lt;/artifactId&gt;
  &lt;versioning&gt;
    &lt;lastUpdated&gt;20260822190854&lt;/lastUpdated&gt;
    &lt;snapshot&gt;
      &lt;timestamp&gt;20260822.190854&lt;/timestamp&gt;
      &lt;buildNumber&gt;265&lt;/buildNumber&gt;
    &lt;/snapshot&gt;
    &lt;snapshotVersions&gt;
      &lt;snapshotVersion&gt;
        &lt;extension&gt;pom&lt;/extension&gt;
        &lt;value&gt;12.0.0-20260822.190854-265&lt;/value&gt;
        &lt;updated&gt;20260822190854&lt;/updated&gt;
      &lt;/snapshotVersion&gt;
      &lt;snapshotVersion&gt;
        &lt;extension&gt;jar&lt;/extension&gt;
        &lt;value&gt;12.0.0-20260822.190854-265&lt;/value&gt;
        &lt;updated&gt;20260822190854&lt;/updated&gt;
      &lt;/snapshotVersion&gt;
      &lt;snapshotVersion&gt;
        &lt;classifier&gt;javadoc&lt;/classifier&gt;
        &lt;extension&gt;jar&lt;/extension&gt;
        &lt;value&gt;12.0.0-20260822.190854-265&lt;/value&gt;
        &lt;updated&gt;20260822190854&lt;/updated&gt;
      &lt;/snapshotVersion&gt;
      &lt;snapshotVersion&gt;
        &lt;classifier&gt;executable&lt;/classifier&gt;
        &lt;extension&gt;jar&lt;/extension&gt;
        &lt;value&gt;12.0.0-20260822.190854-265&lt;/value&gt;
        &lt;updated&gt;20260822190854&lt;/updated&gt;
      &lt;/snapshotVersion&gt;
      &lt;snapshotVersion&gt;
        &lt;classifier&gt;stress-client&lt;/classifier&gt;
        &lt;extension&gt;jar&lt;/extension&gt;
        &lt;value&gt;12.0.0-20260822.190854-265&lt;/value&gt;
        &lt;updated&gt;20260822190854&lt;/updated&gt;
      &lt;/snapshotVersion&gt;
      &lt;snapshotVersion&gt;
        &lt;classifier&gt;rest-perf-client&lt;/classifier&gt;
        &lt;extension&gt;jar&lt;/extension&gt;
        &lt;value&gt;12.0.0-20260822.190854-265&lt;/value&gt;
        &lt;updated&gt;20260822190854&lt;/updated&gt;
      &lt;/snapshotVersion&gt;
      &lt;snapshotVersion&gt;
        &lt;classifier&gt;scale-util&lt;/classifier&gt;
        &lt;extension&gt;jar&lt;/extension&gt;
        &lt;value&gt;12.0.0-20260822.190854-265&lt;/value&gt;
        &lt;updated&gt;20260822190854&lt;/updated&gt;
      &lt;/snapshotVersion&gt;
      &lt;snapshotVersion&gt;
        &lt;classifier&gt;stress-client&lt;/classifier&gt;
        &lt;extension&gt;tar.gz&lt;/extension&gt;
        &lt;value&gt;12.0.0-20260822.190854-265&lt;/value&gt;
        &lt;updated&gt;20260822190854&lt;/updated&gt;
      &lt;/snapshotVersion&gt;
      &lt;snapshotVersion&gt;
        &lt;classifier&gt;cyclonedx&lt;/classifier&gt;
        &lt;extension&gt;xml&lt;/extension&gt;
        &lt;value&gt;12.0.0-20260822.190854-265&lt;/value&gt;
        &lt;updated&gt;20260822190854&lt;/updated&gt;
      &lt;/snapshotVersion&gt;
      &lt;snapshotVersion&gt;
        &lt;classifier&gt;cyclonedx&lt;/classifier&gt;
        &lt;extension&gt;json&lt;/extension&gt;
        &lt;value&gt;12.0.0-20260822.190854-265&lt;/value&gt;
        &lt;updated&gt;20260822190854&lt;/updated&gt;
      &lt;/snapshotVersion&gt;
      &lt;snapshotVersion&gt;
        &lt;classifier&gt;sources&lt;/classifier&gt;
        &lt;extension&gt;jar&lt;/extension&gt;
        &lt;value&gt;12.0.0-20260822.190854-265&lt;/value&gt;
        &lt;updated&gt;20260822190854&lt;/updated&gt;
      &lt;/snapshotVersion&gt;
    &lt;/snapshotVersions&gt;
  &lt;/versioning&gt;
  &lt;version&gt;12.0.0-SNAPSHOT&lt;/version&gt;
&lt;/metadata&gt;" | grep value | head -n 1 | cut -d '&gt;' -f 2 | cut -d '&lt;' -f 1'.</msg>
<msg time="2026-08-23T02:07:51.647628" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-23T02:07:51.647908" level="INFO">${stdout} = 12.0.0-20260822.190854-265</msg>
<msg time="2026-08-23T02:07:51.648035" level="INFO">${stderr} = </msg>
<msg time="2026-08-23T02:07:51.648135" level="INFO">${rc} = 0</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>${command}</arg>
<arg>return_stderr=True</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-23T02:07:51.605421" elapsed="0.042764"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-08-23T02:07:51.650040" level="INFO">Length is 0.</msg>
<arg>${stderr}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="PASS" start="2026-08-23T02:07:51.649353" elapsed="0.000788"/>
</kw>
<msg time="2026-08-23T02:07:51.650348" level="INFO">${emptiness_status} = PASS</msg>
<msg time="2026-08-23T02:07:51.650444" level="INFO">${result} = None</msg>
<var>${emptiness_status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${stderr}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:07:51.648570" elapsed="0.001923"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:51.651959" level="INFO">${success} = True</msg>
<var>${success}</var>
<arg>(${rc} == 0) and (("${emptiness_status}" == "PASS") or not ${stderr_must_be_empty})</arg>
<arg>True</arg>
<arg>False</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T02:07:51.650891" elapsed="0.001129"/>
</kw>
<if>
<branch type="IF" condition="(${log_on_success} and ${success}) or (${log_on_failure} and not ${success})">
<kw name="Log_Command_Results" owner="SSHKeywords">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:51.654488" level="INFO">12.0.0-20260822.190854-265</msg>
<arg>${stdout}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:07:51.653829" elapsed="0.000757"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:51.655538" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:07:51.654958" elapsed="0.000669"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:51.656964" level="INFO">0</msg>
<arg>${rc}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:07:51.656328" elapsed="0.000682"/>
</kw>
<arg>${stdout}</arg>
<arg>${stderr}</arg>
<arg>${rc}</arg>
<doc>Log everything returned by SSHLibrary.Execute_Command</doc>
<status status="PASS" start="2026-08-23T02:07:51.652956" elapsed="0.004110"/>
</kw>
<status status="PASS" start="2026-08-23T02:07:51.652188" elapsed="0.004912"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:51.652145" elapsed="0.004981"/>
</if>
<if>
<branch type="IF" condition="${return_success_only}">
<return>
<value>${success}</value>
<status status="NOT RUN" start="2026-08-23T02:07:51.657283" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:51.657181" elapsed="0.000147"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:51.657164" elapsed="0.000186"/>
</if>
<if>
<branch type="IF" condition="${success}">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-08-23T02:07:51.657489" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:07:51.657400" elapsed="0.000148"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:51.657385" elapsed="0.000187"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Got rc: ${rc} or stderr was not empty: ${stderr}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:51.657715" elapsed="0.000022"/>
</kw>
<arg>${command}</arg>
<arg>return_success_only=False</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Execute command via the active SSH connection. For success, rc has to be zero and optionally stderr has to be empty.
Log everything, depending on arguments and success. Return either success string or stdout.
TODO: Do we want to support customizing return values the same way as SSHLibrary.Execute_Command does?</doc>
<status status="PASS" start="2026-08-23T02:07:51.604824" elapsed="0.053027"/>
</kw>
<msg time="2026-08-23T02:07:51.657906" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Execute_Command_Passes</arg>
<arg>${command}</arg>
<arg>return_success_only=False</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:07:51.604298" elapsed="0.053656"/>
</kw>
<arg>echo "${metadata}" | grep value | head -n 1 | cut -d '&gt;' -f 2 | cut -d '&lt;' -f 1</arg>
<arg>stderr_must_be_empty=${True}</arg>
<doc>A wrapper for Execute_Command_Passes with return_success_only=False
Also, log_on_success defaults to True (but is customizable, unlike return_success_only)..</doc>
<status status="PASS" start="2026-08-23T02:07:51.603811" elapsed="0.054221"/>
</kw>
<msg time="2026-08-23T02:07:51.658127" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:07:51.658170" level="INFO">${namepart} = 12.0.0-20260822.190854-265</msg>
<var>${status}</var>
<var>${namepart}</var>
<arg>SSHKeywords.Execute_Command_Should_Pass</arg>
<arg>echo "${metadata}" | grep value | head -n 1 | cut -d '&gt;' -f 2 | cut -d '&lt;' -f 1</arg>
<arg>stderr_must_be_empty=${True}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:07:51.603195" elapsed="0.054998"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-08-23T02:07:51.658619" level="INFO">Length is 26.</msg>
<msg time="2026-08-23T02:07:51.658692" level="INFO">${length} = 26</msg>
<var>${length}</var>
<arg>${namepart}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-08-23T02:07:51.658355" elapsed="0.000360"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:51.659298" level="INFO">${namepart} = 12.0.0-20260822.190854-265</msg>
<var>${namepart}</var>
<arg>"${status}" != "PASS" or ${length} == 0</arg>
<arg>${version}</arg>
<arg>${namepart}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T02:07:51.658901" elapsed="0.000423"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:07:51.659824" level="INFO">${filename} = netconf-testtool-12.0.0-20260822.190854-265-executable.jar</msg>
<var>${filename}</var>
<arg>${name_prefix}${namepart}${name_suffix}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:07:51.659482" elapsed="0.000398"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:51.660275" level="INFO">netconf-testtool-12.0.0-20260822.190854-265-executable.jar</msg>
<arg>${filename}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:07:51.660034" elapsed="0.000284"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:07:51.660772" level="INFO">${url} = https://nexus.opendaylight.org/content/repositories/opendaylight.snapshot/org/opendaylight/netconf/netconf-testtool/12.0.0-SNAPSHOT/netconf-testtool-12.0.0-20260822.190854-265-executable.jar</msg>
<var>${url}</var>
<arg>${url}/${filename}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:07:51.660464" elapsed="0.000334"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-23T02:07:51.661146" level="INFO">Executing command 'wget -q -N 'https://nexus.opendaylight.org/content/repositories/opendaylight.snapshot/org/opendaylight/netconf/netconf-testtool/12.0.0-SNAPSHOT/netconf-testtool-12.0.0-20260822.190854-265-executable.jar' 2&gt;&amp;1'.</msg>
<msg time="2026-08-23T02:07:52.031785" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-23T02:07:52.032081" level="INFO">${response} = </msg>
<msg time="2026-08-23T02:07:52.032182" level="INFO">${result} = 0</msg>
<var>${response}</var>
<var>${result}</var>
<arg>wget -q -N '${url}' 2&gt;&amp;1</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-23T02:07:51.660979" elapsed="0.371254"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:52.033336" level="INFO"/>
<arg>${response}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:07:52.032710" elapsed="0.000719"/>
</kw>
<if>
<branch type="IF" condition="${result} == 0">
<return>
<value>${filename}</value>
<status status="PASS" start="2026-08-23T02:07:52.033862" elapsed="0.000065"/>
</return>
<status status="PASS" start="2026-08-23T02:07:52.033584" elapsed="0.000442"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:52.033538" elapsed="0.000545"/>
</if>
<kw name="Replace String Using Regexp" owner="String">
<var>${release_url}</var>
<arg>${url}</arg>
<arg>autorelease-[0-9]{4}</arg>
<arg>opendaylight.release</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:52.034416" elapsed="0.000049"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${response}</var>
<var>${result}</var>
<arg>wget -q -N '${release_url}' 2&gt;&amp;1</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:52.034813" elapsed="0.000075"/>
</kw>
<if>
<branch type="IF" condition="${result} != 0">
<kw name="Fail" owner="BuiltIn">
<arg>Artifact "${artifact}" in component "${component}" could not be downloaded from ${release_url} nor ${url}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:52.035366" elapsed="0.000044"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:52.035051" elapsed="0.000431"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:07:52.035013" elapsed="0.000520"/>
</if>
<return>
<value>${filename}</value>
<status status="NOT RUN" start="2026-08-23T02:07:52.035604" elapsed="0.000032"/>
</return>
<msg time="2026-08-23T02:07:52.035950" level="INFO">${filename} = netconf-testtool-12.0.0-20260822.190854-265-executable.jar</msg>
<var>${filename}</var>
<arg>${component}</arg>
<arg>${artifact}</arg>
<arg>${name_prefix}</arg>
<arg>${name_suffix}</arg>
<arg>${fallback_url}</arg>
<arg>${explicit_url}</arg>
<arg>${build_version}</arg>
<arg>${build_location}</arg>
<doc>Deploy the specified artifact from Nexus to the cwd of the machine to which the active SSHLibrary connection points.
netconf is a name part of an artifact present in system/ of ODl installation with the same version as netconf-testtool should have.
Must have https://nexus.opendaylight.org/content/repositories/opendaylight.snapshot/org/opendaylight/netconf/netconf-karaf/12.0.0-SNAPSHOT/netconf-karaf-12.0.0-20260822.190854-265.zip variable set to the URL from which the
tested ODL distribution was downloaded and this place must be
inside a repository created by a standard distribution
construction job. If this is detected to ne be the case, fallback URL is used.
If  is non-empty, Deploy_From_Utrl is called instead.
TODO: Allow deploying to a specific directory, we have SSHKeywords.Execute_Command_At_Cwd_Should_Pass now.</doc>
<status status="PASS" start="2026-08-23T02:07:51.018112" elapsed="1.017897"/>
</kw>
<return>
<value>${filename}</value>
<status status="PASS" start="2026-08-23T02:07:52.036161" elapsed="0.000059"/>
</return>
<msg time="2026-08-23T02:07:52.036496" level="INFO">${filename} = netconf-testtool-12.0.0-20260822.190854-265-executable.jar</msg>
<var>${filename}</var>
<arg>netconf</arg>
<arg>netconf-testtool</arg>
<doc>Deploy a test tool.
The test tools have naming convention of the form
"&lt;repository_url&gt;/some/dir/somewhere/&lt;tool-name&gt;/&lt;tool-name&gt;-&lt;version-tag&gt;-${suffix}.jar"
where "&lt;tool-name&gt;" is the name of the tool and "&lt;version-tag&gt;" is
the version tag that is digged out of the maven metadata. This
keyword calculates ${name_prefix} and ${name_suffix} for
"Deploy_Artifact" and then calls "Deploy_Artifact" to do the real
work of deploying the artifact.</doc>
<status status="PASS" start="2026-08-23T02:07:51.010198" elapsed="1.026354"/>
</kw>
<kw name="Start_Testtool" owner="NetconfKeywords">
<kw name="NetconfKeywords__Deploy_Additional_Schemas" owner="NetconfKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-23T02:07:52.040068" level="INFO">Executing command 'rm -rf schemas 2&gt;&amp;1'.</msg>
<msg time="2026-08-23T02:07:52.079184" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-23T02:07:52.079399" level="INFO">${response} = </msg>
<var>${response}</var>
<arg>rm -rf schemas 2&gt;&amp;1</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-23T02:07:52.039823" elapsed="0.039631"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:52.080458" level="INFO"/>
<arg>${response}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:07:52.079811" elapsed="0.000739"/>
</kw>
<if>
<branch type="IF" condition="'${schemas}' == 'none'">
<return>
<value>${EMPTY}</value>
<status status="NOT RUN" start="2026-08-23T02:07:52.081010" elapsed="0.000040"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:52.080698" elapsed="0.000426"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:52.080658" elapsed="0.000516"/>
</if>
<kw name="Put Directory" owner="SSHLibrary">
<msg time="2026-08-23T02:07:52.124706" level="INFO">[chan 5] Opened sftp connection (server version 3)</msg>
<msg time="2026-08-23T02:07:52.209684" level="INFO">'/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/schemas/yang-ext@2013-07-09.yang' -&gt; '/home/jenkins/./schemas/yang-ext@2013-07-09.yang'</msg>
<msg time="2026-08-23T02:07:52.209748" level="INFO">'/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/schemas/example-action@2016-07-07.yang' -&gt; '/home/jenkins/./schemas/example-action@2016-07-07.yang'</msg>
<msg time="2026-08-23T02:07:52.209788" level="INFO">'/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/schemas/car@2014-08-18.yang' -&gt; '/home/jenkins/./schemas/car@2014-08-18.yang'</msg>
<msg time="2026-08-23T02:07:52.209826" level="INFO">'/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/schemas/car-purchase@2014-08-18.yang' -&gt; '/home/jenkins/./schemas/car-purchase@2014-08-18.yang'</msg>
<msg time="2026-08-23T02:07:52.209885" level="INFO">'/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/schemas/ncmount-l2fib@2016-03-07.yang' -&gt; '/home/jenkins/./schemas/ncmount-l2fib@2016-03-07.yang'</msg>
<msg time="2026-08-23T02:07:52.209921" level="INFO">'/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/schemas/augment-main-a@2014-01-21.yang' -&gt; '/home/jenkins/./schemas/augment-main-a@2014-01-21.yang'</msg>
<msg time="2026-08-23T02:07:52.209954" level="INFO">'/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/schemas/ietf-netconf-monitoring@2010-10-04.yang' -&gt; '/home/jenkins/./schemas/ietf-netconf-monitoring@2010-10-04.yang'</msg>
<msg time="2026-08-23T02:07:52.209988" level="INFO">'/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/schemas/ietf-netconf-monitoring-extension@2013-12-10.yang' -&gt; '/home/jenkins/./schemas/ietf-netconf-monitoring-extension@2013-12-10.yang'</msg>
<msg time="2026-08-23T02:07:52.210022" level="INFO">'/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/schemas/people@2014-08-18.yang' -&gt; '/home/jenkins/./schemas/people@2014-08-18.yang'</msg>
<msg time="2026-08-23T02:07:52.210102" level="INFO">'/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/schemas/test@2014-10-18.yang' -&gt; '/home/jenkins/./schemas/test@2014-10-18.yang'</msg>
<msg time="2026-08-23T02:07:52.210140" level="INFO">'/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/schemas/car-people@2014-08-18.yang' -&gt; '/home/jenkins/./schemas/car-people@2014-08-18.yang'</msg>
<msg time="2026-08-23T02:07:52.210175" level="INFO">'/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/schemas/ietf-inet-types@2010-09-24.yang' -&gt; '/home/jenkins/./schemas/ietf-inet-types@2010-09-24.yang'</msg>
<msg time="2026-08-23T02:07:52.210208" level="INFO">'/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/schemas/main@2014-01-21.yang' -&gt; '/home/jenkins/./schemas/main@2014-01-21.yang'</msg>
<arg>${schemas}</arg>
<arg>destination=./schemas</arg>
<doc>Uploads a directory, including its content, from the local machine to the remote machine.</doc>
<status status="PASS" start="2026-08-23T02:07:52.081492" elapsed="0.128782"/>
</kw>
<kw name="List Directory" owner="SSHLibrary">
<msg time="2026-08-23T02:07:52.213385" level="INFO">13 items:
augment-main-a@2014-01-21.yang
car-people@2014-08-18.yang
car-purchase@2014-08-18.yang
car@2014-08-18.yang
example-action@2016-07-07.yang
ietf-inet-types@2010-09-24.yang
ietf-netconf-monitoring-extension@2013-12-10.yang
ietf-netconf-monitoring@2010-10-04.yang
main@2014-01-21.yang
ncmount-l2fib@2016-03-07.yang
people@2014-08-18.yang
test@2014-10-18.yang
yang-ext@2013-07-09.yang</msg>
<arg>./schemas</arg>
<doc>Returns and logs items in the remote ``path``, optionally filtered with ``pattern``.</doc>
<status status="PASS" start="2026-08-23T02:07:52.210509" elapsed="0.002956"/>
</kw>
<return>
<value>--schemas-dir ./schemas</value>
<status status="PASS" start="2026-08-23T02:07:52.213529" elapsed="0.000046"/>
</return>
<msg time="2026-08-23T02:07:52.213720" level="INFO">${schemas_option} = --schemas-dir ./schemas</msg>
<var>${schemas_option}</var>
<arg>${schemas}</arg>
<doc>Internal keyword for Install_And_Start_TestTool
This deploys the additional schemas if any and returns a
command line argument to be added to the testtool commandline
to tell it to load them. While this code could be integrated
into its only user, I considered the resulting code to be too
unreadable as the actions are quite different in the two
possibilities (additional schemas present versus no additional
schemas present), therefore a separate keyword is used.</doc>
<status status="PASS" start="2026-08-23T02:07:52.039102" elapsed="0.174653"/>
</kw>
<kw name="NetconfKeywords__Deploy_Custom_RPC" owner="NetconfKeywords">
<if>
<branch type="IF" condition="'${rpc_config}' == 'none'">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-23T02:07:52.214661" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-08-23T02:07:52.214503" elapsed="0.000241"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:52.214476" elapsed="0.000301"/>
</if>
<kw name="Copy_File_To_Tools_System" owner="SSHKeywords">
<arg>${TOOLS_SYSTEM_1_IP}</arg>
<arg>${rpc_config}</arg>
<arg>/tmp</arg>
<doc>Wrapper keyword to make it easier to copy a file to an Tools specific system</doc>
<status status="NOT RUN" start="2026-08-23T02:07:52.215099" elapsed="0.000034"/>
</kw>
<return>
<value>--rpc-config /tmp/customaction.xml</value>
<status status="NOT RUN" start="2026-08-23T02:07:52.215199" elapsed="0.000021"/>
</return>
<msg time="2026-08-23T02:07:52.217966" level="INFO">${rpc_config_option} = </msg>
<var>${rpc_config_option}</var>
<arg>${rpc_config}</arg>
<doc>Internal keyword for Install_And_Start_TestTool
This deploys the optional custom rpc file.
Drop out of the keyword, returning no command line argument when there
is no rpc file to deploy.</doc>
<status status="PASS" start="2026-08-23T02:07:52.214154" elapsed="0.003838"/>
</kw>
<kw name="Compose_Full_Java_Command" owner="NexusKeywords">
<kw name="Compose_Base_Java_Command" owner="NexusKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${openjdk}""" == "openjdk8"</arg>
<arg>Compose_Dilemma_Filepath</arg>
<arg>${JAVA_8_HOME_CENTOS}/bin/java</arg>
<arg>${JAVA_8_HOME_UBUNTU}/bin/java</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:07:52.219356" elapsed="0.000337"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${openjdk}""" == "openjdk11"</arg>
<arg>Compose_Dilemma_Filepath</arg>
<arg>${JAVA_11_HOME_CENTOS}/bin/java</arg>
<arg>${JAVA_11_HOME_UBUNTU}/bin/java</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:07:52.219874" elapsed="0.000311"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${openjdk}""" == "openjdk17"</arg>
<arg>Compose_Dilemma_Filepath</arg>
<arg>${JAVA_17_HOME_CENTOS}/bin/java</arg>
<arg>${JAVA_17_HOME_UBUNTU}/bin/java</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:07:52.220346" elapsed="0.000299"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Compose_Dilemma_Filepath" owner="NexusKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-23T02:07:52.221889" level="INFO">Executing command 'ls -lA /usr/lib/jvm/java-21-openjdk-amd64/bin/java 2&gt;&amp;1'.</msg>
<msg time="2026-08-23T02:07:52.233695" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-23T02:07:52.233867" level="INFO">${out} = -rwxr-xr-x 1 root root 14456 Apr 26 09:33 /usr/lib/jvm/java-21-openjdk-amd64/bin/java</msg>
<msg time="2026-08-23T02:07:52.233948" level="INFO">${rc} = 0</msg>
<var>${out}</var>
<var>${rc}</var>
<arg>ls -lA ${specific_path} 2&gt;&amp;1</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-23T02:07:52.221699" elapsed="0.012288"/>
</kw>
<if>
<branch type="IF" condition="${rc} == 0">
<return>
<value>${specific_path}</value>
<status status="PASS" start="2026-08-23T02:07:52.234269" elapsed="0.000037"/>
</return>
<status status="PASS" start="2026-08-23T02:07:52.234121" elapsed="0.000232"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:52.234089" elapsed="0.000298"/>
</if>
<return>
<value>${default_path}</value>
<status status="NOT RUN" start="2026-08-23T02:07:52.234432" elapsed="0.000020"/>
</return>
<arg>${JAVA_21_HOME_CENTOS}/bin/java</arg>
<arg>${JAVA_21_HOME_UBUNTU}/bin/java</arg>
<doc>Query active SSH connection, return specific path if it exists else default path.</doc>
<status status="PASS" start="2026-08-23T02:07:52.221312" elapsed="0.013270"/>
</kw>
<msg time="2026-08-23T02:07:52.234645" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>"""${openjdk}""" == "openjdk21"</arg>
<arg>Compose_Dilemma_Filepath</arg>
<arg>${JAVA_21_HOME_CENTOS}/bin/java</arg>
<arg>${JAVA_21_HOME_UBUNTU}/bin/java</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:07:52.220803" elapsed="0.013909"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${out}</var>
<var>${rc}</var>
<arg>java -version 2&gt;&amp;1</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:52.234966" elapsed="0.000031"/>
</kw>
<if>
<branch type="IF" condition="${rc} == 0">
<return>
<value>java</value>
<status status="NOT RUN" start="2026-08-23T02:07:52.235146" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:52.235096" elapsed="0.000105"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:07:52.235073" elapsed="0.000158"/>
</if>
<kw name="Execute Command" owner="SSHLibrary">
<var>${java}</var>
<arg>echo $JAVA_HOME/bin/java 2&gt;&amp;1</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:52.235426" elapsed="0.000074"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${out}</var>
<var>${rc}</var>
<arg>${java} -version 2&gt;&amp;1</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:52.235717" elapsed="0.000028"/>
</kw>
<if>
<branch type="IF" condition="${rc} == 0">
<return>
<value>${java}</value>
<status status="NOT RUN" start="2026-08-23T02:07:52.235929" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:52.235862" elapsed="0.000136"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:07:52.235820" elapsed="0.000216"/>
</if>
<kw name="Get Environment Variable" owner="OperatingSystem">
<var>${JAVA_HOME}</var>
<arg>JAVA_HOME</arg>
<arg>${EMPTY}</arg>
<doc>Returns the value of an environment variable with the given name.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:52.236248" elapsed="0.000029"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${java}</var>
<arg>"""${JAVA_HOME}"""!=""</arg>
<arg>${JAVA_HOME}/bin/java</arg>
<arg>false</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:52.236492" elapsed="0.000028"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${out}</var>
<var>${rc}</var>
<arg>${java} -version 2&gt;&amp;1</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:52.236733" elapsed="0.000028"/>
</kw>
<if>
<branch type="IF" condition="${rc} == 0">
<return>
<value>${java}</value>
<status status="NOT RUN" start="2026-08-23T02:07:52.236948" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:52.236884" elapsed="0.000134"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:07:52.236854" elapsed="0.000237"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Unable to find Java; specify \${JDKVERSION}, put it to your PATH or set JAVA_HOME environment variable.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:52.237287" elapsed="0.000029"/>
</kw>
<msg time="2026-08-23T02:07:52.237457" level="INFO">${base_command} = /usr/lib/jvm/java-21-openjdk-amd64/bin/java</msg>
<var>${base_command}</var>
<arg>openjdk=${openjdk}</arg>
<doc>Return string suitable for launching Java programs over SSHLibrary, depending on JRE version needed.
This requires that the SSH connection on which the command is going to be used is active as it is needed for querying files.
Commands composed for one SSH connection shall not be reused on other SSH connections as the two connections may have different Java setups.
Not directly related to Nexus, but versioned Java tools may need this.</doc>
<status status="PASS" start="2026-08-23T02:07:52.218986" elapsed="0.018507"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:07:52.238183" level="INFO">${full_command} = /usr/lib/jvm/java-21-openjdk-amd64/bin/java -Xmx1G -Djava.security.egd=file:/dev/./urandom -jar netconf-testtool-12.0.0-20260822.190854-265-executable.jar  --device-count 1 --debug true --schemas-dir ...</msg>
<var>${full_command}</var>
<arg>${base_command} ${options}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:07:52.237700" elapsed="0.000522"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:52.238768" level="INFO">/usr/lib/jvm/java-21-openjdk-amd64/bin/java -Xmx1G -Djava.security.egd=file:/dev/./urandom -jar netconf-testtool-12.0.0-20260822.190854-265-executable.jar  --device-count 1 --debug true --schemas-dir ./schemas  --md-sal true</msg>
<arg>${full_command}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:07:52.238431" elapsed="0.000400"/>
</kw>
<return>
<value>${full_command}</value>
<status status="PASS" start="2026-08-23T02:07:52.238924" elapsed="0.000048"/>
</return>
<msg time="2026-08-23T02:07:52.239176" level="INFO">${command} = /usr/lib/jvm/java-21-openjdk-amd64/bin/java -Xmx1G -Djava.security.egd=file:/dev/./urandom -jar netconf-testtool-12.0.0-20260822.190854-265-executable.jar  --device-count 1 --debug true --schemas-dir ...</msg>
<var>${command}</var>
<arg>${java_options} -jar ${filename} ${tool_options} --device-count ${device-count} --debug ${debug} ${schemas_option} ${rpc_config_option} --md-sal ${mdsal}</arg>
<doc>Return full Bash command to run Java with given options.
This requires that the SSH connection on which the command is going to be used is active as it is needed for querying files.
The options may include JVM options, application command line arguments, Bash redirects and other constructs.</doc>
<status status="PASS" start="2026-08-23T02:07:52.218221" elapsed="0.020991"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:07:52.239768" level="INFO">Running testtool: /usr/lib/jvm/java-21-openjdk-amd64/bin/java -Xmx1G -Djava.security.egd=file:/dev/./urandom -jar netconf-testtool-12.0.0-20260822.190854-265-executable.jar  --device-count 1 --debug true --schemas-dir ./schemas  --md-sal true</msg>
<arg>Running testtool: ${command}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:07:52.239422" elapsed="0.000409"/>
</kw>
<kw name="Get Log File Name" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:07:52.246116" level="INFO">${name} = netconf-gate-userfeatures-txt-CRUD-CRUD-RPC</msg>
<var>${name}</var>
<arg>"""${SUITE_NAME}""".replace(" ","-").replace("/","-").replace(".","-")</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-23T02:07:52.245578" elapsed="0.000576"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:07:52.249444" level="INFO">${suffix} = </msg>
<var>${suffix}</var>
<arg>'${testcase}' != ''</arg>
<arg>--${testcase}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T02:07:52.246379" elapsed="0.003101"/>
</kw>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-23T02:07:52.250018" level="INFO">${date} = 2026-08-23 02:07:52.250</msg>
<var>${date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-23T02:07:52.249708" elapsed="0.000343"/>
</kw>
<kw name="Convert Date" owner="DateTime">
<msg time="2026-08-23T02:07:52.254069" level="INFO">${timestamp} = 1787450872.25</msg>
<var>${timestamp}</var>
<arg>${date}</arg>
<arg>epoch</arg>
<doc>Converts between supported `date formats`.</doc>
<status status="PASS" start="2026-08-23T02:07:52.250207" elapsed="0.003891"/>
</kw>
<return>
<value>${testtool}--${name}${suffix}.${timestamp}.log</value>
<status status="PASS" start="2026-08-23T02:07:52.254148" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T02:07:52.254387" level="INFO">${logfile} = testtool--netconf-gate-userfeatures-txt-CRUD-CRUD-RPC.1787450872.25.log</msg>
<var>${logfile}</var>
<arg>testtool</arg>
<doc>Get the name of the suite sanitized to be usable as a part of filename.
These names are used to constructs names of the log files produced
by the testing tools so two suites using a tool wont overwrite the
log files if they happen to run in one job.</doc>
<status status="PASS" start="2026-08-23T02:07:52.242187" elapsed="0.012226"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T02:07:52.259106" level="INFO">${testtool_log} = testtool--netconf-gate-userfeatures-txt-CRUD-CRUD-RPC.1787450872.25.log</msg>
<arg>${testtool_log}</arg>
<arg>${logfile}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-23T02:07:52.254575" elapsed="0.004579"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:07:52.274694" level="INFO">/usr/lib/jvm/java-21-openjdk-amd64/bin/java -Xmx1G -Djava.security.egd=file:/dev/./urandom -jar netconf-testtool-12.0.0-20260822.190854-265-executable.jar  --device-count 1 --debug true --schemas-dir ./schemas  --md-sal true &gt;testtool--netconf-gate-userfeatures-txt-CRUD-CRUD-RPC.1787450872.25.log 2&gt;&amp;1</msg>
<arg>${command} &gt;${logfile} 2&gt;&amp;1</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:07:52.259361" elapsed="0.015394"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T02:07:52.278824" level="INFO">${NetconfKeywords__testtool_device_count} = 1</msg>
<arg>${NetconfKeywords__testtool_device_count}</arg>
<arg>${device-count}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-23T02:07:52.274935" elapsed="0.003953"/>
</kw>
<kw name="Perform_Operation_On_Each_Device" owner="NetconfKeywords">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-23T02:07:52.279693" level="INFO">${current_Date} = 2026-08-23 02:07:52.280</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-23T02:07:52.279539" elapsed="0.000180"/>
</kw>
<kw name="Add Time To Date" owner="DateTime">
<msg time="2026-08-23T02:07:52.280239" level="INFO">${deadline_Date} = 2026-08-23 02:52:52.280</msg>
<var>${deadline_Date}</var>
<arg>${current_Date}</arg>
<arg>${timeout}</arg>
<doc>Adds time to date and returns the resulting date.</doc>
<status status="PASS" start="2026-08-23T02:07:52.279901" elapsed="0.000364"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T02:07:52.284966" level="INFO">${current_port} = 17830</msg>
<arg>${current_port}</arg>
<arg>${BASE_NETCONF_DEVICE_PORT}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-23T02:07:52.280425" elapsed="0.004599"/>
</kw>
<kw name="Repeat Keyword" owner="BuiltIn">
<msg time="2026-08-23T02:07:52.285515" level="INFO">Repeating keyword, round 1/1.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-23T02:07:52.286634" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:07:52.286524" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:52.286505" elapsed="0.000195"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-23T02:07:52.287015" level="INFO">${current_Date} = 2026-08-23 02:07:52.287</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-23T02:07:52.286856" elapsed="0.000185"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-23T02:07:52.287505" level="INFO">${ellapsed_seconds} = 2699.993</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-23T02:07:52.287191" elapsed="0.000340"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-23T02:07:52.287863" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:07:52.287602" elapsed="0.000317"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:52.287584" elapsed="0.000360"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-23T02:07:52.286281" elapsed="0.001708"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:07:52.288503" level="INFO">${number} = 1</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-23T02:07:52.288132" elapsed="0.000401"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:07:52.289980" level="INFO">${number} = 1</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-23T02:07:52.289624" elapsed="0.000383"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:07:52.291961" level="INFO">${device-port} = 17830</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-23T02:07:52.291003" elapsed="0.000986"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-23T02:07:52.294951" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-23T02:07:52.307184" level="INFO">Command exited with return code 127.</msg>
<msg time="2026-08-23T02:07:52.307322" level="INFO">${netstat_installed} = </msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-23T02:07:52.294815" elapsed="0.012541"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-23T02:07:52.308599" level="INFO">Executing command 'sudo apt-get update'.</msg>
<msg time="2026-08-23T02:08:03.645689" level="INFO">Command exited with return code 0.</msg>
<arg>sudo apt-get update</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-23T02:07:52.308442" elapsed="11.337507"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-23T02:08:03.646786" level="INFO">Executing command 'sudo apt-get install -y net-tools'.</msg>
<msg time="2026-08-23T02:08:11.693600" level="INFO">Command exited with return code 0.</msg>
<arg>sudo apt-get install -y net-tools</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-23T02:08:03.646489" elapsed="8.047319"/>
</kw>
<doc>Install netstat if it is not already installed.</doc>
<status status="PASS" start="2026-08-23T02:07:52.308065" elapsed="19.385960"/>
</kw>
<status status="PASS" start="2026-08-23T02:07:52.307458" elapsed="19.386635"/>
</branch>
<status status="PASS" start="2026-08-23T02:07:52.307431" elapsed="19.386729"/>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="PASS" start="2026-08-23T02:07:52.294543" elapsed="19.399723"/>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:07:52.294071" elapsed="19.400402"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-23T02:08:11.696247" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17830 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-23T02:08:11.742726" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-23T02:08:11.743365" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-23T02:08:11.695395" elapsed="0.048053"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-23T02:08:11.743636" elapsed="0.000189"/>
</return>
<msg time="2026-08-23T02:08:11.744567" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-23T02:07:52.292826" elapsed="19.451841"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-23T02:08:11.745327" elapsed="0.001821"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-23T02:07:52.292170" elapsed="19.455246"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-23T02:07:52.290667" elapsed="19.456865"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-23T02:07:52.290166" elapsed="19.457473"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-23T02:07:52.289182" elapsed="19.458619"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:07:52.288691" elapsed="19.459272"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:08:11.749284" level="INFO">${next} = 17831</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-23T02:08:11.748337" elapsed="0.001009"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:11.750718" level="INFO">${current_port} = 17831</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-23T02:08:11.749715" elapsed="0.001099"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-23T02:07:52.285713" elapsed="19.465270"/>
</kw>
<arg>${count} times</arg>
<arg>NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device</arg>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the specified keyword multiple times.</doc>
<status status="PASS" start="2026-08-23T02:07:52.285191" elapsed="19.465905"/>
</kw>
<arg>NetconfKeywords__Wait_Device_Is_Up_And_Running</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-23T02:07:52.279086" elapsed="19.472150"/>
</kw>
<arg>${filename}</arg>
<arg>${device-count}</arg>
<arg>${debug}</arg>
<arg>${schemas}</arg>
<arg>${rpc_config}</arg>
<arg>${tool_options}</arg>
<arg>${java_options}</arg>
<arg>${mdsal}</arg>
<arg>log_response=${log_response}</arg>
<doc>Arrange to collect tool's output into a log file.
Will use specific /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/schemas unless argument resolves to 'none',
which signifies that there are no additional schemas to be deployed.
If so the directory for the additional schemas is deleted on the
remote machine and the additional schemas argument is left out.</doc>
<status status="PASS" start="2026-08-23T02:07:52.037190" elapsed="19.714160"/>
</kw>
<arg>device-count=1</arg>
<arg>schemas=/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/schemas</arg>
<arg>mdsal=true</arg>
<doc>Install and run testtool.</doc>
<status status="PASS" start="2026-08-23T02:07:50.995709" elapsed="20.755806"/>
</kw>
<doc>Deploy and start test tool, then wait for all its devices to become online.</doc>
<status status="PASS" start="2026-08-23T02:07:50.916471" elapsed="20.835325"/>
</test>
<test id="s1-s4-s1-t2" name="Check_Device_Is_Not_Configured_At_Beginning" line="56">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-08-23T02:08:11.755696" elapsed="0.000249"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:08:11.755431" elapsed="0.000570"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:08:11.757030" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:11.756912" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:11.756891" elapsed="0.000209"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:08:11.762316" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:11.762207" elapsed="0.000162"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:11.762189" elapsed="0.000202"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:08:11.763411" 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-08-23T02:08:11.763026" elapsed="0.000412"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:08:11.763918" 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-08-23T02:08:11.763601" elapsed="0.000352"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:08:11.764000" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:08:11.764158" 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-08-23T02:08:11.762629" elapsed="0.001554"/>
</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-08-23T02:08:11.769638" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:11.769524" elapsed="0.000161"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:11.769505" 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-08-23T02:08:11.771023" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:11.770913" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:11.770894" elapsed="0.000199"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:08:11.771627" 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-08-23T02:08:11.771238" elapsed="0.000416"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:08:11.772105" 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-08-23T02:08:11.771812" elapsed="0.000320"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:08:11.804780" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:08:11.772697" elapsed="0.032342"/>
</kw>
<msg time="2026-08-23T02:08:11.805227" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:08:11.805275" 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 "n "e "t "c "o "n "f "...</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-08-23T02:08:11.772292" elapsed="0.033021"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:08:11.847535" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "I "s "_ "N "o "t "_ "C "o "n "f "i "g "u "r "e "d "_ "A "t "_ "B "e "g "i "n "n "i "n "g "[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-08-23T02:08:11.805927" elapsed="0.041802"/>
</kw>
<msg time="2026-08-23T02:08:11.847931" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:08:11.847977" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "I "s ...</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-08-23T02:08:11.805489" elapsed="0.042525"/>
</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-08-23T02:08:11.848316" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:11.848092" elapsed="0.000303"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:11.848072" elapsed="0.000349"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:11.849019" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "I "s "_ "N "o "t "_ "C "o "n "f "i "g "u "r "e "d "_ "A "t "_ "B "e "g "i "n "n "i "n "g "[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-08-23T02:08:11.848576" elapsed="0.000518"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:11.849375" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:11.849161" elapsed="0.000292"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:11.849143" elapsed="0.000335"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:08:11.849516" elapsed="0.000031"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-23T02:08:11.852840" elapsed="0.000168"/>
</kw>
<msg time="2026-08-23T02:08:11.853086" 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-08-23T02:08:11.852113" elapsed="0.001078"/>
</kw>
<kw name="Open 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-08-23T02:08:11.854431" elapsed="0.000044"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:11.855572" elapsed="0.000040"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:08:11.850410" elapsed="0.005285"/>
</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-08-23T02:08:11.849792" elapsed="0.006028"/>
</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-08-23T02:08:11.770574" elapsed="0.085656"/>
</kw>
<msg time="2026-08-23T02:08:11.856324" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:08:11.856367" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "I "s ...</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-08-23T02:08:11.769916" elapsed="0.086489"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:08:11.856589" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:08:11.856481" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:11.856463" elapsed="0.000243"/>
</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-08-23T02:08:11.857154" elapsed="0.000033"/>
</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-08-23T02:08:11.857504" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:08:11.857576" 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-08-23T02:08:11.769189" elapsed="0.088494"/>
</kw>
<msg time="2026-08-23T02:08:11.857775" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:08:11.857819" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "I "s ...</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-08-23T02:08:11.764576" elapsed="0.093381"/>
</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-08-23T02:08:11.858283" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:11.858035" elapsed="0.000302"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:11.858017" elapsed="0.000344"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:08:11.764427" elapsed="0.093957"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:08:11.764239" elapsed="0.094176"/>
</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-08-23T02:08:11.761829" elapsed="0.096640"/>
</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-08-23T02:08:11.756597" elapsed="0.101927"/>
</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-08-23T02:08:11.756152" elapsed="0.102415"/>
</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-08-23T02:08:11.753210" elapsed="0.105408"/>
</kw>
<kw name="Check_Device_Has_No_Netconf_Connector" owner="NetconfKeywords">
<kw name="Count_Netconf_Connectors_For_Device" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:11.869970" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:11.867750" elapsed="0.002247"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:11.870316" elapsed="0.000021"/>
</kw>
<var name="${nv}"/>
<status status="NOT RUN" start="2026-08-23T02:08:11.870165" elapsed="0.000207"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="NOT RUN" start="2026-08-23T02:08:11.870049" elapsed="0.000348"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:11.870698" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:11.870459" elapsed="0.000296"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:11.871495" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:11.871027" elapsed="0.000495"/>
</kw>
<status status="PASS" start="2026-08-23T02:08:11.870778" elapsed="0.000780"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:11.871743" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:11.871584" elapsed="0.000213"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:11.870442" elapsed="0.001375"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:11.871870" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:08:11.872019" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:08:11.867297" elapsed="0.004747"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:11.872089" elapsed="0.000025"/>
</return>
<msg time="2026-08-23T02:08:11.872230" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:08:11.866802" elapsed="0.005454"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:11.879452" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:11.879204" elapsed="0.000296"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:11.879911" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:11.879652" elapsed="0.000340"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:08:11.888395" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:08:11.888458" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '407'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:08:11.888669" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:08:11.882202" elapsed="0.006885">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:08:11.880061" elapsed="0.009143">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:11.889441" elapsed="0.000038"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:11.889240" elapsed="0.000306"/>
</branch>
<status status="FAIL" start="2026-08-23T02:08:11.880043" elapsed="0.009538">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:11.890152" elapsed="0.000038"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:11.890350" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:11.890294" elapsed="0.000119"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:11.890269" elapsed="0.000176"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:11.890655" elapsed="0.000032"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:08:11.890759" elapsed="0.000023"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:08:11.874917" elapsed="0.016031">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:11.891052" elapsed="0.000023"/>
</return>
<var>${mounts}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:08:11.872468" elapsed="0.018725">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${mounts}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:11.891437" elapsed="0.000031"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${actual_count}</var>
<arg>len('''${mounts}'''.split('"node-id": "${device_name}"'))-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:11.891680" elapsed="0.000029"/>
</kw>
<return>
<value>${actual_count}</value>
<status status="NOT RUN" start="2026-08-23T02:08:11.891773" elapsed="0.000022"/>
</return>
<var>${count}</var>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Count all instances of the specified device in the Netconf topology (usually 0 or 1).</doc>
<status status="FAIL" start="2026-08-23T02:08:11.859239" elapsed="0.032706">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${count}</arg>
<arg>0</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:11.892184" elapsed="0.000030"/>
</kw>
<arg>${device_name}</arg>
<doc>Check that there are no instances of the specified device in the Netconf topology.</doc>
<status status="FAIL" start="2026-08-23T02:08:11.858824" elapsed="0.033516">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<doc>Sanity check making sure our device is not there. Fail if found.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-08-23T02:08:11.752552" elapsed="0.140001">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</test>
<test id="s1-s4-s1-t3" name="Configure_Device_On_Netconf" 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-08-23T02:08:11.897767" elapsed="0.000347"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:08:11.897381" elapsed="0.000814"/>
</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-08-23T02:08:11.899301" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:11.899190" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:11.899171" elapsed="0.000198"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:08:11.904330" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:11.904224" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:11.904206" elapsed="0.000192"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:08:11.905562" 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-08-23T02:08:11.905006" elapsed="0.000588"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:08:11.906075" 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-08-23T02:08:11.905756" elapsed="0.000344"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:08:11.906146" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:08:11.906300" 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-08-23T02:08:11.904614" elapsed="0.001710"/>
</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-08-23T02:08:11.912013" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:11.911905" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:11.911885" 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-08-23T02:08:11.913318" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:11.913212" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:11.913193" elapsed="0.000193"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:08:11.913957" 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-08-23T02:08:11.913550" elapsed="0.000433"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:08:11.914401" 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-08-23T02:08:11.914140" elapsed="0.000294"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:08:11.944792" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:08:11.915010" elapsed="0.030011"/>
</kw>
<msg time="2026-08-23T02:08:11.945251" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:08:11.945299" 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 "n "e "t "c "o "n "f "...</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-08-23T02:08:11.914591" elapsed="0.030747"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:08:11.965150" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "o "n "f "i "g "u "r "e "_ "D "e "v "i "c "e "_ "O "n "_ "N "e "t "c "o "n "f "[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-08-23T02:08:11.945978" elapsed="0.019366"/>
</kw>
<msg time="2026-08-23T02:08:11.965531" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:08:11.965576" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "o "n "f "i "g "u "r "e "_ "D "e "v "i "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-08-23T02:08:11.945511" elapsed="0.020101"/>
</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-08-23T02:08:11.965945" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:11.965688" elapsed="0.000337"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:11.965669" elapsed="0.000382"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:11.966590" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "o "n "f "i "g "u "r "e "_ "D "e "v "i "c "e "_ "O "n "_ "N "e "t "c "o "n "f "[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-08-23T02:08:11.966190" elapsed="0.000468"/>
</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-08-23T02:08:11.966966" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:11.966724" elapsed="0.000322"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:11.966706" elapsed="0.000365"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:08:11.967104" 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-08-23T02:08:11.970519" elapsed="0.000148"/>
</kw>
<msg time="2026-08-23T02:08:11.970742" 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-08-23T02:08:11.969741" elapsed="0.001146"/>
</kw>
<kw name="Open 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-08-23T02:08:11.971969" elapsed="0.000040"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:11.973311" elapsed="0.000039"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:08:11.968032" elapsed="0.005398"/>
</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-08-23T02:08:11.967414" elapsed="0.006141"/>
</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-08-23T02:08:11.912912" elapsed="0.060742"/>
</kw>
<msg time="2026-08-23T02:08:11.973746" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:08:11.973788" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "o "n "f "i "g "u "r "e "_ "D "e "v "i "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-08-23T02:08:11.912230" elapsed="0.061595"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:08:11.974040" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-08-23T02:08:11.973921" elapsed="0.000177"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:11.973901" elapsed="0.000222"/>
</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-08-23T02:08:11.974509" 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-08-23T02:08:11.974839" elapsed="0.000136"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:08:11.975025" 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-08-23T02:08:11.911554" elapsed="0.063578"/>
</kw>
<msg time="2026-08-23T02:08:11.975224" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:08:11.975267" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "o "n "f "i "g "u "r "e "_ "D "e "v "i "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-08-23T02:08:11.906713" elapsed="0.068591"/>
</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-08-23T02:08:11.975626" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:11.975378" elapsed="0.000301"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:11.975361" elapsed="0.000341"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:08:11.906573" elapsed="0.069152"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:08:11.906374" elapsed="0.069381"/>
</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-08-23T02:08:11.903866" elapsed="0.071942"/>
</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-08-23T02:08:11.898903" elapsed="0.076982"/>
</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-08-23T02:08:11.898458" elapsed="0.077473"/>
</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-08-23T02:08:11.893869" elapsed="0.082115"/>
</kw>
<kw name="Configure_Device_In_Netconf" owner="NetconfKeywords">
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T02:08:11.995659" elapsed="0.000529"/>
</kw>
<msg time="2026-08-23T02:08:11.996256" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:08:11.995296" elapsed="0.001026"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return scandium if vanadium is at least ${lower_bound},
return calcium otherwise.</doc>
<status status="PASS" start="2026-08-23T02:08:11.994900" elapsed="0.001522"/>
</kw>
<msg time="2026-08-23T02:08:11.996480" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:08:11.985873" elapsed="0.010669"/>
</kw>
<msg time="2026-08-23T02:08:11.996735" level="INFO">${version} = scandium</msg>
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-08-23T02:08:11.985538" elapsed="0.011230"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:08:11.997988" level="INFO">${mapping} = {'DEVICE_IP': '10.30.170.120', 'DEVICE_NAME': 'netconf-test-device', 'DEVICE_PORT': '17830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'topsecret', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/t...</msg>
<var>${mapping}</var>
<arg>DEVICE_IP=${device_address}</arg>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>DEVICE_PORT=${device_port}</arg>
<arg>DEVICE_USER=${device_user}</arg>
<arg>DEVICE_PASSWORD=${device_password}</arg>
<arg>DEVICE_KEY=${device_key}</arg>
<arg>SCHEMA_DIRECTORY=${schema_directory}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-23T02:08:11.997012" elapsed="0.001014"/>
</kw>
<if>
<branch type="IF" condition="'${http_method}'=='post'">
<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-08-23T02:08:12.036180" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:12.035718" elapsed="0.000497"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T02:08:12.037083" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/rpc-create-device.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-23T02:08:12.036766" elapsed="0.000395">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/rpc-create-device.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-23T02:08:12.037259" 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-08-23T02:08:12.036406" elapsed="0.000880"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:08:12.037867" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device/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-08-23T02:08:12.037454" elapsed="0.000443"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:08:12.038213" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/rpc-create-device/location.uri"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/rpc-create-device/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:08:12.038399" level="INFO">${template} = $RESTCONF_ROOT/operations/netconf-node-topology:create-device
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:08:12.038060" elapsed="0.000365"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:12.038908" level="INFO">$RESTCONF_ROOT/operations/netconf-node-topology:create-device
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:12.038607" elapsed="0.000346"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:12.039997" level="INFO">mapping: {'DEVICE_IP': '10.30.170.120', 'DEVICE_NAME': 'netconf-test-device', 'DEVICE_PORT': '17830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'topsecret', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:12.039688" elapsed="0.000357"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:08:12.040480" 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-08-23T02:08:12.040204" elapsed="0.000307"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:08:12.041754" level="INFO">${value} = 10.30.170.120</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:08:12.040917" elapsed="0.000864"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:08:12.043268" level="INFO">${encoded} = 10.30.170.120</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-08-23T02:08:12.042512" elapsed="0.000811"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:08:12.043510" elapsed="0.000045"/>
</return>
<msg time="2026-08-23T02:08:12.043799" level="INFO">${encoded_value} = 10.30.170.120</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-08-23T02:08:12.041998" elapsed="0.001840"/>
</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-08-23T02:08:12.044042" elapsed="0.000576"/>
</kw>
<var name="${key}">DEVICE_IP</var>
<var name="${value}">10.30.170.120</var>
<status status="PASS" start="2026-08-23T02:08:12.040762" elapsed="0.003902"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:08:12.045518" level="INFO">${value} = netconf-test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:08:12.044969" elapsed="0.000576"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:08:12.047051" level="INFO">${encoded} = netconf-test-device</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-08-23T02:08:12.046227" elapsed="0.000872"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:08:12.047321" elapsed="0.000041"/>
</return>
<msg time="2026-08-23T02:08:12.047634" level="INFO">${encoded_value} = netconf-test-device</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-08-23T02:08:12.045732" elapsed="0.001935"/>
</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-08-23T02:08:12.047933" elapsed="0.000673"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:08:12.044789" elapsed="0.003875"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:08:12.049735" level="INFO">${value} = 17830</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:08:12.049059" elapsed="0.000714"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:08:12.051434" level="INFO">${encoded} = 17830</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-08-23T02:08:12.050765" elapsed="0.000724"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:08:12.051649" elapsed="0.000039"/>
</return>
<msg time="2026-08-23T02:08:12.052003" level="INFO">${encoded_value} = 17830</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-08-23T02:08:12.050107" elapsed="0.001928"/>
</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-08-23T02:08:12.052231" elapsed="0.000688"/>
</kw>
<var name="${key}">DEVICE_PORT</var>
<var name="${value}">17830</var>
<status status="PASS" start="2026-08-23T02:08:12.048807" elapsed="0.004167"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:08:12.054014" level="INFO">${value} = admin</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:08:12.053284" elapsed="0.000764"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:08:12.055589" level="INFO">${encoded} = admin</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-08-23T02:08:12.054908" elapsed="0.000736"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:08:12.055805" elapsed="0.000235"/>
</return>
<msg time="2026-08-23T02:08:12.056314" level="INFO">${encoded_value} = admin</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-08-23T02:08:12.054281" elapsed="0.002066"/>
</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-08-23T02:08:12.056549" elapsed="0.000644"/>
</kw>
<var name="${key}">DEVICE_USER</var>
<var name="${value}">admin</var>
<status status="PASS" start="2026-08-23T02:08:12.053115" elapsed="0.004126"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:08:12.058136" level="INFO">${value} = topsecret</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:08:12.057499" elapsed="0.000674"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:08:12.059489" level="INFO">${encoded} = topsecret</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-08-23T02:08:12.058910" elapsed="0.000626"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:08:12.059669" elapsed="0.000032"/>
</return>
<msg time="2026-08-23T02:08:12.059943" level="INFO">${encoded_value} = topsecret</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-08-23T02:08:12.058390" elapsed="0.001579"/>
</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-08-23T02:08:12.060118" elapsed="0.000607"/>
</kw>
<var name="${key}">DEVICE_PASSWORD</var>
<var name="${value}">topsecret</var>
<status status="PASS" start="2026-08-23T02:08:12.057363" elapsed="0.003408"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:08:12.061712" level="INFO">${value} = device-key</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:08:12.061169" elapsed="0.000570"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:08:12.063256" level="INFO">${encoded} = device-key</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-08-23T02:08:12.062617" elapsed="0.000683"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:08:12.063427" elapsed="0.000035"/>
</return>
<msg time="2026-08-23T02:08:12.063673" level="INFO">${encoded_value} = device-key</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-08-23T02:08:12.061942" elapsed="0.001757"/>
</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-08-23T02:08:12.063865" elapsed="0.000593"/>
</kw>
<var name="${key}">DEVICE_KEY</var>
<var name="${value}">device-key</var>
<status status="PASS" start="2026-08-23T02:08:12.061035" elapsed="0.003482"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:08:12.065415" level="INFO">${value} = /tmp/schema</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:08:12.064781" elapsed="0.000663"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:08:12.066652" level="INFO">${encoded} = /tmp/schema</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-08-23T02:08:12.066109" elapsed="0.000587"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:08:12.066977" elapsed="0.000037"/>
</return>
<msg time="2026-08-23T02:08:12.067249" level="INFO">${encoded_value} = /tmp/schema</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-08-23T02:08:12.065628" elapsed="0.001649"/>
</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-08-23T02:08:12.067429" elapsed="0.000698"/>
</kw>
<var name="${key}">SCHEMA_DIRECTORY</var>
<var name="${value}">/tmp/schema</var>
<status status="PASS" start="2026-08-23T02:08:12.064649" elapsed="0.003522"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:08:12.069048" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:08:12.068441" elapsed="0.000634"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:08:12.070328" level="INFO">${encoded} = /rests</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-08-23T02:08:12.069724" elapsed="0.000647"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:08:12.070499" elapsed="0.000032"/>
</return>
<msg time="2026-08-23T02:08:12.070742" level="INFO">${encoded_value} = /rests</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-08-23T02:08:12.069261" elapsed="0.001508"/>
</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-08-23T02:08:12.070957" elapsed="0.000552"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-23T02:08:12.068284" elapsed="0.003278"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-23T02:08:12.040575" elapsed="0.031031"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-23T02:08:12.071653" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:08:12.071817" level="INFO">${mapping_to_use} = {'DEVICE_IP': '10.30.170.120', 'DEVICE_NAME': 'netconf-test-device', 'DEVICE_PORT': '17830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'topsecret', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/t...</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-23T02:08:12.039361" elapsed="0.032557"/>
</kw>
<status status="PASS" start="2026-08-23T02:08:12.039032" elapsed="0.032922"/>
</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-08-23T02:08:12.072205" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:12.071984" elapsed="0.000279"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:12.039008" elapsed="0.033276"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:08:12.073273" level="INFO">${final_text} = /rests/operations/netconf-node-topology:create-device</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-08-23T02:08:12.072460" elapsed="0.000842"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T02:08:12.073352" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device/${file_name}.</doc>
<status status="PASS" start="2026-08-23T02:08:12.035034" elapsed="0.038445"/>
</kw>
<msg time="2026-08-23T02:08:12.073532" 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-08-23T02:08:12.021009" elapsed="0.052578"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:12.086290" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:12.099665" elapsed="0.000039"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:12.114137" elapsed="0.000037"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:12.114431" 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-08-23T02:08:12.114657" 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-08-23T02:08:12.115072" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:12.114925" elapsed="0.000204"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:12.114907" 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-08-23T02:08:12.115293" elapsed="0.000058"/>
</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-08-23T02:08:12.115512" 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-08-23T02:08:12.115700" elapsed="0.000023"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T02:08:12.114871" elapsed="0.000895"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T02:08:12.114743" elapsed="0.001057"/>
</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-08-23T02:08:12.116044" elapsed="0.000027"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:12.116133" elapsed="0.000016"/>
</return>
<msg time="2026-08-23T02:08:12.116290" level="INFO">${uri} = /rests/operations/netconf-node-topology:create-device</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-08-23T02:08:12.016446" elapsed="0.099879"/>
</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-08-23T02:08:12.143977" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device.vanadium/post_data.xml</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:12.143549" elapsed="0.000457"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T02:08:12.144783" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/rpc-create-device.vanadium/post_data.xml' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-23T02:08:12.144506" elapsed="0.000377">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/rpc-create-device.vanadium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-08-23T02:08:12.144981" 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-08-23T02:08:12.144165" elapsed="0.000840"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:08:12.145556" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device/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-08-23T02:08:12.145168" elapsed="0.000415"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:08:12.145906" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/rpc-create-device/post_data.xml"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/rpc-create-device/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:08:12.146079" level="INFO">${template} = &lt;input xmlns="urn:opendaylight:netconf-node-topology"&gt;
   &lt;node-id&gt;$DEVICE_NAME&lt;/node-id&gt;
   &lt;host&gt;$DEVICE_IP&lt;/host&gt;
   &lt;port&gt;$DEVICE_PORT&lt;/port&gt;
   &lt;login-password&gt;
     &lt;username&gt;$DEVICE_USER&lt;/usern...</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:08:12.145744" elapsed="0.000365"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:12.146512" level="INFO">&lt;input xmlns="urn:opendaylight:netconf-node-topology"&gt;
   &lt;node-id&gt;$DEVICE_NAME&lt;/node-id&gt;
   &lt;host&gt;$DEVICE_IP&lt;/host&gt;
   &lt;port&gt;$DEVICE_PORT&lt;/port&gt;
   &lt;login-password&gt;
     &lt;username&gt;$DEVICE_USER&lt;/username&gt;
     &lt;password&gt;$DEVICE_PASSWORD&lt;/password&gt;
   &lt;/login-password&gt;
   &lt;tcp-only&gt;false&lt;/tcp-only&gt;
   &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
 &lt;/input&gt;
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:12.146264" 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-08-23T02:08:12.146972" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:12.146647" elapsed="0.000387"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:12.147502" level="INFO">${mapping_to_use} = {'DEVICE_IP': '10.30.170.120', 'DEVICE_NAME': 'netconf-test-device', 'DEVICE_PORT': '17830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'topsecret', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/t...</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-08-23T02:08:12.147203" elapsed="0.000453"/>
</kw>
<status status="PASS" start="2026-08-23T02:08:12.147060" elapsed="0.000643"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:12.146626" elapsed="0.001100"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:08:12.148629" level="INFO">${final_text} = &lt;input xmlns="urn:opendaylight:netconf-node-topology"&gt;
   &lt;node-id&gt;netconf-test-device&lt;/node-id&gt;
   &lt;host&gt;10.30.170.120&lt;/host&gt;
   &lt;port&gt;17830&lt;/port&gt;
   &lt;login-password&gt;
     &lt;username&gt;admin&lt;/username&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-08-23T02:08:12.147891" elapsed="0.000770"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T02:08:12.148711" elapsed="0.000041"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device/${file_name}.</doc>
<status status="PASS" start="2026-08-23T02:08:12.142933" elapsed="0.005947"/>
</kw>
<msg time="2026-08-23T02:08:12.148936" 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-08-23T02:08:12.130139" elapsed="0.018847"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:12.163587" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:12.176093" elapsed="0.000032"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:12.188884" 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-08-23T02:08:12.189108" 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-08-23T02:08:12.189296" elapsed="0.000024"/>
</kw>
<for flavor="IN RANGE">
<iter>
<if>
<branch type="IF" condition="${iteration} &gt; ${iter_start}">
<kw name="Append To List" owner="Collections">
<arg>${items}</arg>
<arg>${separator}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:12.189726" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:12.189567" elapsed="0.000217"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:12.189548" 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-08-23T02:08:12.190011" elapsed="0.000028"/>
</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-08-23T02:08:12.190185" 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-08-23T02:08:12.190353" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T02:08:12.189511" elapsed="0.000896"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T02:08:12.189388" elapsed="0.001048"/>
</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-08-23T02:08:12.190579" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:12.190664" elapsed="0.000020"/>
</return>
<msg time="2026-08-23T02:08:12.190825" level="INFO">${data} = &lt;input xmlns="urn:opendaylight:netconf-node-topology"&gt;
   &lt;node-id&gt;netconf-test-device&lt;/node-id&gt;
   &lt;host&gt;10.30.170.120&lt;/host&gt;
   &lt;port&gt;17830&lt;/port&gt;
   &lt;login-password&gt;
     &lt;username&gt;admin&lt;/username&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-08-23T02:08:12.129206" elapsed="0.061739"/>
</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-08-23T02:08:12.192528" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/rpc-create-device/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-08-23T02:08:12.192191" elapsed="0.000419">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/rpc-create-device/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-23T02:08:12.192706" 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-08-23T02:08:12.191730" elapsed="0.001001"/>
</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-08-23T02:08:12.193087" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:12.192802" elapsed="0.000343"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:12.193647" 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-08-23T02:08:12.193346" elapsed="0.000327"/>
</kw>
<status status="PASS" start="2026-08-23T02:08:12.193171" elapsed="0.000538"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:12.192784" elapsed="0.000946"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:08:12.196159" 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-08-23T02:08:12.193897" elapsed="0.002297"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-23T02:08:12.196260" elapsed="0.000042"/>
</return>
<msg time="2026-08-23T02:08:12.196465" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-23T02:08:12.191328" elapsed="0.005172"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:12.198600" level="INFO">/rests/operations/netconf-node-topology:create-device</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:12.198223" elapsed="0.000441"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:12.199333" level="INFO">&lt;input xmlns="urn:opendaylight:netconf-node-topology"&gt;
   &lt;node-id&gt;netconf-test-device&lt;/node-id&gt;
   &lt;host&gt;10.30.170.120&lt;/host&gt;
   &lt;port&gt;17830&lt;/port&gt;
   &lt;login-password&gt;
     &lt;username&gt;admin&lt;/username&gt;
     &lt;password&gt;topsecret&lt;/password&gt;
   &lt;/login-password&gt;
   &lt;tcp-only&gt;false&lt;/tcp-only&gt;
   &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
 &lt;/input&gt;</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:12.198941" elapsed="0.000465"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:12.199901" 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-08-23T02:08:12.199583" elapsed="0.000364"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:12.200464" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:12.200143" elapsed="0.000379"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-08-23T02:08:12.201464" 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-08-23T02:08:12.201240" elapsed="0.000254"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-08-23T02:08:12.201879" 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-08-23T02:08:12.201661" elapsed="0.000246"/>
</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-08-23T02:08:12.202068" elapsed="0.000231"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:12.202864" 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-08-23T02:08:12.202509" elapsed="0.000423"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-08-23T02:08:12.202984" elapsed="0.000035"/>
</return>
<msg time="2026-08-23T02:08:12.203162" 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-08-23T02:08:12.200755" elapsed="0.002433"/>
</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">
<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="NOT RUN" start="2026-08-23T02:08:12.208605" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:12.203274" elapsed="0.005427"/>
</branch>
<branch type="ELSE">
<kw name="POST On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:08:12.215936" level="INFO">POST Request : url=http://10.30.170.114:8181/rests/operations/netconf-node-topology:create-device 
 path_url=/rests/operations/netconf-node-topology:create-device 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Content-Length': '337', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="urn:opendaylight:netconf-node-topology"&gt;
   &lt;node-id&gt;netconf-test-device&lt;/node-id&gt;
   &lt;host&gt;10.30.170.120&lt;/host&gt;
   &lt;port&gt;17830&lt;/port&gt;
   &lt;login-password&gt;
     &lt;username&gt;admin&lt;/username&gt;
     &lt;password&gt;topsecret&lt;/password&gt;
   &lt;/login-password&gt;
   &lt;tcp-only&gt;false&lt;/tcp-only&gt;
   &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
 &lt;/input&gt; 
 </msg>
<msg time="2026-08-23T02:08:12.215997" level="INFO">POST Response : url=http://10.30.170.114:8181/rests/operations/netconf-node-topology:create-device 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:08:12.216130" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-node-topology:create-device</msg>
<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="FAIL" start="2026-08-23T02:08:12.208966" elapsed="0.007629">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-node-topology:create-device</status>
</kw>
<status status="FAIL" start="2026-08-23T02:08:12.208741" elapsed="0.007948">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-node-topology:create-device</status>
</branch>
<status status="FAIL" start="2026-08-23T02:08:12.203251" elapsed="0.013473">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-node-topology:create-device</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:12.217191" elapsed="0.000037"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:12.217353" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:12.217310" elapsed="0.000090"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:12.217291" elapsed="0.000131"/>
</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-08-23T02:08:12.217575" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:08:12.217643" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>content_type=${content_type}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>POST data to given URI, check status code and return response text.
${content_type} and ${accept} are mandatory Python objects with headers to use.
If ${normalize_json}, normalize text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:08:12.196962" elapsed="0.020793">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-node-topology:create-device</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:12.217854" elapsed="0.000017"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>extension=xml</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>content_type=${HEADERS_XML}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>endline=${\n}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve URI and data from folder, call Post_To_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-23T02:08:12.002389" elapsed="0.215565">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-node-topology:create-device</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=response</arg>
<arg>mapping=${mapping}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:12.218251" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:12.218069" elapsed="0.000249"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:12.218053" elapsed="0.000289"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:12.218375" elapsed="0.000014"/>
</return>
<arg>folder=${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Add arguments sensible for XML data, return Post_Templated response text.
Optionally, verification against response.xml (no iteration) is called.</doc>
<status status="FAIL" start="2026-08-23T02:08:11.998614" elapsed="0.219857">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-node-topology:create-device</status>
</kw>
<status status="FAIL" start="2026-08-23T02:08:11.998150" elapsed="0.220391">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-node-topology:create-device</status>
</branch>
<branch type="ELSE">
<kw name="Put_As_Xml_Templated" owner="TemplatedRequests">
<arg>folder=${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Add arguments sensible for XML data, return Put_Templated response text.
Optionally, verification against response.xml (no iteration) is called.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:12.218812" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:12.218572" elapsed="0.000323"/>
</branch>
<status status="FAIL" start="2026-08-23T02:08:11.998122" elapsed="0.220797">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-node-topology:create-device</status>
</if>
<kw name="Set To Dictionary" owner="Collections">
<arg>${NetconfKeywords__mounted_device_types}</arg>
<arg>${device_name}</arg>
<arg>${device_type}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:12.219070" elapsed="0.000020"/>
</kw>
<arg>${device_name}</arg>
<arg>device_type=${device_type_rpc_create}</arg>
<arg>http_timeout=2</arg>
<arg>http_method=post</arg>
<doc>Tell Netconf about the specified device so it can add it into its configuration.</doc>
<status status="FAIL" start="2026-08-23T02:08:11.976252" elapsed="0.242979">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-node-topology:create-device</status>
</kw>
<doc>Make request to configure a testtool device on Netconf connector.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-08-23T02:08:11.893026" elapsed="0.326425">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-node-topology:create-device</status>
</test>
<test id="s1-s4-s1-t4" name="Check_ODL_Has_Netconf_Connector_For_Device" line="70">
<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-08-23T02:08:12.224231" elapsed="0.000448"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:08:12.223860" elapsed="0.000900"/>
</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-08-23T02:08:12.226286" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:12.226121" elapsed="0.000231"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:12.226094" elapsed="0.000289"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:08:12.232704" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:12.232558" elapsed="0.000200"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:12.232410" elapsed="0.000370"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:08:12.233868" 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-08-23T02:08:12.233448" elapsed="0.000448"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:08:12.234355" 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-08-23T02:08:12.234057" elapsed="0.000324"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:08:12.234426" elapsed="0.000034"/>
</return>
<msg time="2026-08-23T02:08:12.234587" 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-08-23T02:08:12.233056" elapsed="0.001556"/>
</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-08-23T02:08:12.240322" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:12.240212" elapsed="0.000162"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:12.240192" elapsed="0.000209"/>
</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-08-23T02:08:12.241778" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:12.241670" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:12.241651" elapsed="0.000226"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:08:12.242425" 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-08-23T02:08:12.242024" elapsed="0.000427"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:08:12.242916" 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-08-23T02:08:12.242625" elapsed="0.000317"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:08:12.272751" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:08:12.243499" elapsed="0.029832"/>
</kw>
<msg time="2026-08-23T02:08:12.273818" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:08:12.273979" 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 "n "e "t "c "o "n "f "...</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-08-23T02:08:12.243100" elapsed="0.030963"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:08:12.330014" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "h "e "c "k "_ "O "D "L "_ "H "a "s "_ "N "e "t "c "o "n "f "_ "C "o "n "n "e "c "t "o "r "_ "F "o "r "_ "D "e "v "i "c "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-08-23T02:08:12.275609" elapsed="0.054611"/>
</kw>
<msg time="2026-08-23T02:08:12.330404" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:08:12.330450" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "h "e "c "k "_ "O "D "L "_ "H "a "s "_ "N ...</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-08-23T02:08:12.274540" elapsed="0.055946"/>
</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-08-23T02:08:12.330865" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:12.330584" elapsed="0.000459"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:12.330556" elapsed="0.000518"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:12.331651" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "h "e "c "k "_ "O "D "L "_ "H "a "s "_ "N "e "t "c "o "n "f "_ "C "o "n "n "e "c "t "o "r "_ "F "o "r "_ "D "e "v "i "c "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-08-23T02:08:12.331238" elapsed="0.000489"/>
</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-08-23T02:08:12.332030" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:12.331794" elapsed="0.000315"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:12.331776" elapsed="0.000357"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:08:12.332173" elapsed="0.000042"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-23T02:08:12.335756" elapsed="0.000193"/>
</kw>
<msg time="2026-08-23T02:08:12.336025" 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-08-23T02:08:12.334971" elapsed="0.001168"/>
</kw>
<kw name="Open 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-08-23T02:08:12.337242" elapsed="0.000041"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:12.338397" elapsed="0.000039"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:08:12.333155" elapsed="0.005366"/>
</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-08-23T02:08:12.332488" elapsed="0.006162"/>
</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-08-23T02:08:12.241360" elapsed="0.097390"/>
</kw>
<msg time="2026-08-23T02:08:12.339062" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:08:12.339111" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "h "e "c "k "_ "O "D "L "_ "H "a "s "_ "N ...</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-08-23T02:08:12.240598" elapsed="0.098552"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:08:12.339337" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:08:12.339228" elapsed="0.000169"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:12.339209" 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-08-23T02:08:12.339828" elapsed="0.000047"/>
</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-08-23T02:08:12.340188" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:08:12.340261" 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-08-23T02:08:12.239867" elapsed="0.100503"/>
</kw>
<msg time="2026-08-23T02:08:12.340465" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:08:12.340509" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "h "e "c "k "_ "O "D "L "_ "H "a "s "_ "N ...</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-08-23T02:08:12.235016" elapsed="0.105530"/>
</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-08-23T02:08:12.341032" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:12.340622" elapsed="0.000468"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:12.340605" elapsed="0.000508"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:08:12.234871" elapsed="0.106266"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:08:12.234672" elapsed="0.106500"/>
</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-08-23T02:08:12.232048" elapsed="0.109183"/>
</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-08-23T02:08:12.225619" elapsed="0.115670"/>
</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-08-23T02:08:12.225002" elapsed="0.116335"/>
</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-08-23T02:08:12.220947" elapsed="0.120443"/>
</kw>
<kw name="Count_Netconf_Connectors_For_Device" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:12.352802" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:12.350639" elapsed="0.002192"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:12.353191" elapsed="0.000022"/>
</kw>
<var name="${nv}"/>
<status status="NOT RUN" start="2026-08-23T02:08:12.353036" elapsed="0.000213"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="NOT RUN" start="2026-08-23T02:08:12.352907" elapsed="0.000368"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:12.353645" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:12.353336" elapsed="0.000368"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:12.354453" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:12.353977" elapsed="0.000503"/>
</kw>
<status status="PASS" start="2026-08-23T02:08:12.353729" elapsed="0.000788"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:12.354700" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:12.354541" elapsed="0.000214"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:12.353320" elapsed="0.001456"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:12.354810" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T02:08:12.354977" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:08:12.350179" elapsed="0.004823"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:12.355049" elapsed="0.000025"/>
</return>
<msg time="2026-08-23T02:08:12.355189" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:08:12.349667" elapsed="0.005547"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:12.362545" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:12.362295" elapsed="0.000296"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:12.363006" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:12.362741" elapsed="0.000309"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:08:12.370087" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:08:12.370143" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '407'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:08:12.370255" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:08:12.365211" elapsed="0.005457">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:08:12.363116" elapsed="0.007634">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:12.370950" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:12.370782" elapsed="0.000234"/>
</branch>
<status status="FAIL" start="2026-08-23T02:08:12.363098" elapsed="0.007941">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:12.371409" elapsed="0.000025"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:12.371540" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:12.371504" elapsed="0.000077"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:12.371487" elapsed="0.000115"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:12.371776" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:08:12.371864" elapsed="0.000017"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:08:12.357945" elapsed="0.014026">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:12.372040" elapsed="0.000015"/>
</return>
<var>${mounts}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:08:12.355430" elapsed="0.016702">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${mounts}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:12.372296" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${actual_count}</var>
<arg>len('''${mounts}'''.split('"node-id": "${device_name}"'))-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:12.372459" elapsed="0.000020"/>
</kw>
<return>
<value>${actual_count}</value>
<status status="NOT RUN" start="2026-08-23T02:08:12.372527" elapsed="0.000015"/>
</return>
<var>${count}</var>
<arg>${device_name}</arg>
<doc>Count all instances of the specified device in the Netconf topology (usually 0 or 1).</doc>
<status status="FAIL" start="2026-08-23T02:08:12.341923" elapsed="0.030698">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:12.372777" elapsed="0.000021"/>
</kw>
<doc>Get the list of configured devices and search for our device there. Fail if not found.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-08-23T02:08:12.220078" elapsed="0.152888">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</test>
<test id="s1-s4-s1-t5" name="Wait_For_Device_To_Become_Connected" line="76">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-08-23T02:08:12.377270" elapsed="0.000299"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:08:12.376901" elapsed="0.000747"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:08:12.379085" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:12.378929" elapsed="0.000221"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:12.378901" elapsed="0.000280"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:08:12.385194" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:12.385085" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:12.385066" elapsed="0.000197"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:08:12.386293" 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-08-23T02:08:12.385901" elapsed="0.000419"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:08:12.386779" 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-08-23T02:08:12.386478" elapsed="0.000327"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:08:12.386867" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T02:08:12.387026" 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-08-23T02:08:12.385490" elapsed="0.001561"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:08:12.392513" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:12.392403" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:12.392384" elapsed="0.000197"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:08:12.393801" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:12.393693" elapsed="0.000182"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:12.393675" elapsed="0.000224"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:08:12.394460" 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-08-23T02:08:12.394073" elapsed="0.000414"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:08:12.394922" 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-08-23T02:08:12.394642" elapsed="0.000306"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:08:12.425121" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:08:12.395494" elapsed="0.029877"/>
</kw>
<msg time="2026-08-23T02:08:12.425564" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:08:12.425611" 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 "n "e "t "c "o "n "f "...</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-08-23T02:08:12.395106" elapsed="0.030543"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:08:12.443886" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "W "a "i "t "_ "F "o "r "_ "D "e "v "i "c "e "_ "T "o "_ "B "e "c "o "m "e "_ "C "o "n "n "e "c "t "e "d "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-08-23T02:08:12.426471" elapsed="0.017610"/>
</kw>
<msg time="2026-08-23T02:08:12.444261" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:08:12.444307" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "W "a "i "t "_ "F "o "r "_ "D "e "v "i "c "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-08-23T02:08:12.425825" elapsed="0.018520"/>
</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-08-23T02:08:12.444654" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:12.444426" elapsed="0.000308"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:12.444405" elapsed="0.000356"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:12.445324" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "W "a "i "t "_ "F "o "r "_ "D "e "v "i "c "e "_ "T "o "_ "B "e "c "o "m "e "_ "C "o "n "n "e "c "t "e "d "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:12.444927" elapsed="0.000470"/>
</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-08-23T02:08:12.445675" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:12.445463" elapsed="0.000290"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:12.445445" elapsed="0.000333"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:08:12.445812" elapsed="0.000049"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-23T02:08:12.449180" elapsed="0.000148"/>
</kw>
<msg time="2026-08-23T02:08:12.449404" 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-08-23T02:08:12.448465" elapsed="0.001048"/>
</kw>
<kw name="Open 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-08-23T02:08:12.450773" elapsed="0.000062"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:12.451961" elapsed="0.000039"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:08:12.446741" elapsed="0.005354"/>
</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-08-23T02:08:12.446107" elapsed="0.006117"/>
</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-08-23T02:08:12.393386" elapsed="0.058944"/>
</kw>
<msg time="2026-08-23T02:08:12.452423" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:08:12.452467" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "W "a "i "t "_ "F "o "r "_ "D "e "v "i "c "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-08-23T02:08:12.392730" elapsed="0.059775"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:08:12.452694" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:08:12.452587" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:12.452568" 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-08-23T02:08:12.453539" 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-08-23T02:08:12.453888" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:08:12.453960" 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-08-23T02:08:12.392067" elapsed="0.062000"/>
</kw>
<msg time="2026-08-23T02:08:12.454160" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:08:12.454204" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "W "a "i "t "_ "F "o "r "_ "D "e "v "i "c "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-08-23T02:08:12.387409" elapsed="0.066833"/>
</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-08-23T02:08:12.454649" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:12.454372" elapsed="0.000336"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:12.454353" elapsed="0.000380"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:08:12.387270" elapsed="0.067487"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:08:12.387103" elapsed="0.067685"/>
</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-08-23T02:08:12.384702" elapsed="0.070175"/>
</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-08-23T02:08:12.378504" elapsed="0.076432"/>
</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-08-23T02:08:12.377909" elapsed="0.077073"/>
</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-08-23T02:08:12.373789" elapsed="0.081246"/>
</kw>
<kw name="Wait_Device_Connected" owner="NetconfKeywords">
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:12.467292" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:12.465000" elapsed="0.002320"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:12.468005" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:12.467659" elapsed="0.000373"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:08:12.467507" elapsed="0.000561"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:12.468620" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:12.468295" elapsed="0.000351"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:08:12.468148" elapsed="0.000533"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:08:12.467375" elapsed="0.001336"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:12.469031" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:12.468775" elapsed="0.000313"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:12.469806" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:12.469339" elapsed="0.000498"/>
</kw>
<status status="PASS" start="2026-08-23T02:08:12.469113" elapsed="0.000778"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:12.470141" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:12.469939" elapsed="0.000269"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:12.468757" elapsed="0.001479"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:12.470283" elapsed="0.000035"/>
</return>
<msg time="2026-08-23T02:08:12.470457" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:08:12.464529" elapsed="0.005954"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:12.470531" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:08:12.470719" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:08:12.463977" elapsed="0.006770"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:12.478860" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:12.478545" elapsed="0.000364"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:12.479311" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:12.479064" elapsed="0.000290"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:08:12.486209" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:08:12.486313" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:08:12.486438" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:08:12.481476" elapsed="0.005443">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:08:12.479421" elapsed="0.007592">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:12.487201" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:12.487049" elapsed="0.000218"/>
</branch>
<status status="FAIL" start="2026-08-23T02:08:12.479402" elapsed="0.007889">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:12.487772" elapsed="0.000036"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:12.487988" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:12.487935" elapsed="0.000112"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:12.487909" elapsed="0.000169"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:12.488275" elapsed="0.000029"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:08:12.488373" elapsed="0.000021"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:08:12.473759" elapsed="0.014766">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:12.488622" elapsed="0.000022"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:08:12.471009" elapsed="0.017746">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:12.489007" elapsed="0.000030"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:08:12.456257" elapsed="0.032902">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:13.506921" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:13.504813" elapsed="0.002137"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:13.507621" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:13.507296" elapsed="0.000352"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:08:13.507143" elapsed="0.000571"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:13.508288" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:13.507967" elapsed="0.000348"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:08:13.507799" elapsed="0.000552"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:08:13.507006" elapsed="0.001375"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:13.508690" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:13.508446" elapsed="0.000339"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:13.509538" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:13.509066" elapsed="0.000504"/>
</kw>
<status status="PASS" start="2026-08-23T02:08:13.508814" elapsed="0.000792"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:13.509794" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:13.509632" elapsed="0.000235"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:13.508428" elapsed="0.001461"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:13.509925" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T02:08:13.510077" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:08:13.504174" elapsed="0.005929"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:13.510150" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:08:13.510292" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:08:13.503261" elapsed="0.007057"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:13.518919" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:13.518652" elapsed="0.000313"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:13.519354" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:13.519114" elapsed="0.000283"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:08:13.526052" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:08:13.526106" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:08:13.526207" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:08:13.521539" elapsed="0.005004">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:08:13.519463" elapsed="0.007159">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:13.526807" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:13.526655" elapsed="0.000240"/>
</branch>
<status status="FAIL" start="2026-08-23T02:08:13.519444" elapsed="0.007475">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:13.527282" elapsed="0.000025"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:13.527413" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:13.527375" elapsed="0.000079"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:13.527358" elapsed="0.000117"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:13.527619" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:08:13.527687" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:08:13.513321" elapsed="0.014471">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:13.527939" elapsed="0.000019"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:08:13.510538" elapsed="0.017504">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:13.528208" elapsed="0.000022"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:08:13.489796" elapsed="0.038522">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:14.544439" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:14.542332" elapsed="0.002136"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:14.545163" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:14.544814" elapsed="0.000377"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:08:14.544661" elapsed="0.000567"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:14.545780" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:14.545459" elapsed="0.000348"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:08:14.545309" elapsed="0.000551"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:08:14.544524" elapsed="0.001367"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:14.546249" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:14.546004" elapsed="0.000302"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:14.547053" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:14.546557" elapsed="0.000525"/>
</kw>
<status status="PASS" start="2026-08-23T02:08:14.546331" elapsed="0.000787"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:14.547305" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:14.547143" elapsed="0.000220"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:14.545985" elapsed="0.001399"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:14.547420" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T02:08:14.547574" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:08:14.541871" elapsed="0.005729"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:14.547673" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:08:14.547827" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:08:14.541289" elapsed="0.006579"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:14.555243" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:14.554992" elapsed="0.000297"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:14.555726" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:14.555437" elapsed="0.000364"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:08:14.562613" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:08:14.562668" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:08:14.562819" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:08:14.557922" elapsed="0.005291">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:08:14.555891" elapsed="0.007404">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:14.563480" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:14.563329" elapsed="0.000217"/>
</branch>
<status status="FAIL" start="2026-08-23T02:08:14.555870" elapsed="0.007703">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:14.563984" elapsed="0.000027"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:14.564119" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:14.564082" elapsed="0.000079"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:14.564065" elapsed="0.000118"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:14.564323" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:08:14.564393" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:08:14.550528" elapsed="0.013968">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:14.564566" elapsed="0.000015"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:08:14.548092" elapsed="0.016568">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:14.564822" elapsed="0.000043"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:08:14.528978" elapsed="0.035978">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:15.582542" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:15.580403" elapsed="0.002173"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:15.583324" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:15.582996" elapsed="0.000355"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:08:15.582825" elapsed="0.000564"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:15.583958" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:15.583621" elapsed="0.000363"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:08:15.583473" elapsed="0.000547"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:08:15.582670" elapsed="0.001380"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:15.584384" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:15.584122" elapsed="0.000320"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:15.585182" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:15.584700" elapsed="0.000509"/>
</kw>
<status status="PASS" start="2026-08-23T02:08:15.584469" elapsed="0.000776"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:15.585428" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:15.585270" elapsed="0.000281"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:15.584102" elapsed="0.001472"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:15.585614" elapsed="0.000037"/>
</return>
<msg time="2026-08-23T02:08:15.585777" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:08:15.579922" elapsed="0.005882"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:15.585869" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:08:15.586013" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:08:15.579327" elapsed="0.006711"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:15.593329" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:15.593072" elapsed="0.000304"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:15.593766" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:15.593525" elapsed="0.000283"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:08:15.600960" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:08:15.601018" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:08:15.601130" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:08:15.595926" elapsed="0.005601">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:08:15.593892" elapsed="0.007718">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:15.601891" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:15.601649" elapsed="0.000337"/>
</branch>
<status status="FAIL" start="2026-08-23T02:08:15.593873" elapsed="0.008146">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:15.602522" elapsed="0.000035"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:15.602711" elapsed="0.000041"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:15.602659" elapsed="0.000134"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:15.602632" elapsed="0.000191"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:15.603037" elapsed="0.000039"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:08:15.603143" elapsed="0.000021"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:08:15.588725" elapsed="0.014564">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:15.603385" elapsed="0.000021"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:08:15.586260" elapsed="0.017255">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:15.603794" elapsed="0.000030"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:08:15.565782" elapsed="0.038189">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:16.621124" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:16.618948" elapsed="0.002209"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:16.621883" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:16.621532" elapsed="0.000379"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:08:16.621377" elapsed="0.000571"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:16.622504" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:16.622183" elapsed="0.000347"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:08:16.622034" elapsed="0.000532"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:08:16.621229" elapsed="0.001366"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:16.622955" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:16.622671" elapsed="0.000344"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:16.623734" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:16.623269" elapsed="0.000493"/>
</kw>
<status status="PASS" start="2026-08-23T02:08:16.623042" elapsed="0.000755"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:16.624003" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:16.623823" elapsed="0.000236"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:16.622650" elapsed="0.001430"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:16.624120" elapsed="0.000039"/>
</return>
<msg time="2026-08-23T02:08:16.624287" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:08:16.618444" elapsed="0.005869"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:16.624361" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:08:16.624502" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:08:16.617776" elapsed="0.006752"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:16.631996" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:16.631716" elapsed="0.000327"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:16.632441" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:16.632196" elapsed="0.000289"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:08:16.639637" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:08:16.639697" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:08:16.639818" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:08:16.634698" elapsed="0.005549">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:08:16.632552" elapsed="0.007861">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:16.640603" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:16.640448" elapsed="0.000222"/>
</branch>
<status status="FAIL" start="2026-08-23T02:08:16.632533" elapsed="0.008160">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:16.641155" elapsed="0.000032"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:16.641300" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:16.641262" elapsed="0.000080"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:16.641245" elapsed="0.000118"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:16.641503" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:08:16.641573" elapsed="0.000021"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:08:16.627301" elapsed="0.014424">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:16.641821" elapsed="0.000045"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:08:16.624756" elapsed="0.017224">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:16.642209" elapsed="0.000030"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:08:16.604553" elapsed="0.037805">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:17.661009" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:17.658793" elapsed="0.002249"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:17.661732" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:17.661403" elapsed="0.000356"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:08:17.661250" elapsed="0.000546"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:17.662380" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:17.662046" elapsed="0.000360"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:08:17.661896" elapsed="0.000546"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:08:17.661108" elapsed="0.001364"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:17.662803" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:17.662542" elapsed="0.000336"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:17.663604" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:17.663135" elapsed="0.000498"/>
</kw>
<status status="PASS" start="2026-08-23T02:08:17.662904" elapsed="0.000771"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:17.663877" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:17.663700" elapsed="0.000235"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:17.662523" elapsed="0.001433"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:17.663995" elapsed="0.000034"/>
</return>
<msg time="2026-08-23T02:08:17.664153" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:08:17.658143" elapsed="0.006225"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:17.664423" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:08:17.664574" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:08:17.657324" elapsed="0.007276"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:17.671927" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:17.671653" elapsed="0.000321"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:17.672369" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:17.672126" elapsed="0.000287"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:08:17.679115" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:08:17.679171" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:08:17.679284" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:08:17.674551" elapsed="0.005112">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:08:17.672479" elapsed="0.007266">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:17.679951" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:17.679784" elapsed="0.000234"/>
</branch>
<status status="FAIL" start="2026-08-23T02:08:17.672461" elapsed="0.007580">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:17.680406" elapsed="0.000025"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:17.680539" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:17.680502" elapsed="0.000079"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:17.680484" elapsed="0.000120"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:17.680742" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:08:17.680812" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:08:17.667324" elapsed="0.013612">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:17.681007" elapsed="0.000016"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:08:17.664822" elapsed="0.016281">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:17.681267" elapsed="0.000021"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:08:17.643254" elapsed="0.038155">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:18.698917" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:18.696697" elapsed="0.002256"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:18.699688" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:18.699360" elapsed="0.000355"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:08:18.699203" elapsed="0.000549"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:18.700324" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:18.700004" elapsed="0.000347"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:08:18.699853" elapsed="0.000533"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:08:18.699044" elapsed="0.001372"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:18.700765" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:18.700496" elapsed="0.000327"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:18.701563" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:18.701096" elapsed="0.000495"/>
</kw>
<status status="PASS" start="2026-08-23T02:08:18.700867" elapsed="0.000761"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:18.701814" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:18.701653" elapsed="0.000234"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:18.700475" elapsed="0.001433"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:18.701950" elapsed="0.000042"/>
</return>
<msg time="2026-08-23T02:08:18.702121" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:08:18.696212" elapsed="0.005936"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:18.702196" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:08:18.702339" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:08:18.695548" elapsed="0.006817"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:18.709662" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:18.709403" elapsed="0.000306"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:18.710119" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:18.709875" elapsed="0.000287"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:08:18.717318" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:08:18.717376" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:08:18.717494" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:08:18.712294" elapsed="0.005639">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:08:18.710228" elapsed="0.007853">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:18.718267" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:18.718117" elapsed="0.000215"/>
</branch>
<status status="FAIL" start="2026-08-23T02:08:18.710209" elapsed="0.008146">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:18.718729" elapsed="0.000025"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:18.718881" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:18.718824" elapsed="0.000100"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:18.718807" elapsed="0.000139"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:18.719112" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:08:18.719185" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:08:18.705091" elapsed="0.014201">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:18.719362" elapsed="0.000015"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:08:18.702590" elapsed="0.016868">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:18.719623" elapsed="0.000021"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:08:18.682315" elapsed="0.037454">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:19.737485" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:19.735297" elapsed="0.002224"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:19.738248" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:19.737922" elapsed="0.000353"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:08:19.737750" elapsed="0.000562"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:19.738905" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:19.738545" elapsed="0.000388"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:08:19.738396" elapsed="0.000573"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:08:19.737596" elapsed="0.001402"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:19.739367" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:19.739074" elapsed="0.000353"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:19.740171" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:19.739683" elapsed="0.000516"/>
</kw>
<status status="PASS" start="2026-08-23T02:08:19.739454" elapsed="0.000781"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:19.740421" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:19.740261" elapsed="0.000215"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:19.739053" elapsed="0.001444"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:19.740538" elapsed="0.000042"/>
</return>
<msg time="2026-08-23T02:08:19.740708" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:08:19.734782" elapsed="0.005952"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:19.740783" elapsed="0.000116"/>
</return>
<msg time="2026-08-23T02:08:19.741022" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:08:19.734190" elapsed="0.006858"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:19.748419" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:19.748161" elapsed="0.000305"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:19.748873" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:19.748615" elapsed="0.000304"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:08:19.755804" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:08:19.755908" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:08:19.756077" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:08:19.751024" elapsed="0.005581">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:08:19.748985" elapsed="0.007735">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:19.757010" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:19.756770" elapsed="0.000333"/>
</branch>
<status status="FAIL" start="2026-08-23T02:08:19.748967" elapsed="0.008168">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:19.757649" elapsed="0.000037"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:19.757839" elapsed="0.000037"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:19.757783" elapsed="0.000134"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:19.757759" elapsed="0.000189"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:19.758142" elapsed="0.000030"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:08:19.758238" elapsed="0.000021"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:08:19.743729" elapsed="0.014654">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:19.758480" elapsed="0.000021"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:08:19.741267" elapsed="0.017344">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:19.758860" elapsed="0.000031"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:08:19.720637" elapsed="0.038377">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:20.775579" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:20.773397" elapsed="0.002215"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:20.776416" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:20.776016" elapsed="0.000428"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:08:20.775827" elapsed="0.000654"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:20.777095" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:20.776748" elapsed="0.000374"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:08:20.776567" elapsed="0.000591"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:08:20.775682" elapsed="0.001506"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:20.777528" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:20.777261" elapsed="0.000327"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:20.778353" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:20.777856" elapsed="0.000531"/>
</kw>
<status status="PASS" start="2026-08-23T02:08:20.777613" elapsed="0.000811"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:20.778640" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:20.778456" elapsed="0.000246"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:20.777241" elapsed="0.001481"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:20.778760" elapsed="0.000039"/>
</return>
<msg time="2026-08-23T02:08:20.778945" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:08:20.772927" elapsed="0.006044"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:20.779021" elapsed="0.000089"/>
</return>
<msg time="2026-08-23T02:08:20.779249" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:08:20.772339" elapsed="0.006936"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:20.787547" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:20.787285" elapsed="0.000309"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:20.788013" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:20.787746" elapsed="0.000311"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:08:20.795292" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:08:20.795350" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:08:20.795475" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:08:20.790266" elapsed="0.005637">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:08:20.788124" elapsed="0.007863">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:20.796172" elapsed="0.000090"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:20.796022" elapsed="0.000287"/>
</branch>
<status status="FAIL" start="2026-08-23T02:08:20.788105" elapsed="0.008228">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:20.796704" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:20.796854" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:20.796799" elapsed="0.000100"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:20.796782" elapsed="0.000138"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:20.797060" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:08:20.797129" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:08:20.781960" elapsed="0.015275">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:20.797304" elapsed="0.000015"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:08:20.779498" elapsed="0.017901">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:20.797562" elapsed="0.000021"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:08:20.759922" elapsed="0.037750">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:21.814105" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:21.811984" elapsed="0.002149"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:21.814833" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:21.814495" elapsed="0.000394"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:08:21.814328" elapsed="0.000606"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:21.815510" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:21.815191" elapsed="0.000345"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:08:21.815035" elapsed="0.000536"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:08:21.814191" elapsed="0.001409"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:21.815942" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:21.815667" elapsed="0.000335"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:21.816720" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:21.816255" elapsed="0.000492"/>
</kw>
<status status="PASS" start="2026-08-23T02:08:21.816026" elapsed="0.000756"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:21.816984" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:21.816807" elapsed="0.000234"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:21.815649" elapsed="0.001413"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:21.817098" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T02:08:21.817250" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:08:21.811479" elapsed="0.005797"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:21.817322" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:08:21.817464" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:08:21.810877" elapsed="0.006612"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:21.824914" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:21.824638" elapsed="0.000324"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:21.825355" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:21.825112" elapsed="0.000286"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:08:21.832112" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:08:21.832167" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:08:21.832273" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:08:21.827630" elapsed="0.005004">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:08:21.825463" elapsed="0.007253">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:21.832923" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:21.832750" elapsed="0.000241"/>
</branch>
<status status="FAIL" start="2026-08-23T02:08:21.825445" elapsed="0.007569">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:21.833381" elapsed="0.000025"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:21.833514" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:21.833477" elapsed="0.000080"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:21.833460" elapsed="0.000119"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:21.833718" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:08:21.833794" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:08:21.820258" elapsed="0.013659">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:21.833990" elapsed="0.000016"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:08:21.817764" elapsed="0.016323">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:21.834253" elapsed="0.000021"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:08:21.798307" elapsed="0.036055">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:22.852717" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:22.850551" elapsed="0.002260"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:22.853553" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:22.853204" elapsed="0.000377"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:08:22.853049" elapsed="0.000572"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:22.854203" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:22.853871" elapsed="0.000359"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:08:22.853707" elapsed="0.000559"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:08:22.852898" elapsed="0.001397"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:22.854638" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:22.854379" elapsed="0.000319"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:22.855447" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:22.854977" elapsed="0.000498"/>
</kw>
<status status="PASS" start="2026-08-23T02:08:22.854723" elapsed="0.000788"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:22.855699" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:22.855538" elapsed="0.000217"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:22.854347" elapsed="0.001429"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:22.855814" elapsed="0.000065"/>
</return>
<msg time="2026-08-23T02:08:22.856009" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:08:22.850073" elapsed="0.005963"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:22.856083" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:08:22.856227" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:08:22.849285" elapsed="0.006968"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:22.863717" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:22.863457" elapsed="0.000307"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:22.864181" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:22.863935" elapsed="0.000290"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:08:22.871300" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:08:22.871356" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:08:22.871465" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:08:22.866430" elapsed="0.005435">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:08:22.864291" elapsed="0.007659">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:22.872137" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:22.871985" elapsed="0.000275"/>
</branch>
<status status="FAIL" start="2026-08-23T02:08:22.864273" elapsed="0.008014">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:22.872668" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:22.872803" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:22.872765" elapsed="0.000099"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:22.872747" elapsed="0.000141"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:22.873030" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:08:22.873102" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:08:22.859013" elapsed="0.014197">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:22.873282" elapsed="0.000017"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:08:22.856476" elapsed="0.016904">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:22.873579" elapsed="0.000023"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:08:22.835117" elapsed="0.038576">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:23.893601" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:23.890812" elapsed="0.002824"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:23.894373" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:23.894042" elapsed="0.000373"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:08:23.893882" elapsed="0.000571"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:23.895074" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:23.894719" elapsed="0.000381"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:08:23.894551" elapsed="0.000585"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:08:23.893711" elapsed="0.001454"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:23.895508" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:23.895242" elapsed="0.000324"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:23.896382" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:23.895818" elapsed="0.000592"/>
</kw>
<status status="PASS" start="2026-08-23T02:08:23.895591" elapsed="0.000856"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:23.896636" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:23.896473" elapsed="0.000219"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:23.895221" elapsed="0.001492"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:23.896752" elapsed="0.000039"/>
</return>
<msg time="2026-08-23T02:08:23.896936" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:08:23.890146" elapsed="0.006817"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:23.897011" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:08:23.897154" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:08:23.889320" elapsed="0.007860"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:23.904643" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:23.904382" elapsed="0.000309"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:23.905104" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:23.904857" elapsed="0.000291"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:08:23.911697" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:08:23.911757" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:08:23.911892" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:08:23.907263" elapsed="0.005051">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:08:23.905213" elapsed="0.007186">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:23.912583" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:23.912434" elapsed="0.000213"/>
</branch>
<status status="FAIL" start="2026-08-23T02:08:23.905195" elapsed="0.007476">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:23.913066" elapsed="0.000025"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:23.913199" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:23.913162" elapsed="0.000077"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:23.913144" elapsed="0.000117"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:23.913401" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:08:23.913470" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:08:23.900012" elapsed="0.013563">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:23.913644" elapsed="0.000015"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:08:23.897520" elapsed="0.016218">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:23.913921" elapsed="0.000022"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:08:23.874885" elapsed="0.039146">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:24.930666" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:24.928482" elapsed="0.002217"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:24.931484" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:24.931084" elapsed="0.000428"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:08:24.930928" elapsed="0.000622"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:24.932128" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:24.931786" elapsed="0.000369"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:08:24.931634" elapsed="0.000557"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:08:24.930769" elapsed="0.001452"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:24.932554" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:24.932291" elapsed="0.000322"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:24.933360" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:24.932889" elapsed="0.000501"/>
</kw>
<status status="PASS" start="2026-08-23T02:08:24.932638" elapsed="0.000788"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:24.933616" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:24.933451" elapsed="0.000221"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:24.932271" elapsed="0.001423"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:24.933731" elapsed="0.000036"/>
</return>
<msg time="2026-08-23T02:08:24.933909" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:08:24.928005" elapsed="0.005931"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:24.933984" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:08:24.934129" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:08:24.927424" elapsed="0.006751"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:24.941629" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:24.941367" elapsed="0.000310"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:24.942087" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:24.941828" elapsed="0.000303"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:08:24.948796" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:08:24.948870" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:08:24.948984" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:08:24.944449" elapsed="0.004929">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:08:24.942199" elapsed="0.007262">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:24.949647" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:24.949496" elapsed="0.000217"/>
</branch>
<status status="FAIL" start="2026-08-23T02:08:24.942181" elapsed="0.007556">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:24.950205" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:24.950341" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:24.950303" elapsed="0.000087"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:24.950285" elapsed="0.000127"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:24.950594" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:08:24.950668" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:08:24.937054" elapsed="0.013720">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:24.950881" elapsed="0.000023"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:08:24.934529" elapsed="0.016489">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:24.951252" elapsed="0.000031"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:08:24.915121" elapsed="0.036284">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:25.968241" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:25.966074" elapsed="0.002201"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:25.969019" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:25.968664" elapsed="0.000383"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:08:25.968488" elapsed="0.000596"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:25.969641" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:25.969319" elapsed="0.000349"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:08:25.969167" elapsed="0.000537"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:08:25.968344" elapsed="0.001390"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:25.970085" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:25.969803" elapsed="0.000341"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:25.970881" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:25.970398" elapsed="0.000512"/>
</kw>
<status status="PASS" start="2026-08-23T02:08:25.970168" elapsed="0.000777"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:25.971137" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:25.970975" elapsed="0.000217"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:25.969784" elapsed="0.001429"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:25.971250" elapsed="0.000036"/>
</return>
<msg time="2026-08-23T02:08:25.971410" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:08:25.965584" elapsed="0.005853"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:25.971484" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:08:25.971624" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:08:25.965017" elapsed="0.006633"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:25.979237" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:25.978975" elapsed="0.000390"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:25.979771" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:25.979521" elapsed="0.000294"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:08:25.986723" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:08:25.986780" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:08:25.986915" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:08:25.981989" elapsed="0.005334">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:08:25.979904" elapsed="0.007501">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:25.987593" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:25.987441" elapsed="0.000218"/>
</branch>
<status status="FAIL" start="2026-08-23T02:08:25.979883" elapsed="0.007800">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:25.988073" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:25.988209" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:25.988170" elapsed="0.000082"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:25.988153" elapsed="0.000121"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:25.988415" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:08:25.988485" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:08:25.974549" elapsed="0.014042">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:25.988687" elapsed="0.000016"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:08:25.971887" elapsed="0.016896">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:25.988962" elapsed="0.000022"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:08:25.952294" elapsed="0.036781">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:27.000955" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:26.998808" elapsed="0.002180"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:27.001681" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:27.001357" elapsed="0.000351"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:08:27.001202" elapsed="0.000542"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:27.002401" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:27.002075" elapsed="0.000353"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:08:27.001920" elapsed="0.000544"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:08:27.001056" elapsed="0.001438"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:27.002861" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:27.002576" elapsed="0.000345"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:27.003649" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:27.003179" elapsed="0.000500"/>
</kw>
<status status="PASS" start="2026-08-23T02:08:27.002946" elapsed="0.000769"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:27.003937" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:27.003740" elapsed="0.000255"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:27.002556" elapsed="0.001461"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:27.004055" elapsed="0.000035"/>
</return>
<msg time="2026-08-23T02:08:27.004215" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:08:26.998302" elapsed="0.005940"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:27.004289" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:08:27.004434" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:08:26.997709" elapsed="0.006751"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:27.011771" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:27.011516" elapsed="0.000301"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:27.012225" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:27.011983" elapsed="0.000286"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:08:27.018720" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:08:27.018777" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:08:27.018907" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:08:27.014385" elapsed="0.004903">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:08:27.012334" elapsed="0.007039">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:27.019560" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:27.019408" elapsed="0.000216"/>
</branch>
<status status="FAIL" start="2026-08-23T02:08:27.012316" elapsed="0.007332">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:27.020048" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:27.020264" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:27.020225" elapsed="0.000082"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:27.020206" elapsed="0.000123"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:27.020472" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:08:27.020543" elapsed="0.000016"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:08:27.007178" elapsed="0.013480">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:27.020728" elapsed="0.000016"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:08:27.004688" elapsed="0.016136">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:27.021006" elapsed="0.000022"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:08:26.989580" elapsed="0.031535">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:28.037355" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:28.035196" elapsed="0.002192"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:28.038106" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:28.037758" elapsed="0.000375"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:08:28.037604" elapsed="0.000565"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:28.038715" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:28.038400" elapsed="0.000341"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:08:28.038250" elapsed="0.000526"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:08:28.037459" elapsed="0.001346"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:28.039159" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:28.038894" elapsed="0.000323"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:28.039957" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:28.039469" elapsed="0.000515"/>
</kw>
<status status="PASS" start="2026-08-23T02:08:28.039242" elapsed="0.000779"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:28.040207" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:28.040046" elapsed="0.000217"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:28.038873" elapsed="0.001438"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:28.040351" elapsed="0.000036"/>
</return>
<msg time="2026-08-23T02:08:28.040513" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:08:28.034694" elapsed="0.005846"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:28.040588" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:08:28.040732" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:08:28.034067" elapsed="0.006691"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:28.048082" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:28.047801" elapsed="0.000328"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:28.048553" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:28.048284" elapsed="0.000312"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:08:28.055513" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:08:28.055642" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:08:28.055911" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:08:28.050780" elapsed="0.006132">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:08:28.048734" elapsed="0.008395">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:28.057616" elapsed="0.000073"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:28.057215" elapsed="0.000614"/>
</branch>
<status status="FAIL" start="2026-08-23T02:08:28.048715" elapsed="0.009222">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:28.058869" elapsed="0.000085"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:28.059237" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:28.059146" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:28.059101" 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>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:28.059731" elapsed="0.000051"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:08:28.059932" elapsed="0.000041"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:08:28.043478" elapsed="0.016714">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:28.060391" elapsed="0.000039"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:08:28.040998" elapsed="0.019625">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:28.061050" elapsed="0.000051"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:08:28.022015" elapsed="0.039296">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:29.078193" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:29.076034" elapsed="0.002191"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:29.078943" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:29.078599" elapsed="0.000371"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:08:29.078440" elapsed="0.000566"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:29.079563" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:29.079242" elapsed="0.000348"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:08:29.079090" elapsed="0.000618"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:08:29.078294" elapsed="0.001445"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:29.080092" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:29.079811" elapsed="0.000340"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:29.080890" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:29.080403" elapsed="0.000515"/>
</kw>
<status status="PASS" start="2026-08-23T02:08:29.080175" elapsed="0.000780"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:29.081141" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:29.080980" elapsed="0.000217"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:29.079791" elapsed="0.001426"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:29.081255" elapsed="0.000035"/>
</return>
<msg time="2026-08-23T02:08:29.081414" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:08:29.075535" elapsed="0.005906"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:29.081489" elapsed="0.000025"/>
</return>
<msg time="2026-08-23T02:08:29.081632" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:08:29.074943" elapsed="0.006715"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:29.089217" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:29.088922" elapsed="0.000343"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:29.089656" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:29.089414" elapsed="0.000285"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:08:29.096599" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:08:29.096657" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:08:29.096771" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:08:29.091964" elapsed="0.005216">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:08:29.089766" elapsed="0.007499">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:29.097455" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:29.097302" elapsed="0.000218"/>
</branch>
<status status="FAIL" start="2026-08-23T02:08:29.089747" elapsed="0.007797">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:29.097976" elapsed="0.000030"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:29.098118" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:29.098078" elapsed="0.000141"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:29.098060" elapsed="0.000184"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:29.098389" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:08:29.098461" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:08:29.084438" elapsed="0.014132">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:29.098640" elapsed="0.000015"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:08:29.081913" elapsed="0.016822">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:29.098917" elapsed="0.000022"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:08:29.062227" elapsed="0.036805">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:30.115887" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:30.113664" elapsed="0.002259"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:30.116635" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:30.116310" elapsed="0.000351"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:08:30.116150" elapsed="0.000548"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:30.117265" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:30.116945" elapsed="0.000346"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:08:30.116781" elapsed="0.000546"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:08:30.115999" elapsed="0.001358"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:30.117691" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:30.117431" elapsed="0.000316"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:30.118479" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:30.118014" elapsed="0.000493"/>
</kw>
<status status="PASS" start="2026-08-23T02:08:30.117772" elapsed="0.000771"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:30.118727" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:30.118567" elapsed="0.000214"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:30.117410" elapsed="0.001392"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:30.118856" elapsed="0.000038"/>
</return>
<msg time="2026-08-23T02:08:30.119023" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:08:30.113182" elapsed="0.005867"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:30.119096" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:08:30.119245" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:08:30.112482" elapsed="0.006788"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:30.126598" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:30.126343" elapsed="0.000301"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:30.127051" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:30.126793" elapsed="0.000301"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:08:30.133809" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:08:30.133886" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:08:30.134001" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:08:30.129239" elapsed="0.005145">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:08:30.127161" elapsed="0.007305">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:30.134652" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:30.134500" elapsed="0.000217"/>
</branch>
<status status="FAIL" start="2026-08-23T02:08:30.127143" elapsed="0.007598">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:30.135150" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:30.135285" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:30.135247" elapsed="0.000080"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:30.135230" elapsed="0.000119"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:30.135521" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:08:30.135593" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:08:30.122047" elapsed="0.013654">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:30.135771" elapsed="0.000016"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:08:30.119535" elapsed="0.016350">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:30.136084" elapsed="0.000029"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:08:30.099931" elapsed="0.036303">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:31.152890" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:31.150712" elapsed="0.002212"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:31.153642" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:31.153311" elapsed="0.000358"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:08:31.153151" elapsed="0.000555"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:31.154282" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:31.153955" elapsed="0.000354"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:08:31.153788" elapsed="0.000557"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:08:31.152991" elapsed="0.001443"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:31.154777" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:31.154516" elapsed="0.000334"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:31.155580" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:31.155109" elapsed="0.000499"/>
</kw>
<status status="PASS" start="2026-08-23T02:08:31.154878" elapsed="0.000766"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:31.155830" elapsed="0.000043"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:31.155670" elapsed="0.000240"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:31.154496" elapsed="0.001435"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:31.155968" elapsed="0.000035"/>
</return>
<msg time="2026-08-23T02:08:31.156127" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:08:31.150241" elapsed="0.005913"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:31.156201" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:08:31.156346" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:08:31.149646" elapsed="0.006726"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:31.163676" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:31.163419" elapsed="0.000304"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:31.164132" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:31.163888" elapsed="0.000287"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:08:31.172989" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:08:31.173059" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:08:31.173202" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:08:31.168315" elapsed="0.005313">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:08:31.164240" elapsed="0.009481">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:31.173959" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:31.173759" elapsed="0.000268"/>
</branch>
<status status="FAIL" start="2026-08-23T02:08:31.164222" elapsed="0.009833">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:31.174495" elapsed="0.000027"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:31.174638" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:31.174597" elapsed="0.000085"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:31.174577" elapsed="0.000127"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:31.174862" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:08:31.175002" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:08:31.159071" elapsed="0.016042">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:31.175183" elapsed="0.000016"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:08:31.156592" elapsed="0.018687">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:31.175446" elapsed="0.000022"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:08:31.137151" elapsed="0.038407">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:32.193562" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:32.191367" elapsed="0.002229"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:32.194357" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:32.194021" elapsed="0.000364"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:08:32.193829" elapsed="0.000592"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:32.195013" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:32.194659" elapsed="0.000382"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:08:32.194506" elapsed="0.000577"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:08:32.193671" elapsed="0.001450"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:32.195481" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:32.195212" elapsed="0.000327"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:32.196345" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:32.195808" elapsed="0.000568"/>
</kw>
<status status="PASS" start="2026-08-23T02:08:32.195565" elapsed="0.000847"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:32.196602" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:32.196438" elapsed="0.000220"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:32.195187" elapsed="0.001491"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:32.196724" elapsed="0.000046"/>
</return>
<msg time="2026-08-23T02:08:32.196919" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:08:32.190769" elapsed="0.006178"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:32.196995" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:08:32.197139" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:08:32.189904" elapsed="0.007261"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:32.205055" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:32.204756" elapsed="0.000456"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:32.205624" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:32.205371" elapsed="0.000297"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:08:32.213070" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:08:32.213197" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:08:32.213315" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:08:32.207862" elapsed="0.005859">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:08:32.205736" elapsed="0.008069">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:32.214045" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:32.213863" elapsed="0.000254"/>
</branch>
<status status="FAIL" start="2026-08-23T02:08:32.205716" elapsed="0.008426">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:32.214521" elapsed="0.000027"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:32.214658" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:32.214618" elapsed="0.000084"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:32.214601" elapsed="0.000123"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:32.214902" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:08:32.214975" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:08:32.200263" elapsed="0.014837">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:32.215209" elapsed="0.000024"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:08:32.197387" elapsed="0.017958">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:32.215576" elapsed="0.000030"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:08:32.176468" elapsed="0.039259">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:33.234677" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:33.232264" elapsed="0.002445"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:33.235459" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:33.235096" elapsed="0.000390"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:08:33.234936" elapsed="0.000586"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:33.236092" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:33.235753" elapsed="0.000366"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:08:33.235603" elapsed="0.000552"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:08:33.234776" elapsed="0.001408"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:33.236517" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:33.236253" elapsed="0.000392"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:33.237398" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:33.236923" elapsed="0.000504"/>
</kw>
<status status="PASS" start="2026-08-23T02:08:33.236673" elapsed="0.000791"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:33.237649" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:33.237489" elapsed="0.000216"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:33.236233" elapsed="0.001493"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:33.237764" elapsed="0.000037"/>
</return>
<msg time="2026-08-23T02:08:33.237941" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:08:33.231764" elapsed="0.006204"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:33.238016" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:08:33.238164" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:08:33.231184" elapsed="0.007006"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:33.245525" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:33.245267" elapsed="0.000305"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:33.245983" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:33.245722" elapsed="0.000306"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:08:33.252464" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:08:33.252522" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:08:33.252636" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:08:33.248156" elapsed="0.004892">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:08:33.246094" elapsed="0.007069">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:33.253420" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:33.253210" elapsed="0.000300"/>
</branch>
<status status="FAIL" start="2026-08-23T02:08:33.246076" elapsed="0.007467">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:33.254075" elapsed="0.000039"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:33.254264" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:33.254212" elapsed="0.000111"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:33.254188" elapsed="0.000165"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:33.254553" elapsed="0.000046"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:08:33.254668" elapsed="0.000022"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:08:33.240924" elapsed="0.013897">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:33.255022" elapsed="0.000024"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:08:33.238416" elapsed="0.016785">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:33.255447" elapsed="0.000030"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:08:33.216604" elapsed="0.038998">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<msg time="2026-08-23T02:08:33.255740" level="FAIL">Keyword 'Check_Device_Connected' failed after retrying for 20 seconds. The last error was: HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${timeout}</arg>
<arg>${period}</arg>
<arg>Check_Device_Connected</arg>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-08-23T02:08:12.455661" elapsed="20.800259">Keyword 'Check_Device_Connected' failed after retrying for 20 seconds. The last error was: HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<arg>${device_name}</arg>
<doc>Wait for the device to become connected.
It is more readable to use this keyword in a test case than to put the whole WUKS below into it.</doc>
<status status="FAIL" start="2026-08-23T02:08:12.455237" elapsed="20.800839">Keyword 'Check_Device_Connected' failed after retrying for 20 seconds. The last error was: HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<doc>Wait until the device becomes available through Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:08:12.373247" elapsed="20.883047">Keyword 'Check_Device_Connected' failed after retrying for 20 seconds. The last error was: HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</test>
<test id="s1-s4-s1-t6" name="Check_Device_Data_Is_Empty" line="80">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-08-23T02:08:33.261245" elapsed="0.000320"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:08:33.260877" elapsed="0.000765"/>
</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-08-23T02:08:33.263073" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:33.262902" elapsed="0.000275"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:33.262873" elapsed="0.000339"/>
</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-08-23T02:08:33.268469" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:33.268361" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:33.268342" elapsed="0.000204"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:08:33.269562" 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-08-23T02:08:33.269171" elapsed="0.000418"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:08:33.270062" 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-08-23T02:08:33.269748" elapsed="0.000341"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:08:33.270136" elapsed="0.000041"/>
</return>
<msg time="2026-08-23T02:08:33.270303" 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-08-23T02:08:33.268773" elapsed="0.001555"/>
</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-08-23T02:08:33.275811" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:33.275703" elapsed="0.000170"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:33.275684" elapsed="0.000211"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:08:33.277165" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:33.277057" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:33.277039" elapsed="0.000196"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:08:33.277770" 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-08-23T02:08:33.277379" elapsed="0.000418"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:08:33.278293" 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-08-23T02:08:33.278026" elapsed="0.000293"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:08:33.311722" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:08:33.278897" elapsed="0.033138"/>
</kw>
<msg time="2026-08-23T02:08:33.312308" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:08:33.312360" 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 "n "e "t "c "o "n "f "...</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-08-23T02:08:33.278477" elapsed="0.033923"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:08:33.332525" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "I "s "_ "E "m "p "t "y "[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-08-23T02:08:33.313304" elapsed="0.019479"/>
</kw>
<msg time="2026-08-23T02:08:33.333053" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:08:33.333118" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "D "a ...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:08:33.312689" elapsed="0.020482"/>
</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-08-23T02:08:33.333663" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:33.333302" elapsed="0.000471"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:33.333261" elapsed="0.000555"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:33.334618" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "I "s "_ "E "m "p "t "y "[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-08-23T02:08:33.334045" elapsed="0.000674"/>
</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-08-23T02:08:33.335143" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:33.334817" elapsed="0.000476"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:33.334790" elapsed="0.000541"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:08:33.335389" elapsed="0.000060"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-23T02:08:33.339397" elapsed="0.000161"/>
</kw>
<msg time="2026-08-23T02:08:33.339637" 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-08-23T02:08:33.338534" elapsed="0.001218"/>
</kw>
<kw name="Open 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-08-23T02:08:33.341045" elapsed="0.000048"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:33.342294" elapsed="0.000044"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:08:33.336555" elapsed="0.005872"/>
</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-08-23T02:08:33.335775" elapsed="0.006782"/>
</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-08-23T02:08:33.276728" elapsed="0.065935"/>
</kw>
<msg time="2026-08-23T02:08:33.342763" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:08:33.342809" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "D "a ...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:08:33.276047" elapsed="0.066854"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:08:33.343118" elapsed="0.000039"/>
</return>
<status status="PASS" start="2026-08-23T02:08:33.342987" elapsed="0.000222"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:33.342965" elapsed="0.000308"/>
</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-08-23T02:08:33.343704" 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-08-23T02:08:33.344424" elapsed="0.000030"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:08:33.344514" elapsed="0.000020"/>
</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-08-23T02:08:33.275367" elapsed="0.069327"/>
</kw>
<msg time="2026-08-23T02:08:33.344793" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:08:33.344869" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "D "a ...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:08:33.270701" elapsed="0.074222"/>
</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-08-23T02:08:33.345357" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:33.345034" elapsed="0.000385"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:33.345007" elapsed="0.000438"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:08:33.270558" elapsed="0.074912"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:08:33.270383" elapsed="0.075129"/>
</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-08-23T02:08:33.267996" elapsed="0.077587"/>
</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-08-23T02:08:33.262478" elapsed="0.083174"/>
</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-08-23T02:08:33.261874" elapsed="0.083838"/>
</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-08-23T02:08:33.257551" elapsed="0.088220"/>
</kw>
<kw name="Regexp Escape" owner="BuiltIn">
<msg time="2026-08-23T02:08:33.346341" level="INFO">${escaped} = urn:ietf:params:xml:ns:netconf:base:1\.0</msg>
<var>${escaped}</var>
<arg>${ODL_NETCONF_NAMESPACE}</arg>
<doc>Returns each argument escaped for use as a regular expression.</doc>
<status status="PASS" start="2026-08-23T02:08:33.345977" elapsed="0.000391"/>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:33.347901" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:33.347494" elapsed="0.000435"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:33.355750" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:33.355490" elapsed="0.000309"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:33.356267" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:33.356007" elapsed="0.000307"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:08:33.364028" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:08:33.364079" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:08:33.364190" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:08:33.358723" elapsed="0.005884">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:08:33.356383" elapsed="0.008314">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:33.364907" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:33.364733" elapsed="0.000244"/>
</branch>
<status status="FAIL" start="2026-08-23T02:08:33.356364" elapsed="0.008637">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:33.365394" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:33.365531" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:33.365492" elapsed="0.000083"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:33.365475" elapsed="0.000122"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:33.365788" elapsed="0.000024"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:08:33.365881" elapsed="0.000017"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:08:33.350913" elapsed="0.015082">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:33.366067" elapsed="0.000016"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:08:33.348144" elapsed="0.018020">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:08:33.366220" elapsed="0.000015"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:08:33.347178" elapsed="0.019136">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:33.366536" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:33.366388" elapsed="0.000205"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:33.366761" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:33.366618" elapsed="0.000198"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:33.366997" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:33.366856" elapsed="0.000196"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:33.366371" elapsed="0.000703"/>
</if>
<arg>&lt;data xmlns\="${escaped}"(\/&gt;|&gt;&lt;\/data&gt;)</arg>
<arg>${True}</arg>
<status status="FAIL" start="2026-08-23T02:08:33.346634" elapsed="0.020518">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<doc>Get the device data and make sure it is empty.</doc>
<status status="FAIL" start="2026-08-23T02:08:33.256815" elapsed="0.110558">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</test>
<test id="s1-s4-s1-t7" name="Create_Device_Data_Label_Via_Xml" line="85">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-08-23T02:08:33.372195" elapsed="0.000414"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:08:33.371709" elapsed="0.001002"/>
</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-08-23T02:08:33.374243" elapsed="0.000028"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:33.374064" elapsed="0.000264"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:33.374037" elapsed="0.000333"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:08:33.380392" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:33.380282" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:33.380263" elapsed="0.000198"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:08:33.381492" 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-08-23T02:08:33.381091" elapsed="0.000429"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:08:33.381997" 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-08-23T02:08:33.381679" elapsed="0.000345"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:08:33.382070" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T02:08:33.382231" 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-08-23T02:08:33.380689" elapsed="0.001567"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:08:33.387832" elapsed="0.000030"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:33.387718" elapsed="0.000178"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:33.387697" elapsed="0.000221"/>
</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-08-23T02:08:33.389184" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:33.389074" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:33.389056" elapsed="0.000197"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:08:33.389860" 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-08-23T02:08:33.389444" elapsed="0.000445"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:08:33.390318" 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-08-23T02:08:33.390049" elapsed="0.000295"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:08:33.424719" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:08:33.390935" elapsed="0.033991"/>
</kw>
<msg time="2026-08-23T02:08:33.425110" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:08:33.425157" 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 "n "e "t "c "o "n "f "...</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-08-23T02:08:33.390503" elapsed="0.034692"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:08:33.444362" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "r "e "a "t "e "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "L "a "b "e "l "_ "V "i "a "_ "X "m "l "[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-08-23T02:08:33.425769" elapsed="0.018786"/>
</kw>
<msg time="2026-08-23T02:08:33.444735" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:08:33.444780" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "r "e "a "t "e "_ "D "e "v "i "c "e "_ "D ...</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-08-23T02:08:33.425366" elapsed="0.019452"/>
</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-08-23T02:08:33.445143" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:33.444919" elapsed="0.000304"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:33.444898" elapsed="0.000351"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:33.445786" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "r "e "a "t "e "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "L "a "b "e "l "_ "V "i "a "_ "X "m "l "[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-08-23T02:08:33.445392" elapsed="0.000483"/>
</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-08-23T02:08:33.446157" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:33.445943" elapsed="0.000292"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:33.445925" elapsed="0.000335"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:08:33.446294" 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-08-23T02:08:33.449626" elapsed="0.000146"/>
</kw>
<msg time="2026-08-23T02:08:33.449886" 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-08-23T02:08:33.448929" elapsed="0.001064"/>
</kw>
<kw name="Open 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-08-23T02:08:33.451072" elapsed="0.000175"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:33.452331" elapsed="0.000040"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:08:33.447189" elapsed="0.005265"/>
</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-08-23T02:08:33.446566" elapsed="0.006015"/>
</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-08-23T02:08:33.388743" elapsed="0.063937"/>
</kw>
<msg time="2026-08-23T02:08:33.452771" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:08:33.452816" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "r "e "a "t "e "_ "D "e "v "i "c "e "_ "D ...</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-08-23T02:08:33.388070" elapsed="0.065103"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:08:33.453364" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:08:33.453255" elapsed="0.000170"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:33.453236" 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-08-23T02:08:33.453870" 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-08-23T02:08:33.454248" elapsed="0.000026"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:08:33.454322" 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-08-23T02:08:33.387360" elapsed="0.067071"/>
</kw>
<msg time="2026-08-23T02:08:33.454525" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:08:33.454569" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "r "e "a "t "e "_ "D "e "v "i "c "e "_ "D ...</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-08-23T02:08:33.382637" elapsed="0.071969"/>
</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-08-23T02:08:33.455011" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:33.454680" elapsed="0.000388"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:33.454663" elapsed="0.000429"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:08:33.382493" elapsed="0.072622"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:08:33.382314" elapsed="0.072833"/>
</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-08-23T02:08:33.379912" elapsed="0.075291"/>
</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-08-23T02:08:33.373633" elapsed="0.081627"/>
</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-08-23T02:08:33.373018" elapsed="0.082287"/>
</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-08-23T02:08:33.368497" elapsed="0.086889"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:08:33.456010" level="INFO">${mapping} = {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping}</var>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-23T02:08:33.455553" elapsed="0.000484"/>
</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-08-23T02:08:33.489521" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/dataorig.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:33.489148" elapsed="0.000401"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T02:08:33.490327" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/dataorig.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-23T02:08:33.490059" elapsed="0.000341">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/dataorig.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-23T02:08:33.490494" 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-08-23T02:08:33.489710" elapsed="0.000809"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:08:33.491081" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/dataorig/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-08-23T02:08:33.490681" elapsed="0.000428"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:08:33.491414" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/dataorig/location.uri"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/dataorig/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:08:33.491572" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:08:33.491268" elapsed="0.000329"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:33.492015" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:33.491750" 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-08-23T02:08:33.493008" level="INFO">mapping: {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:33.492735" elapsed="0.000317"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:08:33.493624" 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-08-23T02:08:33.493206" elapsed="0.000444"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:08:33.494327" level="INFO">${value} = netconf-test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:08:33.494024" elapsed="0.000329"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:08:33.495179" level="INFO">${encoded} = netconf-test-device</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-08-23T02:08:33.494922" elapsed="0.000283"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:08:33.495256" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T02:08:33.495436" level="INFO">${encoded_value} = netconf-test-device</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-08-23T02:08:33.494585" elapsed="0.000877"/>
</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-08-23T02:08:33.495615" elapsed="0.000268"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:08:33.493888" elapsed="0.002038"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:08:33.496473" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:08:33.496172" elapsed="0.000327"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:08:33.497248" level="INFO">${encoded} = /rests</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-08-23T02:08:33.497013" elapsed="0.000260"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:08:33.497323" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:08:33.497472" level="INFO">${encoded_value} = /rests</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-08-23T02:08:33.496681" elapsed="0.000815"/>
</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-08-23T02:08:33.497643" elapsed="0.000245"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-23T02:08:33.496041" elapsed="0.001888"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-23T02:08:33.493698" elapsed="0.004266"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-23T02:08:33.498007" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:08:33.498168" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-23T02:08:33.492417" elapsed="0.005776"/>
</kw>
<status status="PASS" start="2026-08-23T02:08:33.492126" elapsed="0.006099"/>
</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-08-23T02:08:33.498396" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:33.498251" elapsed="0.000199"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:33.492107" elapsed="0.006364"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:08:33.499227" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount</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-08-23T02:08:33.498609" elapsed="0.000646"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T02:08:33.499304" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/dataorig.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/dataorig.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/dataorig/${file_name}.</doc>
<status status="PASS" start="2026-08-23T02:08:33.488517" elapsed="0.010924"/>
</kw>
<msg time="2026-08-23T02:08:33.499494" 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-08-23T02:08:33.475920" elapsed="0.023621"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/dataorig.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/dataorig.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/dataorig/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:33.512068" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/dataorig.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/dataorig.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/dataorig/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:33.524559" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/dataorig.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/dataorig.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/dataorig/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:33.536843" elapsed="0.000061"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:33.537073" 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-08-23T02:08:33.537244" 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-08-23T02:08:33.537603" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:33.537461" elapsed="0.000199"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:33.537446" 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-08-23T02:08:33.537820" 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-08-23T02:08:33.538002" 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-08-23T02:08:33.538164" elapsed="0.000019"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T02:08:33.537419" elapsed="0.000797"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T02:08:33.537320" 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-08-23T02:08:33.538383" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:33.538459" elapsed="0.000015"/>
</return>
<msg time="2026-08-23T02:08:33.538577" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount</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-08-23T02:08:33.471695" elapsed="0.066908"/>
</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-08-23T02:08:33.563393" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/dataorig.vanadium/post_data.xml</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:33.563020" elapsed="0.000401"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T02:08:33.564142" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/dataorig.vanadium/post_data.xml' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-23T02:08:33.563933" elapsed="0.000273">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/dataorig.vanadium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-08-23T02:08:33.564300" 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-08-23T02:08:33.563590" elapsed="0.000734"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:08:33.564883" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/dataorig/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-08-23T02:08:33.564485" elapsed="0.000427"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:08:33.565211" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/dataorig/post_data.xml"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/dataorig/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:08:33.565340" level="INFO">${template} = &lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;
&lt;l&gt;Content&lt;/l&gt;
&lt;/cont&gt;
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:08:33.565070" elapsed="0.000297"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:33.565764" level="INFO">&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;
&lt;l&gt;Content&lt;/l&gt;
&lt;/cont&gt;
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:33.565522" 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-08-23T02:08:33.566183" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:33.565898" elapsed="0.000344"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:33.566745" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</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-08-23T02:08:33.566448" elapsed="0.000324"/>
</kw>
<status status="PASS" start="2026-08-23T02:08:33.566299" elapsed="0.000508"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:33.565879" elapsed="0.000950"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:08:33.567425" level="INFO">${final_text} = &lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;
&lt;l&gt;Content&lt;/l&gt;
&lt;/cont&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-08-23T02:08:33.566990" elapsed="0.000464"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T02:08:33.567528" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/dataorig.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/dataorig.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/dataorig/${file_name}.</doc>
<status status="PASS" start="2026-08-23T02:08:33.562393" elapsed="0.005267"/>
</kw>
<msg time="2026-08-23T02:08:33.567712" 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-08-23T02:08:33.549819" elapsed="0.017941"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/dataorig.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/dataorig.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/dataorig/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:33.580112" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/dataorig.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/dataorig.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/dataorig/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:33.592427" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/dataorig.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/dataorig.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/dataorig/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:33.604873" 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-08-23T02:08:33.605075" 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-08-23T02:08:33.605249" 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-08-23T02:08:33.605604" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:33.605465" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:33.605450" 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-08-23T02:08:33.605819" 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-08-23T02:08:33.605998" 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-08-23T02:08:33.606158" elapsed="0.000019"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T02:08:33.605423" elapsed="0.000786"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T02:08:33.605324" 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-08-23T02:08:33.606375" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:33.606449" elapsed="0.000015"/>
</return>
<msg time="2026-08-23T02:08:33.606566" level="INFO">${data} = &lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;
&lt;l&gt;Content&lt;/l&gt;
&lt;/cont&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-08-23T02:08:33.548976" elapsed="0.057659"/>
</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-08-23T02:08:33.607989" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/dataorig/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-08-23T02:08:33.607680" elapsed="0.000376">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/dataorig/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-23T02:08:33.608153" 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-08-23T02:08:33.607317" elapsed="0.000861"/>
</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-08-23T02:08:33.608495" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:33.608249" elapsed="0.000302"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:33.609051" 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-08-23T02:08:33.608737" elapsed="0.000340"/>
</kw>
<status status="PASS" start="2026-08-23T02:08:33.608576" elapsed="0.000536"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:33.608229" elapsed="0.000905"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:08:33.611436" 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-08-23T02:08:33.609280" elapsed="0.002182"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-23T02:08:33.611524" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:08:33.611678" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/dataorig/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-23T02:08:33.606993" elapsed="0.004710"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:33.613281" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:33.613019" elapsed="0.000308"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:33.613714" level="INFO">&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;
&lt;l&gt;Content&lt;/l&gt;
&lt;/cont&gt;</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:33.613477" elapsed="0.000282"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:33.614182" 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-08-23T02:08:33.613934" elapsed="0.000292"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:33.614612" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:33.614373" elapsed="0.000281"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-08-23T02:08:33.615468" 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-08-23T02:08:33.615277" elapsed="0.000216"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-08-23T02:08:33.615859" 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-08-23T02:08:33.615669" 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-08-23T02:08:33.616031" elapsed="0.000195"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:33.616634" 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-08-23T02:08:33.616389" elapsed="0.000289"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-08-23T02:08:33.616719" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:08:33.616892" 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-08-23T02:08:33.614875" elapsed="0.002043"/>
</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-08-23T02:08:33.624357" level="INFO">POST Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Content-Length': '72', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;
&lt;l&gt;Content&lt;/l&gt;
&lt;/cont&gt; 
 </msg>
<msg time="2026-08-23T02:08:33.624430" level="INFO">POST Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:08:33.624603" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:08:33.619249" elapsed="0.005870">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-23T02:08:33.616988" elapsed="0.008246">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="POST On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:33.625489" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:33.625281" elapsed="0.000301"/>
</branch>
<status status="FAIL" start="2026-08-23T02:08:33.616971" elapsed="0.008643">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:33.626140" elapsed="0.000037"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:33.626330" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:33.626279" elapsed="0.000108"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:33.626255" elapsed="0.000162"/>
</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-08-23T02:08:33.626611" elapsed="0.000029"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:08:33.626703" elapsed="0.000020"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>content_type=${content_type}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>POST data to given URI, check status code and return response text.
${content_type} and ${accept} are mandatory Python objects with headers to use.
If ${normalize_json}, normalize text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:08:33.612045" elapsed="0.014819">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:33.626977" elapsed="0.000022"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>extension=xml</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>content_type=${HEADERS_XML}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>endline=${\n}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve URI and data from folder, call Post_To_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-23T02:08:33.460665" elapsed="0.166441">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=response</arg>
<arg>mapping=${mapping}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:33.627497" elapsed="0.000052"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:33.627257" elapsed="0.000353"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:33.627234" elapsed="0.000409"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:33.627688" elapsed="0.000020"/>
</return>
<arg>${directory_with_template_folders}${/}dataorig</arg>
<arg>${mapping}</arg>
<doc>Add arguments sensible for XML data, return Post_Templated response text.
Optionally, verification against response.xml (no iteration) is called.</doc>
<status status="FAIL" start="2026-08-23T02:08:33.456290" elapsed="0.171529">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount</status>
</kw>
<doc>Send a sample test data label into the device and check that the request went OK.</doc>
<status status="FAIL" start="2026-08-23T02:08:33.367756" elapsed="0.260288">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount</status>
</test>
<test id="s1-s4-s1-t8" name="Check_Device_Data_Label_Is_Created" line="90">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-08-23T02:08:33.632565" elapsed="0.000208"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:08:33.632303" elapsed="0.000524"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:08:33.633800" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:33.633690" elapsed="0.000170"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:33.633672" elapsed="0.000212"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:08:33.640531" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:33.640423" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:33.640404" elapsed="0.000228"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:08:33.641628" 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-08-23T02:08:33.641248" elapsed="0.000407"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:08:33.642122" 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-08-23T02:08:33.641810" elapsed="0.000339"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:08:33.642194" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:08:33.642348" 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-08-23T02:08:33.640873" 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-08-23T02:08:33.647879" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:33.647755" elapsed="0.000171"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:33.647736" 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-08-23T02:08:33.649260" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:33.649152" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:33.649133" elapsed="0.000195"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:08:33.649866" 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-08-23T02:08:33.649468" elapsed="0.000426"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:08:33.650305" 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-08-23T02:08:33.650048" elapsed="0.000282"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:08:33.689546" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:08:33.650900" elapsed="0.038825"/>
</kw>
<msg time="2026-08-23T02:08:33.689934" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:08:33.689980" 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 "n "e "t "c "o "n "f "...</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-08-23T02:08:33.650484" elapsed="0.039533"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:08:33.716054" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "L "a "b "e "l "_ "I "s "_ "C "r "e "a "t "e "d "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-08-23T02:08:33.690585" elapsed="0.025676"/>
</kw>
<msg time="2026-08-23T02:08:33.716441" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:08:33.716486" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "D "a ...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:08:33.690187" elapsed="0.026336"/>
</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-08-23T02:08:33.716817" elapsed="0.000047"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:33.716600" elapsed="0.000322"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:33.716579" elapsed="0.000369"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:33.717477" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "L "a "b "e "l "_ "I "s "_ "C "r "e "a "t "e "d "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:33.717087" elapsed="0.000461"/>
</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-08-23T02:08:33.717822" elapsed="0.000042"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:33.717613" elapsed="0.000309"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:33.717595" elapsed="0.000351"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:08:33.717980" 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-08-23T02:08:33.721314" elapsed="0.000147"/>
</kw>
<msg time="2026-08-23T02:08:33.721537" 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-08-23T02:08:33.720531" elapsed="0.001110"/>
</kw>
<kw name="Open 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-08-23T02:08:33.722792" elapsed="0.000039"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:33.724180" elapsed="0.000039"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:08:33.718863" elapsed="0.005438"/>
</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-08-23T02:08:33.718234" elapsed="0.006192"/>
</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-08-23T02:08:33.648735" elapsed="0.075789"/>
</kw>
<msg time="2026-08-23T02:08:33.724614" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:08:33.724658" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "D "a ...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:08:33.648096" elapsed="0.076598"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:08:33.725050" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-08-23T02:08:33.724770" elapsed="0.000343"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:33.724752" elapsed="0.000387"/>
</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-08-23T02:08:33.725527" 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-08-23T02:08:33.725976" elapsed="0.000027"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:08:33.726052" 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-08-23T02:08:33.647393" elapsed="0.078766"/>
</kw>
<msg time="2026-08-23T02:08:33.726251" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:08:33.726294" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "D "a ...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:08:33.642726" elapsed="0.083606"/>
</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-08-23T02:08:33.726798" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:33.726547" elapsed="0.000322"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:33.726529" elapsed="0.000364"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:08:33.642589" elapsed="0.084327"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:08:33.642423" elapsed="0.084522"/>
</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-08-23T02:08:33.640054" elapsed="0.086942"/>
</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-08-23T02:08:33.633406" elapsed="0.093644"/>
</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-08-23T02:08:33.632989" elapsed="0.094104"/>
</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-08-23T02:08:33.629259" elapsed="0.097884"/>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:33.728429" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:33.728045" elapsed="0.000411"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:33.735582" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:33.735335" elapsed="0.000293"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:33.736064" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:33.735802" elapsed="0.000307"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:08:33.742511" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:08:33.742558" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:08:33.742692" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:08:33.738237" elapsed="0.004815">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:08:33.736175" elapsed="0.006958">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:33.743317" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:33.743166" elapsed="0.000215"/>
</branch>
<status status="FAIL" start="2026-08-23T02:08:33.736157" elapsed="0.007247">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:33.743794" elapsed="0.000025"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:33.743945" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:33.743908" elapsed="0.000079"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:33.743890" elapsed="0.000118"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:33.744150" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:08:33.744220" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:08:33.731015" elapsed="0.013339">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:33.744449" elapsed="0.000022"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:08:33.728663" elapsed="0.015918">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:08:33.744654" elapsed="0.000021"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:08:33.727747" elapsed="0.017034">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:33.745104" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:33.744901" elapsed="0.000279"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:33.745404" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:33.745214" elapsed="0.000264"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:33.745694" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:33.745511" elapsed="0.000256"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:33.744877" elapsed="0.000918"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:08:33.727343" elapsed="0.018579">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<doc>Get the device data label and make sure it contains the created content.</doc>
<status status="FAIL" start="2026-08-23T02:08:33.628469" elapsed="0.117642">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</test>
<test id="s1-s4-s1-t9" name="Modify_Device_Data_Label_Via_Xml" line="95">
<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-08-23T02:08:33.750869" elapsed="0.000297"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:08:33.750487" elapsed="0.000757"/>
</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-08-23T02:08:33.752549" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:33.752439" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:33.752420" 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-08-23T02:08:33.757612" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:33.757506" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:33.757488" elapsed="0.000225"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:08:33.758711" 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-08-23T02:08:33.758331" elapsed="0.000408"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:08:33.759210" 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-08-23T02:08:33.758912" elapsed="0.000324"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:08:33.759281" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:08:33.759435" 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-08-23T02:08:33.757958" elapsed="0.001502"/>
</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-08-23T02:08:33.764890" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:33.764766" elapsed="0.000172"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:33.764747" elapsed="0.000214"/>
</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-08-23T02:08:33.766179" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:33.766067" elapsed="0.000160"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:33.766048" elapsed="0.000201"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:08:33.766772" 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-08-23T02:08:33.766391" elapsed="0.000407"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:08:33.767228" 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-08-23T02:08:33.766973" elapsed="0.000281"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:08:33.796607" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:08:33.767825" elapsed="0.028974"/>
</kw>
<msg time="2026-08-23T02:08:33.797000" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:08:33.797046" 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 "n "e "t "c "o "n "f "...</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-08-23T02:08:33.767411" elapsed="0.029672"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:08:33.829179" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "M "o "d "i "f "y "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "L "a "b "e "l "_ "V "i "a "_ "X "m "l "[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-08-23T02:08:33.797649" elapsed="0.031725"/>
</kw>
<msg time="2026-08-23T02:08:33.829554" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:08:33.829601" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "M "o "d "i "f "y "_ "D "e "v "i "c "e "_ "D ...</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-08-23T02:08:33.797255" elapsed="0.032384"/>
</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-08-23T02:08:33.829961" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:33.829715" elapsed="0.000326"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:33.829696" elapsed="0.000371"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:33.830597" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "M "o "d "i "f "y "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "L "a "b "e "l "_ "V "i "a "_ "X "m "l "[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-08-23T02:08:33.830209" elapsed="0.000458"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:33.830964" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:33.830733" elapsed="0.000310"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:33.830715" elapsed="0.000353"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:08:33.831101" 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-08-23T02:08:33.834305" elapsed="0.000142"/>
</kw>
<msg time="2026-08-23T02:08:33.834522" 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-08-23T02:08:33.833654" elapsed="0.000971"/>
</kw>
<kw name="Open 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-08-23T02:08:33.835787" elapsed="0.000041"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:33.837213" elapsed="0.000039"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:08:33.831984" elapsed="0.005351"/>
</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-08-23T02:08:33.831353" elapsed="0.006108"/>
</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-08-23T02:08:33.765742" elapsed="0.071819"/>
</kw>
<msg time="2026-08-23T02:08:33.837651" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:08:33.837696" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "M "o "d "i "f "y "_ "D "e "v "i "c "e "_ "D ...</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-08-23T02:08:33.765109" elapsed="0.072624"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:08:33.837934" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:08:33.837809" elapsed="0.000185"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:33.837790" elapsed="0.000228"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 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-08-23T02:08:33.838398" 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-08-23T02:08:33.838725" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:08:33.838797" 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-08-23T02:08:33.764433" elapsed="0.074522"/>
</kw>
<msg time="2026-08-23T02:08:33.839047" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:08:33.839091" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "M "o "d "i "f "y "_ "D "e "v "i "c "e "_ "D ...</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-08-23T02:08:33.759860" elapsed="0.079268"/>
</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-08-23T02:08:33.839449" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:33.839202" elapsed="0.000301"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:33.839184" elapsed="0.000342"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:08:33.759705" elapsed="0.079844"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:08:33.759511" elapsed="0.080066"/>
</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-08-23T02:08:33.757144" elapsed="0.082485"/>
</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-08-23T02:08:33.752089" elapsed="0.087594"/>
</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-08-23T02:08:33.751449" elapsed="0.088277"/>
</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-08-23T02:08:33.747135" elapsed="0.092666"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:08:33.840632" level="INFO">${mapping} = {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping}</var>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-23T02:08:33.840137" elapsed="0.000528"/>
</kw>
<kw name="Put_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Put_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-08-23T02:08:33.877254" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:33.876876" elapsed="0.000407"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T02:08:33.878051" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamod1.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-23T02:08:33.877776" elapsed="0.000345">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamod1.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-23T02:08:33.878217" 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-08-23T02:08:33.877446" elapsed="0.000795"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:08:33.878867" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1/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-08-23T02:08:33.878415" elapsed="0.000481"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:08:33.879198" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamod1/location.uri"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamod1/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:08:33.879349" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount/test:cont
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:08:33.879057" elapsed="0.000318"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:33.879772" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount/test:cont
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:33.879528" elapsed="0.000344"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:33.880813" level="INFO">mapping: {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:33.880557" elapsed="0.000318"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:08:33.881294" 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-08-23T02:08:33.881031" elapsed="0.000289"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:08:33.881984" level="INFO">${value} = netconf-test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:08:33.881670" elapsed="0.000340"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:08:33.882760" level="INFO">${encoded} = netconf-test-device</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-08-23T02:08:33.882508" elapsed="0.000277"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:08:33.882858" elapsed="0.000033"/>
</return>
<msg time="2026-08-23T02:08:33.883017" level="INFO">${encoded_value} = netconf-test-device</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-08-23T02:08:33.882194" elapsed="0.000848"/>
</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-08-23T02:08:33.883190" elapsed="0.000233"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:08:33.881536" elapsed="0.001926"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:08:33.884036" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:08:33.883706" elapsed="0.000356"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:08:33.884792" level="INFO">${encoded} = /rests</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-08-23T02:08:33.884555" elapsed="0.000262"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:08:33.884890" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T02:08:33.885044" level="INFO">${encoded_value} = /rests</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-08-23T02:08:33.884242" 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-08-23T02:08:33.885217" elapsed="0.000223"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-23T02:08:33.883576" elapsed="0.001905"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-23T02:08:33.881369" elapsed="0.004148"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-23T02:08:33.885560" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:08:33.885717" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-23T02:08:33.880236" elapsed="0.005507"/>
</kw>
<status status="PASS" start="2026-08-23T02:08:33.879945" elapsed="0.005830"/>
</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-08-23T02:08:33.885969" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:33.885802" elapsed="0.000225"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:33.879923" elapsed="0.006125"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:08:33.886775" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</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-08-23T02:08:33.886190" elapsed="0.000612"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T02:08:33.886876" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1/${file_name}.</doc>
<status status="PASS" start="2026-08-23T02:08:33.876247" elapsed="0.010755"/>
</kw>
<msg time="2026-08-23T02:08:33.887090" 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-08-23T02:08:33.863583" elapsed="0.023558"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:33.899786" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:33.912487" elapsed="0.000034"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:33.924936" 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-08-23T02:08:33.925126" 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-08-23T02:08:33.925296" 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-08-23T02:08:33.925654" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:33.925514" elapsed="0.000196"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:33.925498" 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-08-23T02:08:33.925885" 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-08-23T02:08:33.926051" 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-08-23T02:08:33.926218" elapsed="0.000064"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T02:08:33.925470" elapsed="0.000849"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T02:08:33.925370" elapsed="0.000976"/>
</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-08-23T02:08:33.926490" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:33.926565" elapsed="0.000016"/>
</return>
<msg time="2026-08-23T02:08:33.926683" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</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-08-23T02:08:33.859059" elapsed="0.067651"/>
</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-08-23T02:08:33.953322" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1.vanadium/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-08-23T02:08:33.952949" elapsed="0.000402"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T02:08:33.954073" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamod1.vanadium/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-08-23T02:08:33.953848" elapsed="0.000305">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamod1.vanadium/data.xml' does not exist.</status>
</kw>
<msg time="2026-08-23T02:08:33.954313" 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-08-23T02:08:33.953508" elapsed="0.000830"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:08:33.954902" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1/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-08-23T02:08:33.954500" elapsed="0.000429"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:08:33.955255" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamod1/data.xml"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamod1/data.xml&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:08:33.955391" level="INFO">${template} = &lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;
&lt;l&gt;Modified Content&lt;/l&gt;
&lt;/cont&gt;
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:08:33.955094" elapsed="0.000324"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:33.955817" level="INFO">&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;
&lt;l&gt;Modified Content&lt;/l&gt;
&lt;/cont&gt;
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:33.955573" elapsed="0.000315"/>
</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-08-23T02:08:33.956247" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:33.955956" elapsed="0.000350"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:33.956768" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</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-08-23T02:08:33.956474" elapsed="0.000320"/>
</kw>
<status status="PASS" start="2026-08-23T02:08:33.956332" elapsed="0.000498"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:33.955937" elapsed="0.000932"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:08:33.957456" level="INFO">${final_text} = &lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;
&lt;l&gt;Modified Content&lt;/l&gt;
&lt;/cont&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-08-23T02:08:33.957013" elapsed="0.000472"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T02:08:33.957535" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1/${file_name}.</doc>
<status status="PASS" start="2026-08-23T02:08:33.952322" elapsed="0.005338"/>
</kw>
<msg time="2026-08-23T02:08:33.957712" 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-08-23T02:08:33.939497" elapsed="0.018262"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:33.970626" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:33.983006" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:33.995322" 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-08-23T02:08:33.995511" 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-08-23T02:08:33.995718" 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-08-23T02:08:33.996123" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:33.995981" elapsed="0.000198"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:33.995966" 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-08-23T02:08:33.996346" 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-08-23T02:08:33.996509" 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-08-23T02:08:33.996670" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T02:08:33.995935" elapsed="0.000787"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T02:08:33.995794" 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-08-23T02:08:33.996903" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:33.996980" elapsed="0.000015"/>
</return>
<msg time="2026-08-23T02:08:33.997097" level="INFO">${data} = &lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;
&lt;l&gt;Modified Content&lt;/l&gt;
&lt;/cont&gt;</msg>
<var>${data}</var>
<arg>folder=${folder}</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-08-23T02:08:33.936819" elapsed="0.060306"/>
</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-08-23T02:08:33.998373" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamod1/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-08-23T02:08:33.998125" elapsed="0.000312">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamod1/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-23T02:08:33.998529" 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-08-23T02:08:33.997770" 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-08-23T02:08:33.998877" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:33.998622" elapsed="0.000314"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:33.999431" 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-08-23T02:08:33.999137" elapsed="0.000320"/>
</kw>
<status status="PASS" start="2026-08-23T02:08:33.998960" elapsed="0.000532"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:33.998605" elapsed="0.000909"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:08:34.001890" 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-08-23T02:08:33.999661" elapsed="0.002256"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-23T02:08:34.001969" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:08:34.002123" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-23T02:08:33.997450" elapsed="0.004697"/>
</kw>
<kw name="Put_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:34.003522" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:34.003275" elapsed="0.000293"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:34.003995" level="INFO">&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;
&lt;l&gt;Modified Content&lt;/l&gt;
&lt;/cont&gt;</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:34.003715" elapsed="0.000327"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:34.004476" 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-08-23T02:08:34.004217" elapsed="0.000303"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:34.004924" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:34.004667" elapsed="0.000300"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-08-23T02:08:34.005795" 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-08-23T02:08:34.005561" elapsed="0.000288"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-08-23T02:08:34.006219" 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-08-23T02:08:34.006042" 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-08-23T02:08:34.006395" elapsed="0.000197"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:34.007010" 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-08-23T02:08:34.006743" elapsed="0.000312"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-08-23T02:08:34.007098" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:08:34.007254" 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-08-23T02:08:34.005165" elapsed="0.002114"/>
</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-08-23T02:08:34.014736" level="INFO">PUT Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Content-Length': '81', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;
&lt;l&gt;Modified Content&lt;/l&gt;
&lt;/cont&gt; 
 </msg>
<msg time="2026-08-23T02:08:34.014788" level="INFO">PUT Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont 
 status=404, reason=Not Found 
 headers={'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:08:34.014912" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</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-08-23T02:08:34.009591" elapsed="0.005686">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</status>
</kw>
<status status="FAIL" start="2026-08-23T02:08:34.007348" elapsed="0.008014">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</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-08-23T02:08:34.015548" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:34.015396" elapsed="0.000219"/>
</branch>
<status status="FAIL" start="2026-08-23T02:08:34.007330" elapsed="0.008308">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</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-08-23T02:08:34.016046" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:34.016181" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:34.016145" elapsed="0.000077"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:34.016125" elapsed="0.000119"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:34.016384" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:08:34.016450" elapsed="0.000014"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>content_type=${content_type}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</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-08-23T02:08:34.002475" elapsed="0.014078">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:34.016625" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>extension=xml</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>content_type=${HEADERS_XML}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>endline=${\n}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve URI and data from folder, call Put_To_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-23T02:08:33.846322" elapsed="0.170395">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=response</arg>
<arg>mapping=${mapping}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:34.017012" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:34.016820" elapsed="0.000262"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:34.016804" elapsed="0.000301"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:34.017173" elapsed="0.000016"/>
</return>
<arg>${directory_with_template_folders}${/}datamod1</arg>
<arg>${mapping}</arg>
<doc>Add arguments sensible for XML data, return Put_Templated response text.
Optionally, verification against response.xml (no iteration) is called.</doc>
<status status="FAIL" start="2026-08-23T02:08:33.840989" elapsed="0.176281">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</status>
</kw>
<doc>Send a request to change the sample test data label and check that the request went OK.</doc>
<status status="FAIL" start="2026-08-23T02:08:33.746382" elapsed="0.271036">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</status>
</test>
<test id="s1-s4-s1-t10" name="Check_Device_Data_Label_Is_Modified" line="100">
<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-08-23T02:08:34.020793" elapsed="0.000234"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:08:34.020533" elapsed="0.000549"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:08:34.022063" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:34.021954" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:34.021935" 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-08-23T02:08:34.027118" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:34.027011" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:34.026993" elapsed="0.000193"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:08:34.028185" 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-08-23T02:08:34.027776" elapsed="0.000436"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:08:34.028661" 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-08-23T02:08:34.028368" elapsed="0.000318"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:08:34.028731" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:08:34.028904" 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-08-23T02:08:34.027404" elapsed="0.001526"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:08:34.034649" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:34.034540" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:34.034521" elapsed="0.000197"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:08:34.035980" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:34.035857" elapsed="0.000171"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:34.035817" elapsed="0.000233"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:08:34.036579" 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-08-23T02:08:34.036193" elapsed="0.000412"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:08:34.037044" 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-08-23T02:08:34.036761" elapsed="0.000309"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:08:34.072096" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:08:34.037755" elapsed="0.034517"/>
</kw>
<msg time="2026-08-23T02:08:34.072453" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:08:34.072500" 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 "n "e "t "c "o "n "f "...</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-08-23T02:08:34.037356" elapsed="0.035181"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:08:34.094512" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "L "a "b "e "l "_ "I "s "_ "M "o "d "i "f "i "e "d "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-08-23T02:08:34.073124" elapsed="0.021580"/>
</kw>
<msg time="2026-08-23T02:08:34.094912" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:08:34.094959" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "D "a ...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:08:34.072705" elapsed="0.022291"/>
</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-08-23T02:08:34.095330" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:34.095073" elapsed="0.000338"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:34.095054" elapsed="0.000383"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:34.095983" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "L "a "b "e "l "_ "I "s "_ "M "o "d "i "f "i "e "d "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:34.095576" elapsed="0.000505"/>
</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-08-23T02:08:34.096376" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:34.096153" elapsed="0.000300"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:34.096135" elapsed="0.000343"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:08:34.096512" 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-08-23T02:08:34.099784" elapsed="0.000179"/>
</kw>
<msg time="2026-08-23T02:08:34.100052" 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-08-23T02:08:34.099101" elapsed="0.001055"/>
</kw>
<kw name="Open 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-08-23T02:08:34.101249" elapsed="0.000040"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:34.102578" elapsed="0.000039"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:08:34.097390" elapsed="0.005308"/>
</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-08-23T02:08:34.096773" elapsed="0.006052"/>
</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-08-23T02:08:34.035534" elapsed="0.067408"/>
</kw>
<msg time="2026-08-23T02:08:34.103033" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:08:34.103076" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "D "a ...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:08:34.034885" elapsed="0.068228"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:08:34.103301" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:08:34.103194" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:34.103174" 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-08-23T02:08:34.103772" 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-08-23T02:08:34.104241" elapsed="0.000026"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:08:34.104315" 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-08-23T02:08:34.034203" elapsed="0.070220"/>
</kw>
<msg time="2026-08-23T02:08:34.104516" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:08:34.104561" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "D "a ...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:08:34.029287" elapsed="0.075309"/>
</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-08-23T02:08:34.104933" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:34.104670" elapsed="0.000318"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:34.104653" elapsed="0.000358"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:08:34.029149" elapsed="0.075885"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:08:34.028981" elapsed="0.076082"/>
</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-08-23T02:08:34.026639" elapsed="0.078476"/>
</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-08-23T02:08:34.021649" elapsed="0.083522"/>
</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-08-23T02:08:34.021234" elapsed="0.083984"/>
</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-08-23T02:08:34.018402" elapsed="0.086870"/>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:34.106676" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:34.106294" elapsed="0.000410"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:34.114343" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:34.114081" elapsed="0.000310"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:34.114786" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:34.114542" elapsed="0.000288"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:08:34.120907" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:08:34.120955" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:08:34.121046" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:08:34.117018" elapsed="0.004403">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:08:34.114914" elapsed="0.006588">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:34.121684" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:34.121536" elapsed="0.000214"/>
</branch>
<status status="FAIL" start="2026-08-23T02:08:34.114895" elapsed="0.006878">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:34.122145" elapsed="0.000027"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:34.122283" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:34.122246" elapsed="0.000078"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:34.122229" elapsed="0.000117"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:34.122485" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:08:34.122555" elapsed="0.000014"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:08:34.109525" elapsed="0.013133">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:34.122728" elapsed="0.000016"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:08:34.106928" elapsed="0.015895">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:08:34.122895" elapsed="0.000016"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:08:34.105979" elapsed="0.017010">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:34.123213" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:34.123060" elapsed="0.000208"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:34.123431" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:34.123292" elapsed="0.000194"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:34.123643" elapsed="0.000058"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:34.123509" elapsed="0.000232"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:34.123044" elapsed="0.000718"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:08:34.105511" elapsed="0.018345">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<doc>Get the device data label and make sure it contains the modified content.</doc>
<status status="FAIL" start="2026-08-23T02:08:34.017778" elapsed="0.106214">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</test>
<test id="s1-s4-s1-t11" name="Deconfigure_Device_From_Netconf_Temporarily" 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-08-23T02:08:34.127662" elapsed="0.000225"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:08:34.127405" elapsed="0.000537"/>
</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-08-23T02:08:34.128967" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:34.128854" elapsed="0.000160"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:34.128818" elapsed="0.000217"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:08:34.134152" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:34.134039" elapsed="0.000160"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:34.134021" elapsed="0.000199"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:08:34.135241" 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-08-23T02:08:34.134862" elapsed="0.000406"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:08:34.135715" 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-08-23T02:08:34.135424" elapsed="0.000317"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:08:34.135786" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:08:34.135957" 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-08-23T02:08:34.134473" elapsed="0.001509"/>
</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-08-23T02:08:34.141570" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:34.141462" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:34.141443" 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-08-23T02:08:34.143046" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:34.142938" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:34.142919" elapsed="0.000196"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:08:34.143637" 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-08-23T02:08:34.143256" elapsed="0.000408"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:08:34.144123" 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-08-23T02:08:34.143819" elapsed="0.000337"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:08:34.175257" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:08:34.144732" elapsed="0.030714"/>
</kw>
<msg time="2026-08-23T02:08:34.175628" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:08:34.175674" 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 "n "e "t "c "o "n "f "...</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-08-23T02:08:34.144329" elapsed="0.031382"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:08:34.199711" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "D "e "c "o "n "f "i "g "u "r "e "_ "D "e "v "i "c "e "_ "F "r "o "m "_ "N "e "t "c "o "n "f "_ "T "e "m "p "o "r "a "r "i "l "y "[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-08-23T02:08:34.176327" elapsed="0.023601"/>
</kw>
<msg time="2026-08-23T02:08:34.200131" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:08:34.200178" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "D "e "c "o "n "f "i "g "u "r "e "_ "D "e "v ...</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-08-23T02:08:34.175896" elapsed="0.024319"/>
</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-08-23T02:08:34.200546" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:34.200328" elapsed="0.000298"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:34.200308" elapsed="0.000344"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:34.201222" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "D "e "c "o "n "f "i "g "u "r "e "_ "D "e "v "i "c "e "_ "F "r "o "m "_ "N "e "t "c "o "n "f "_ "T "e "m "p "o "r "a "r "i "l "y "[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-08-23T02:08:34.200791" elapsed="0.000522"/>
</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-08-23T02:08:34.201593" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:34.201380" elapsed="0.000290"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:34.201362" elapsed="0.000333"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:08:34.201729" 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-08-23T02:08:34.205063" elapsed="0.000278"/>
</kw>
<msg time="2026-08-23T02:08:34.205417" 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-08-23T02:08:34.204351" elapsed="0.001169"/>
</kw>
<kw name="Open 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-08-23T02:08:34.206635" elapsed="0.000039"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:34.207750" elapsed="0.000037"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:08:34.202642" elapsed="0.005272"/>
</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-08-23T02:08:34.202009" elapsed="0.006032"/>
</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-08-23T02:08:34.142610" elapsed="0.065557"/>
</kw>
<msg time="2026-08-23T02:08:34.208265" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:08:34.208309" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "D "e "c "o "n "f "i "g "u "r "e "_ "D "e "v ...</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-08-23T02:08:34.141789" elapsed="0.066557"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:08:34.208538" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:08:34.208423" elapsed="0.000174"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:34.208404" elapsed="0.000217"/>
</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-08-23T02:08:34.209336" 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-08-23T02:08:34.209667" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:08:34.209739" 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-08-23T02:08:34.141097" elapsed="0.068765"/>
</kw>
<msg time="2026-08-23T02:08:34.209958" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:08:34.210002" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "D "e "c "o "n "f "i "g "u "r "e "_ "D "e "v ...</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-08-23T02:08:34.136375" elapsed="0.073663"/>
</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-08-23T02:08:34.210395" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:34.210117" elapsed="0.000332"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:34.210096" elapsed="0.000376"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:08:34.136229" elapsed="0.074266"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:08:34.136035" elapsed="0.074488"/>
</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-08-23T02:08:34.133667" elapsed="0.076909"/>
</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-08-23T02:08:34.128538" elapsed="0.082091"/>
</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-08-23T02:08:34.128114" elapsed="0.082560"/>
</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-08-23T02:08:34.125225" elapsed="0.085537"/>
</kw>
<kw name="Configure_Device_In_Netconf" owner="NetconfKeywords">
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T02:08:34.230277" elapsed="0.000423"/>
</kw>
<msg time="2026-08-23T02:08:34.230751" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:08:34.229880" elapsed="0.000919"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return scandium if vanadium is at least ${lower_bound},
return calcium otherwise.</doc>
<status status="PASS" start="2026-08-23T02:08:34.229482" elapsed="0.001407"/>
</kw>
<msg time="2026-08-23T02:08:34.230933" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:08:34.220657" elapsed="0.010319"/>
</kw>
<msg time="2026-08-23T02:08:34.231077" level="INFO">${version} = scandium</msg>
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-08-23T02:08:34.220337" elapsed="0.010764"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:08:34.231982" level="INFO">${mapping} = {'DEVICE_IP': '10.30.170.120', 'DEVICE_NAME': 'netconf-test-device', 'DEVICE_PORT': '17830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'topsecret', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/t...</msg>
<var>${mapping}</var>
<arg>DEVICE_IP=${device_address}</arg>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>DEVICE_PORT=${device_port}</arg>
<arg>DEVICE_USER=${device_user}</arg>
<arg>DEVICE_PASSWORD=${device_password}</arg>
<arg>DEVICE_KEY=${device_key}</arg>
<arg>SCHEMA_DIRECTORY=${schema_directory}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-23T02:08:34.231262" elapsed="0.000748"/>
</kw>
<if>
<branch type="IF" condition="'${http_method}'=='post'">
<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-08-23T02:08:34.265962" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:34.265571" elapsed="0.000419"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T02:08:34.266715" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/rpc-delete-device.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-23T02:08:34.266474" elapsed="0.000306">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/rpc-delete-device.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-23T02:08:34.266909" 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-08-23T02:08:34.266148" elapsed="0.000791"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:08:34.267500" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device/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-08-23T02:08:34.267120" elapsed="0.000409"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:08:34.267821" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/rpc-delete-device/location.uri"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/rpc-delete-device/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:08:34.268013" level="INFO">${template} = $RESTCONF_ROOT/operations/netconf-node-topology:delete-device
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:08:34.267687" elapsed="0.000352"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:34.268447" level="INFO">$RESTCONF_ROOT/operations/netconf-node-topology:delete-device
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:34.268203" 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-08-23T02:08:34.269466" level="INFO">mapping: {'DEVICE_IP': '10.30.170.120', 'DEVICE_NAME': 'netconf-test-device', 'DEVICE_PORT': '17830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'topsecret', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:34.269196" elapsed="0.000316"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:08:34.269945" 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-08-23T02:08:34.269666" elapsed="0.000305"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:08:34.270894" level="INFO">${value} = 10.30.170.120</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:08:34.270330" elapsed="0.000591"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:08:34.272150" level="INFO">${encoded} = 10.30.170.120</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-08-23T02:08:34.271594" elapsed="0.000621"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:08:34.272347" elapsed="0.000032"/>
</return>
<msg time="2026-08-23T02:08:34.272588" level="INFO">${encoded_value} = 10.30.170.120</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-08-23T02:08:34.271102" elapsed="0.001512"/>
</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-08-23T02:08:34.272763" elapsed="0.000593"/>
</kw>
<var name="${key}">DEVICE_IP</var>
<var name="${value}">10.30.170.120</var>
<status status="PASS" start="2026-08-23T02:08:34.270194" elapsed="0.003204"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:08:34.274247" level="INFO">${value} = netconf-test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:08:34.273642" elapsed="0.000638"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:08:34.275614" level="INFO">${encoded} = netconf-test-device</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-08-23T02:08:34.275090" elapsed="0.000567"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:08:34.275783" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T02:08:34.276171" level="INFO">${encoded_value} = netconf-test-device</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-08-23T02:08:34.274469" elapsed="0.001742"/>
</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-08-23T02:08:34.276360" elapsed="0.000533"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:08:34.273512" elapsed="0.003423"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:08:34.277742" level="INFO">${value} = 17830</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:08:34.277196" elapsed="0.000572"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:08:34.279060" level="INFO">${encoded} = 17830</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-08-23T02:08:34.278521" elapsed="0.000582"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:08:34.279229" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T02:08:34.279465" level="INFO">${encoded_value} = 17830</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-08-23T02:08:34.278025" elapsed="0.001466"/>
</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-08-23T02:08:34.279639" elapsed="0.000631"/>
</kw>
<var name="${key}">DEVICE_PORT</var>
<var name="${value}">17830</var>
<status status="PASS" start="2026-08-23T02:08:34.277047" elapsed="0.003266"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:08:34.281108" level="INFO">${value} = admin</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:08:34.280556" elapsed="0.000582"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:08:34.282476" level="INFO">${encoded} = admin</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-08-23T02:08:34.281804" elapsed="0.000715"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:08:34.282644" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T02:08:34.282965" level="INFO">${encoded_value} = admin</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-08-23T02:08:34.281351" elapsed="0.001641"/>
</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-08-23T02:08:34.283140" elapsed="0.000524"/>
</kw>
<var name="${key}">DEVICE_USER</var>
<var name="${value}">admin</var>
<status status="PASS" start="2026-08-23T02:08:34.280425" elapsed="0.003281"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:08:34.284567" level="INFO">${value} = topsecret</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:08:34.284023" elapsed="0.000571"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:08:34.285764" level="INFO">${encoded} = topsecret</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-08-23T02:08:34.285242" elapsed="0.000565"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:08:34.285996" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T02:08:34.286240" level="INFO">${encoded_value} = topsecret</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-08-23T02:08:34.284773" elapsed="0.001495"/>
</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-08-23T02:08:34.286416" elapsed="0.000536"/>
</kw>
<var name="${key}">DEVICE_PASSWORD</var>
<var name="${value}">topsecret</var>
<status status="PASS" start="2026-08-23T02:08:34.283819" elapsed="0.003175"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:08:34.287769" level="INFO">${value} = device-key</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:08:34.287239" elapsed="0.000557"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:08:34.289191" level="INFO">${encoded} = device-key</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-08-23T02:08:34.288643" elapsed="0.000601"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:08:34.289375" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T02:08:34.289613" level="INFO">${encoded_value} = device-key</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-08-23T02:08:34.288076" elapsed="0.001563"/>
</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-08-23T02:08:34.289787" elapsed="0.000611"/>
</kw>
<var name="${key}">DEVICE_KEY</var>
<var name="${value}">device-key</var>
<status status="PASS" start="2026-08-23T02:08:34.287109" elapsed="0.003332"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:08:34.291269" level="INFO">${value} = /tmp/schema</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:08:34.290684" elapsed="0.000618"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:08:34.292567" level="INFO">${encoded} = /tmp/schema</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-08-23T02:08:34.292029" elapsed="0.000581"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:08:34.292737" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T02:08:34.292995" level="INFO">${encoded_value} = /tmp/schema</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-08-23T02:08:34.291490" elapsed="0.001531"/>
</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-08-23T02:08:34.293171" elapsed="0.000521"/>
</kw>
<var name="${key}">SCHEMA_DIRECTORY</var>
<var name="${value}">/tmp/schema</var>
<status status="PASS" start="2026-08-23T02:08:34.290555" elapsed="0.003180"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:08:34.294719" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:08:34.294004" elapsed="0.000742"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:08:34.297073" level="INFO">${encoded} = /rests</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-08-23T02:08:34.296502" elapsed="0.000625"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:08:34.297292" elapsed="0.000035"/>
</return>
<msg time="2026-08-23T02:08:34.297535" level="INFO">${encoded_value} = /rests</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-08-23T02:08:34.295738" 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-08-23T02:08:34.297721" elapsed="0.000587"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-23T02:08:34.293872" elapsed="0.004484"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-23T02:08:34.270020" elapsed="0.028372"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-23T02:08:34.298438" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:08:34.298605" level="INFO">${mapping_to_use} = {'DEVICE_IP': '10.30.170.120', 'DEVICE_NAME': 'netconf-test-device', 'DEVICE_PORT': '17830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'topsecret', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/t...</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-23T02:08:34.268856" elapsed="0.029776"/>
</kw>
<status status="PASS" start="2026-08-23T02:08:34.268556" elapsed="0.030107"/>
</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-08-23T02:08:34.298852" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:34.298688" elapsed="0.000224"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:34.268538" elapsed="0.030395"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:08:34.299764" level="INFO">${final_text} = /rests/operations/netconf-node-topology:delete-device</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-08-23T02:08:34.299070" elapsed="0.000722"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T02:08:34.299907" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device/${file_name}.</doc>
<status status="PASS" start="2026-08-23T02:08:34.264926" elapsed="0.035110"/>
</kw>
<msg time="2026-08-23T02:08:34.300093" 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-08-23T02:08:34.252213" elapsed="0.047929"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:34.312876" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:34.325586" elapsed="0.000032"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:34.338169" 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-08-23T02:08:34.338368" 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-08-23T02:08:34.338543" 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-08-23T02:08:34.338929" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:34.338769" elapsed="0.000218"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:34.338753" 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-08-23T02:08:34.339153" 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-08-23T02:08:34.339315" 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-08-23T02:08:34.339475" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T02:08:34.338720" elapsed="0.000808"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T02:08:34.338619" 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-08-23T02:08:34.339693" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:34.339768" elapsed="0.000015"/>
</return>
<msg time="2026-08-23T02:08:34.339898" level="INFO">${uri} = /rests/operations/netconf-node-topology:delete-device</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-08-23T02:08:34.247886" elapsed="0.092038"/>
</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-08-23T02:08:34.364954" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device.vanadium/post_data.xml</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:34.364562" elapsed="0.000420"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T02:08:34.365703" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/rpc-delete-device.vanadium/post_data.xml' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-23T02:08:34.365470" elapsed="0.000297">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/rpc-delete-device.vanadium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-08-23T02:08:34.365875" 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-08-23T02:08:34.365141" elapsed="0.000761"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:08:34.366447" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device/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-08-23T02:08:34.366062" elapsed="0.000412"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:08:34.366763" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/rpc-delete-device/post_data.xml"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/rpc-delete-device/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:08:34.366964" level="INFO">${template} = &lt;input xmlns="urn:opendaylight:netconf-node-topology"&gt;
   &lt;node-id&gt;$DEVICE_NAME&lt;/node-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-08-23T02:08:34.366630" elapsed="0.000362"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:34.367438" level="INFO">&lt;input xmlns="urn:opendaylight:netconf-node-topology"&gt;
   &lt;node-id&gt;$DEVICE_NAME&lt;/node-id&gt;
 &lt;/input&gt;
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:34.367157" 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-08-23T02:08:34.367893" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:34.367585" elapsed="0.000368"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:34.368489" level="INFO">${mapping_to_use} = {'DEVICE_IP': '10.30.170.120', 'DEVICE_NAME': 'netconf-test-device', 'DEVICE_PORT': '17830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'topsecret', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/t...</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-08-23T02:08:34.368125" elapsed="0.000391"/>
</kw>
<status status="PASS" start="2026-08-23T02:08:34.367978" elapsed="0.000574"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:34.367565" elapsed="0.001009"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:08:34.369614" level="INFO">${final_text} = &lt;input xmlns="urn:opendaylight:netconf-node-topology"&gt;
   &lt;node-id&gt;netconf-test-device&lt;/node-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-08-23T02:08:34.368720" elapsed="0.000923"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T02:08:34.369694" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device/${file_name}.</doc>
<status status="PASS" start="2026-08-23T02:08:34.363933" elapsed="0.005889"/>
</kw>
<msg time="2026-08-23T02:08:34.369892" 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-08-23T02:08:34.351020" elapsed="0.018921"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:34.382683" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:34.395268" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:34.407870" 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-08-23T02:08:34.408061" 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-08-23T02:08:34.408229" 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-08-23T02:08:34.408614" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:34.408472" elapsed="0.000198"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:34.408457" 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-08-23T02:08:34.408830" 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-08-23T02:08:34.409012" 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-08-23T02:08:34.409285" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T02:08:34.408429" elapsed="0.000911"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T02:08:34.408303" elapsed="0.001063"/>
</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-08-23T02:08:34.409508" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:34.409583" elapsed="0.000016"/>
</return>
<msg time="2026-08-23T02:08:34.409699" level="INFO">${data} = &lt;input xmlns="urn:opendaylight:netconf-node-topology"&gt;
   &lt;node-id&gt;netconf-test-device&lt;/node-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-08-23T02:08:34.350158" elapsed="0.059569"/>
</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-08-23T02:08:34.411044" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/rpc-delete-device/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-08-23T02:08:34.410773" elapsed="0.000336">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/rpc-delete-device/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-23T02:08:34.411201" 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-08-23T02:08:34.410436" 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-08-23T02:08:34.411534" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:34.411294" elapsed="0.000296"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:34.412092" 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-08-23T02:08:34.411779" elapsed="0.000340"/>
</kw>
<status status="PASS" start="2026-08-23T02:08:34.411615" elapsed="0.000542"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:34.411275" elapsed="0.000906"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:08:34.414526" 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-08-23T02:08:34.412342" elapsed="0.002211"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-23T02:08:34.414604" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:08:34.414757" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-23T02:08:34.410072" elapsed="0.004710"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:34.416313" level="INFO">/rests/operations/netconf-node-topology:delete-device</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:34.416064" elapsed="0.000326"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:34.416786" level="INFO">&lt;input xmlns="urn:opendaylight:netconf-node-topology"&gt;
   &lt;node-id&gt;netconf-test-device&lt;/node-id&gt;
 &lt;/input&gt;</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:34.416546" elapsed="0.000300"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:34.417240" 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-08-23T02:08:34.416996" elapsed="0.000287"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:34.417669" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:34.417430" elapsed="0.000282"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-08-23T02:08:34.418516" 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-08-23T02:08:34.418327" elapsed="0.000215"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-08-23T02:08:34.418878" 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-08-23T02:08:34.418689" 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-08-23T02:08:34.419049" elapsed="0.000197"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:34.419640" 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-08-23T02:08:34.419395" elapsed="0.000288"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-08-23T02:08:34.419725" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:08:34.419896" 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-08-23T02:08:34.417924" elapsed="0.002034"/>
</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">
<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="NOT RUN" start="2026-08-23T02:08:34.422373" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:34.420032" elapsed="0.002408"/>
</branch>
<branch type="ELSE">
<kw name="POST On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:08:34.426413" level="INFO">POST Request : url=http://10.30.170.114:8181/rests/operations/netconf-node-topology:delete-device 
 path_url=/rests/operations/netconf-node-topology:delete-device 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Content-Length': '106', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="urn:opendaylight:netconf-node-topology"&gt;
   &lt;node-id&gt;netconf-test-device&lt;/node-id&gt;
 &lt;/input&gt; 
 </msg>
<msg time="2026-08-23T02:08:34.426464" level="INFO">POST Response : url=http://10.30.170.114:8181/rests/operations/netconf-node-topology:delete-device 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:08:34.426562" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-node-topology:delete-device</msg>
<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="FAIL" start="2026-08-23T02:08:34.422605" elapsed="0.004334">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-node-topology:delete-device</status>
</kw>
<status status="FAIL" start="2026-08-23T02:08:34.422465" elapsed="0.004559">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-node-topology:delete-device</status>
</branch>
<status status="FAIL" start="2026-08-23T02:08:34.420013" elapsed="0.007042">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-node-topology:delete-device</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:34.427424" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:34.427562" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:34.427523" elapsed="0.000080"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:34.427506" elapsed="0.000118"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:34.427764" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:08:34.427845" elapsed="0.000017"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>content_type=${content_type}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>POST data to given URI, check status code and return response text.
${content_type} and ${accept} are mandatory Python objects with headers to use.
If ${normalize_json}, normalize text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:08:34.415122" elapsed="0.012831">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-node-topology:delete-device</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:34.428031" elapsed="0.000016"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>extension=xml</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>content_type=${HEADERS_XML}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>endline=${\n}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve URI and data from folder, call Post_To_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-23T02:08:34.236678" elapsed="0.191447">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-node-topology:delete-device</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=response</arg>
<arg>mapping=${mapping}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:34.428430" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:34.428235" elapsed="0.000262"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:34.428218" elapsed="0.000304"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:34.428554" elapsed="0.000015"/>
</return>
<arg>folder=${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Add arguments sensible for XML data, return Post_Templated response text.
Optionally, verification against response.xml (no iteration) is called.</doc>
<status status="FAIL" start="2026-08-23T02:08:34.232429" elapsed="0.196220">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-node-topology:delete-device</status>
</kw>
<status status="FAIL" start="2026-08-23T02:08:34.232098" elapsed="0.196616">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-node-topology:delete-device</status>
</branch>
<branch type="ELSE">
<kw name="Put_As_Xml_Templated" owner="TemplatedRequests">
<arg>folder=${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Add arguments sensible for XML data, return Put_Templated response text.
Optionally, verification against response.xml (no iteration) is called.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:34.428998" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:34.428742" elapsed="0.000358"/>
</branch>
<status status="FAIL" start="2026-08-23T02:08:34.232079" elapsed="0.197046">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-node-topology:delete-device</status>
</if>
<kw name="Set To Dictionary" owner="Collections">
<arg>${NetconfKeywords__mounted_device_types}</arg>
<arg>${device_name}</arg>
<arg>${device_type}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:34.429282" elapsed="0.000021"/>
</kw>
<arg>${device_name}</arg>
<arg>device_type=${device_type_rpc_delete}</arg>
<arg>http_timeout=2</arg>
<arg>http_method=post</arg>
<doc>Tell Netconf about the specified device so it can add it into its configuration.</doc>
<status status="FAIL" start="2026-08-23T02:08:34.211056" elapsed="0.218339">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-node-topology:delete-device</status>
</kw>
<doc>Make request to deconfigure the testtool device on Netconf connector.
This is the first part of the "configure/deconfigure" cycle of the device
The purpose of cycling the device like this is to see that the configuration
data was really stored in the device.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-08-23T02:08:34.124298" elapsed="0.305240">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-node-topology:delete-device</status>
</test>
<test id="s1-s4-s1-t12" name="Wait_For_Device_To_Be_Gone" line="118">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-08-23T02:08:34.432899" elapsed="0.000211"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:08:34.432623" elapsed="0.000542"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:08:34.434137" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:34.434028" elapsed="0.000160"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:34.434009" elapsed="0.000202"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:08:34.439216" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:34.439087" elapsed="0.000184"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:34.439068" elapsed="0.000230"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:08:34.440293" 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-08-23T02:08:34.439907" elapsed="0.000413"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:08:34.440804" 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-08-23T02:08:34.440505" elapsed="0.000324"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:08:34.440891" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:08:34.441046" 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-08-23T02:08:34.439521" elapsed="0.001550"/>
</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-08-23T02:08:34.446753" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:34.446643" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:34.446624" elapsed="0.000197"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:08:34.448092" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:34.447984" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:34.447966" elapsed="0.000194"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:08:34.448707" 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-08-23T02:08:34.448301" elapsed="0.000433"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:08:34.449164" 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-08-23T02:08:34.448909" elapsed="0.000281"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:08:34.484421" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:08:34.449737" elapsed="0.034958"/>
</kw>
<msg time="2026-08-23T02:08:34.484977" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:08:34.485028" 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 "n "e "t "c "o "n "f "...</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-08-23T02:08:34.449347" elapsed="0.035719"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:08:34.503559" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "W "a "i "t "_ "F "o "r "_ "D "e "v "i "c "e "_ "T "o "_ "B "e "_ "G "o "n "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-08-23T02:08:34.485886" elapsed="0.017871"/>
</kw>
<msg time="2026-08-23T02:08:34.504070" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:08:34.504118" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "W "a "i "t "_ "F "o "r "_ "D "e "v "i "c "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-08-23T02:08:34.485331" elapsed="0.018827"/>
</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-08-23T02:08:34.504542" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:34.504257" elapsed="0.000367"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:34.504228" elapsed="0.000434"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:34.505277" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "W "a "i "t "_ "F "o "r "_ "D "e "v "i "c "e "_ "T "o "_ "B "e "_ "G "o "n "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-08-23T02:08:34.504809" elapsed="0.000540"/>
</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-08-23T02:08:34.505633" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:34.505417" elapsed="0.000295"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:34.505399" elapsed="0.000337"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:08:34.505777" elapsed="0.000045"/>
</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-08-23T02:08:34.509445" elapsed="0.000154"/>
</kw>
<msg time="2026-08-23T02:08:34.509676" 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-08-23T02:08:34.508593" elapsed="0.001195"/>
</kw>
<kw name="Open 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-08-23T02:08:34.511077" elapsed="0.000043"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:34.512252" elapsed="0.000041"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:08:34.506808" elapsed="0.005569"/>
</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-08-23T02:08:34.506130" elapsed="0.006403"/>
</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-08-23T02:08:34.447658" elapsed="0.064980"/>
</kw>
<msg time="2026-08-23T02:08:34.512741" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:08:34.512787" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "W "a "i "t "_ "F "o "r "_ "D "e "v "i "c "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-08-23T02:08:34.446988" elapsed="0.065841"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:08:34.513146" elapsed="0.000032"/>
</return>
<status status="PASS" start="2026-08-23T02:08:34.513025" elapsed="0.000194"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:34.513005" elapsed="0.000244"/>
</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-08-23T02:08:34.513712" 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-08-23T02:08:34.514083" elapsed="0.000027"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:08:34.514171" elapsed="0.000021"/>
</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-08-23T02:08:34.446303" elapsed="0.068007"/>
</kw>
<msg time="2026-08-23T02:08:34.514412" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:08:34.514458" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "W "a "i "t "_ "F "o "r "_ "D "e "v "i "c "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-08-23T02:08:34.441462" elapsed="0.073037"/>
</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-08-23T02:08:34.514829" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:34.514577" elapsed="0.000323"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:34.514559" elapsed="0.000365"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:08:34.441323" elapsed="0.073625"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:08:34.441134" elapsed="0.073852"/>
</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-08-23T02:08:34.438706" elapsed="0.076344"/>
</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-08-23T02:08:34.433726" elapsed="0.081425"/>
</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-08-23T02:08:34.433311" elapsed="0.081894"/>
</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-08-23T02:08:34.430446" elapsed="0.084818"/>
</kw>
<kw name="Wait_Device_Fully_Removed" owner="NetconfKeywords">
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Completely_Gone" owner="NetconfKeywords">
<kw name="Check_Device_Has_No_Netconf_Connector" owner="NetconfKeywords">
<kw name="Count_Netconf_Connectors_For_Device" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:34.529319" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:34.527057" elapsed="0.002289"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:34.529687" elapsed="0.000022"/>
</kw>
<var name="${nv}"/>
<status status="NOT RUN" start="2026-08-23T02:08:34.529535" elapsed="0.000254"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="NOT RUN" start="2026-08-23T02:08:34.529405" elapsed="0.000418"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:34.530163" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:34.529904" elapsed="0.000332"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:34.531012" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:34.530513" elapsed="0.000526"/>
</kw>
<status status="PASS" start="2026-08-23T02:08:34.530268" elapsed="0.000808"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:34.531278" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:34.531101" elapsed="0.000238"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:34.529886" elapsed="0.001479"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:34.531411" elapsed="0.000034"/>
</return>
<msg time="2026-08-23T02:08:34.531577" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:08:34.526547" elapsed="0.005060"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:34.531656" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:08:34.531799" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:08:34.526008" elapsed="0.005815"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:34.539312" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:34.539061" elapsed="0.000296"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:34.539747" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:34.539504" elapsed="0.000286"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:08:34.546896" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:08:34.546954" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '407'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:08:34.547069" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:08:34.541998" elapsed="0.005501">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:08:34.539870" elapsed="0.007715">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:34.547770" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:34.547619" elapsed="0.000232"/>
</branch>
<status status="FAIL" start="2026-08-23T02:08:34.539851" elapsed="0.008060">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:34.548305" elapsed="0.000025"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:34.548438" elapsed="0.000032"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:34.548400" elapsed="0.000104"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:34.548383" elapsed="0.000145"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:34.548690" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:08:34.548762" elapsed="0.000016"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:08:34.534587" elapsed="0.014302">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:34.548961" elapsed="0.000016"/>
</return>
<var>${mounts}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:08:34.532061" elapsed="0.016997">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${mounts}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:34.549260" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${actual_count}</var>
<arg>len('''${mounts}'''.split('"node-id": "${device_name}"'))-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:34.549425" elapsed="0.000019"/>
</kw>
<return>
<value>${actual_count}</value>
<status status="NOT RUN" start="2026-08-23T02:08:34.549487" elapsed="0.000014"/>
</return>
<var>${count}</var>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Count all instances of the specified device in the Netconf topology (usually 0 or 1).</doc>
<status status="FAIL" start="2026-08-23T02:08:34.518060" elapsed="0.031524">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${count}</arg>
<arg>0</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:34.549745" elapsed="0.000021"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Check that there are no instances of the specified device in the Netconf topology.</doc>
<status status="FAIL" start="2026-08-23T02:08:34.517338" elapsed="0.032531">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Generate URI" owner="Restconf">
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>config</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="NOT RUN" start="2026-08-23T02:08:34.559753" elapsed="0.000040"/>
</kw>
<kw name="No Content From URI" owner="Utils">
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Issue a Get On Session and return on error 404 (No content) or will fail and log the content.
Issues a Get On Session for ${uri} in default using headers from
{'Content-Type': 'application/json'}. If the request returns a HTTP error, fails. Otherwise
returns the data obtained by the request.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:34.563787" elapsed="0.000028"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device has no Netconf connectors nor associated data.</doc>
<status status="FAIL" start="2026-08-23T02:08:34.516527" elapsed="0.047487">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Check_Device_Completely_Gone" owner="NetconfKeywords">
<kw name="Check_Device_Has_No_Netconf_Connector" owner="NetconfKeywords">
<kw name="Count_Netconf_Connectors_For_Device" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:35.582471" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:35.580175" elapsed="0.002331"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:35.582898" elapsed="0.000023"/>
</kw>
<var name="${nv}"/>
<status status="NOT RUN" start="2026-08-23T02:08:35.582727" elapsed="0.000230"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="NOT RUN" start="2026-08-23T02:08:35.582586" elapsed="0.000402"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:35.583335" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:35.583066" elapsed="0.000327"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:35.584137" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:35.583646" elapsed="0.000517"/>
</kw>
<status status="PASS" start="2026-08-23T02:08:35.583419" elapsed="0.000780"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:35.584385" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:35.584224" elapsed="0.000321"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:35.583045" elapsed="0.001522"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:35.584610" elapsed="0.000042"/>
</return>
<msg time="2026-08-23T02:08:35.584781" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:08:35.579670" elapsed="0.005137"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:35.584871" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:08:35.585015" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:08:35.579121" elapsed="0.005919"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:35.592578" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:35.592315" elapsed="0.000310"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:35.593042" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:35.592776" elapsed="0.000310"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:08:35.600305" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:08:35.600374" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '407'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:08:35.600496" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:08:35.595236" elapsed="0.005747">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:08:35.593152" elapsed="0.007919">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:35.601276" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:35.601106" elapsed="0.000237"/>
</branch>
<status status="FAIL" start="2026-08-23T02:08:35.593133" elapsed="0.008234">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:35.601789" elapsed="0.000027"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:35.601958" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:35.601920" elapsed="0.000080"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:35.601902" elapsed="0.000119"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:35.602169" elapsed="0.000033"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:08:35.602272" elapsed="0.000020"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:08:35.587684" elapsed="0.014738">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:35.602520" elapsed="0.000022"/>
</return>
<var>${mounts}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:08:35.585264" elapsed="0.017391">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${mounts}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:35.602909" elapsed="0.000031"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${actual_count}</var>
<arg>len('''${mounts}'''.split('"node-id": "${device_name}"'))-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:35.603143" elapsed="0.000028"/>
</kw>
<return>
<value>${actual_count}</value>
<status status="NOT RUN" start="2026-08-23T02:08:35.603282" elapsed="0.000024"/>
</return>
<var>${count}</var>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Count all instances of the specified device in the Netconf topology (usually 0 or 1).</doc>
<status status="FAIL" start="2026-08-23T02:08:35.567676" elapsed="0.035751">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${count}</arg>
<arg>0</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:35.603656" elapsed="0.000030"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Check that there are no instances of the specified device in the Netconf topology.</doc>
<status status="FAIL" start="2026-08-23T02:08:35.566575" elapsed="0.037234">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Generate URI" owner="Restconf">
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>config</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="NOT RUN" start="2026-08-23T02:08:35.613110" elapsed="0.000038"/>
</kw>
<kw name="No Content From URI" owner="Utils">
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Issue a Get On Session and return on error 404 (No content) or will fail and log the content.
Issues a Get On Session for ${uri} in default using headers from
{'Content-Type': 'application/json'}. If the request returns a HTTP error, fails. Otherwise
returns the data obtained by the request.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:35.616794" elapsed="0.000031"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device has no Netconf connectors nor associated data.</doc>
<status status="FAIL" start="2026-08-23T02:08:35.564937" elapsed="0.052038">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Check_Device_Completely_Gone" owner="NetconfKeywords">
<kw name="Check_Device_Has_No_Netconf_Connector" owner="NetconfKeywords">
<kw name="Count_Netconf_Connectors_For_Device" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:36.635103" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:36.632924" elapsed="0.002213"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:36.635500" elapsed="0.000022"/>
</kw>
<var name="${nv}"/>
<status status="NOT RUN" start="2026-08-23T02:08:36.635346" elapsed="0.000212"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="NOT RUN" start="2026-08-23T02:08:36.635211" elapsed="0.000376"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:36.635951" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:36.635660" elapsed="0.000350"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:36.636736" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:36.636264" elapsed="0.000499"/>
</kw>
<status status="PASS" start="2026-08-23T02:08:36.636036" elapsed="0.000763"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:36.637001" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:36.636824" elapsed="0.000233"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:36.635639" elapsed="0.001439"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:36.637117" elapsed="0.000040"/>
</return>
<msg time="2026-08-23T02:08:36.637284" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:08:36.632423" elapsed="0.004887"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:36.637358" elapsed="0.000025"/>
</return>
<msg time="2026-08-23T02:08:36.637498" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:08:36.631918" elapsed="0.005606"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:36.644775" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:36.644516" elapsed="0.000306"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:36.645272" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:36.645022" elapsed="0.000293"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:08:36.653668" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:08:36.653725" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '407'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:08:36.653932" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:08:36.647477" elapsed="0.006960">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:08:36.645382" elapsed="0.009173">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:36.654814" elapsed="0.000070"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:36.654602" elapsed="0.000345"/>
</branch>
<status status="FAIL" start="2026-08-23T02:08:36.645363" elapsed="0.009617">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:36.655497" elapsed="0.000036"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:36.655681" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:36.655630" elapsed="0.000110"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:36.655606" elapsed="0.000163"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:36.655986" elapsed="0.000031"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:08:36.656086" elapsed="0.000021"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:08:36.640169" elapsed="0.016087">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:36.656376" elapsed="0.000027"/>
</return>
<var>${mounts}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:08:36.637740" elapsed="0.018780">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${mounts}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:36.656748" elapsed="0.000029"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${actual_count}</var>
<arg>len('''${mounts}'''.split('"node-id": "${device_name}"'))-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:36.656997" elapsed="0.000029"/>
</kw>
<return>
<value>${actual_count}</value>
<status status="NOT RUN" start="2026-08-23T02:08:36.657085" elapsed="0.000021"/>
</return>
<var>${count}</var>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Count all instances of the specified device in the Netconf topology (usually 0 or 1).</doc>
<status status="FAIL" start="2026-08-23T02:08:36.620563" elapsed="0.036664">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${count}</arg>
<arg>0</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:36.657489" elapsed="0.000029"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Check that there are no instances of the specified device in the Netconf topology.</doc>
<status status="FAIL" start="2026-08-23T02:08:36.619338" elapsed="0.038299">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Generate URI" owner="Restconf">
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>config</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="NOT RUN" start="2026-08-23T02:08:36.666915" elapsed="0.000029"/>
</kw>
<kw name="No Content From URI" owner="Utils">
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Issue a Get On Session and return on error 404 (No content) or will fail and log the content.
Issues a Get On Session for ${uri} in default using headers from
{'Content-Type': 'application/json'}. If the request returns a HTTP error, fails. Otherwise
returns the data obtained by the request.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:36.670467" elapsed="0.000027"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device has no Netconf connectors nor associated data.</doc>
<status status="FAIL" start="2026-08-23T02:08:36.617829" elapsed="0.052764">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Check_Device_Completely_Gone" owner="NetconfKeywords">
<kw name="Check_Device_Has_No_Netconf_Connector" owner="NetconfKeywords">
<kw name="Count_Netconf_Connectors_For_Device" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:37.688225" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:37.686069" elapsed="0.002194"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:37.688634" elapsed="0.000021"/>
</kw>
<var name="${nv}"/>
<status status="NOT RUN" start="2026-08-23T02:08:37.688481" elapsed="0.000210"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="NOT RUN" start="2026-08-23T02:08:37.688345" elapsed="0.000374"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:37.689152" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:37.688888" elapsed="0.000322"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:37.689963" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:37.689463" elapsed="0.000527"/>
</kw>
<status status="PASS" start="2026-08-23T02:08:37.689236" elapsed="0.000791"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:37.690212" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:37.690051" elapsed="0.000217"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:37.688866" elapsed="0.001423"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:37.690329" elapsed="0.000038"/>
</return>
<msg time="2026-08-23T02:08:37.690490" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:08:37.685582" elapsed="0.004933"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:37.690562" elapsed="0.000025"/>
</return>
<msg time="2026-08-23T02:08:37.690703" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:08:37.685080" elapsed="0.005648"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:37.698318" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:37.698060" elapsed="0.000305"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:37.698759" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:37.698516" elapsed="0.000286"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:08:37.705882" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:08:37.705941" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '407'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:08:37.706055" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:08:37.701269" elapsed="0.005193">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:08:37.698883" elapsed="0.007672">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:37.706738" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:37.706589" elapsed="0.000215"/>
</branch>
<status status="FAIL" start="2026-08-23T02:08:37.698864" elapsed="0.007963">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:37.707254" elapsed="0.000033"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:37.707448" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:37.707411" elapsed="0.000080"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:37.707392" elapsed="0.000120"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:37.707652" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:08:37.707721" elapsed="0.000016"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:08:37.693418" elapsed="0.014411">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:37.707955" elapsed="0.000017"/>
</return>
<var>${mounts}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:08:37.690958" elapsed="0.017099">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${mounts}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:37.708236" elapsed="0.000027"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${actual_count}</var>
<arg>len('''${mounts}'''.split('"node-id": "${device_name}"'))-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:37.708514" elapsed="0.000030"/>
</kw>
<return>
<value>${actual_count}</value>
<status status="NOT RUN" start="2026-08-23T02:08:37.708604" elapsed="0.000022"/>
</return>
<var>${count}</var>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Count all instances of the specified device in the Netconf topology (usually 0 or 1).</doc>
<status status="FAIL" start="2026-08-23T02:08:37.673905" elapsed="0.034848">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${count}</arg>
<arg>0</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:37.709009" elapsed="0.000031"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Check that there are no instances of the specified device in the Netconf topology.</doc>
<status status="FAIL" start="2026-08-23T02:08:37.672827" elapsed="0.036337">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Generate URI" owner="Restconf">
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>config</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="NOT RUN" start="2026-08-23T02:08:37.718554" elapsed="0.000027"/>
</kw>
<kw name="No Content From URI" owner="Utils">
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Issue a Get On Session and return on error 404 (No content) or will fail and log the content.
Issues a Get On Session for ${uri} in default using headers from
{'Content-Type': 'application/json'}. If the request returns a HTTP error, fails. Otherwise
returns the data obtained by the request.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:37.722137" elapsed="0.000027"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device has no Netconf connectors nor associated data.</doc>
<status status="FAIL" start="2026-08-23T02:08:37.671485" elapsed="0.050781">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Check_Device_Completely_Gone" owner="NetconfKeywords">
<kw name="Check_Device_Has_No_Netconf_Connector" owner="NetconfKeywords">
<kw name="Count_Netconf_Connectors_For_Device" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:38.741454" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:38.739288" elapsed="0.002199"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:38.741845" elapsed="0.000035"/>
</kw>
<var name="${nv}"/>
<status status="NOT RUN" start="2026-08-23T02:08:38.741687" elapsed="0.000230"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="NOT RUN" start="2026-08-23T02:08:38.741558" elapsed="0.000388"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:38.742279" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:38.742016" elapsed="0.000320"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:38.743086" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:38.742590" elapsed="0.000523"/>
</kw>
<status status="PASS" start="2026-08-23T02:08:38.742360" elapsed="0.000789"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:38.743334" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:38.743174" elapsed="0.000217"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:38.741997" elapsed="0.001415"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:38.743450" elapsed="0.000035"/>
</return>
<msg time="2026-08-23T02:08:38.743612" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:08:38.738798" elapsed="0.004851"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:38.743697" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:08:38.743842" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:08:38.738287" elapsed="0.005596"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:38.751307" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:38.751026" elapsed="0.000327"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:38.751763" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:38.751520" elapsed="0.000341"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:08:38.758369" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:08:38.758426" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '407'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:08:38.758546" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:08:38.754029" elapsed="0.004936">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:08:38.751957" elapsed="0.007091">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:38.759236" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:38.759082" elapsed="0.000226"/>
</branch>
<status status="FAIL" start="2026-08-23T02:08:38.751938" elapsed="0.007393">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:38.759707" elapsed="0.000027"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:38.759845" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:38.759803" elapsed="0.000104"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:38.759786" elapsed="0.000143"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:38.760070" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:08:38.760140" elapsed="0.000018"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:08:38.746540" elapsed="0.013747">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:38.760358" elapsed="0.000016"/>
</return>
<var>${mounts}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:08:38.744100" elapsed="0.016357">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${mounts}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:38.760621" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${actual_count}</var>
<arg>len('''${mounts}'''.split('"node-id": "${device_name}"'))-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:38.760788" elapsed="0.000021"/>
</kw>
<return>
<value>${actual_count}</value>
<status status="NOT RUN" start="2026-08-23T02:08:38.760855" elapsed="0.000033"/>
</return>
<var>${count}</var>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Count all instances of the specified device in the Netconf topology (usually 0 or 1).</doc>
<status status="FAIL" start="2026-08-23T02:08:38.725760" elapsed="0.035215">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${count}</arg>
<arg>0</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:38.761136" elapsed="0.000021"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Check that there are no instances of the specified device in the Netconf topology.</doc>
<status status="FAIL" start="2026-08-23T02:08:38.724689" elapsed="0.036555">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Generate URI" owner="Restconf">
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>config</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="NOT RUN" start="2026-08-23T02:08:38.770026" elapsed="0.000039"/>
</kw>
<kw name="No Content From URI" owner="Utils">
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Issue a Get On Session and return on error 404 (No content) or will fail and log the content.
Issues a Get On Session for ${uri} in default using headers from
{'Content-Type': 'application/json'}. If the request returns a HTTP error, fails. Otherwise
returns the data obtained by the request.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:38.774618" elapsed="0.000027"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device has no Netconf connectors nor associated data.</doc>
<status status="FAIL" start="2026-08-23T02:08:38.723275" elapsed="0.051508">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Check_Device_Completely_Gone" owner="NetconfKeywords">
<kw name="Check_Device_Has_No_Netconf_Connector" owner="NetconfKeywords">
<kw name="Count_Netconf_Connectors_For_Device" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:39.799231" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:39.797025" elapsed="0.002239"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:39.799635" elapsed="0.000023"/>
</kw>
<var name="${nv}"/>
<status status="NOT RUN" start="2026-08-23T02:08:39.799472" elapsed="0.000223"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="NOT RUN" start="2026-08-23T02:08:39.799340" elapsed="0.000384"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:39.800077" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:39.799796" elapsed="0.000340"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:39.800919" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:39.800408" elapsed="0.000538"/>
</kw>
<status status="PASS" start="2026-08-23T02:08:39.800161" elapsed="0.000822"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:39.801173" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:39.801009" elapsed="0.000221"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:39.799776" elapsed="0.001475"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:39.801289" elapsed="0.000037"/>
</return>
<msg time="2026-08-23T02:08:39.801451" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:08:39.796519" elapsed="0.004957"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:39.801523" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:08:39.801666" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:08:39.795980" elapsed="0.005710"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:39.809340" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:39.809075" elapsed="0.000313"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:39.809784" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:39.809540" elapsed="0.000287"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:08:39.816356" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:08:39.816415" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '407'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:08:39.816537" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:08:39.812029" elapsed="0.004947">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:08:39.809910" elapsed="0.007152">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:39.817250" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:39.817096" elapsed="0.000221"/>
</branch>
<status status="FAIL" start="2026-08-23T02:08:39.809891" elapsed="0.007450">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:39.817724" elapsed="0.000076"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:39.817950" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:39.817909" elapsed="0.000087"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:39.817884" elapsed="0.000135"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:39.818166" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:08:39.818237" elapsed="0.000016"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:08:39.804445" elapsed="0.013903">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:39.818419" elapsed="0.000016"/>
</return>
<var>${mounts}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:08:39.801927" elapsed="0.016592">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${mounts}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:39.818690" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${actual_count}</var>
<arg>len('''${mounts}'''.split('"node-id": "${device_name}"'))-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:39.818924" elapsed="0.000025"/>
</kw>
<return>
<value>${actual_count}</value>
<status status="NOT RUN" start="2026-08-23T02:08:39.819005" elapsed="0.000016"/>
</return>
<var>${count}</var>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Count all instances of the specified device in the Netconf topology (usually 0 or 1).</doc>
<status status="FAIL" start="2026-08-23T02:08:39.778608" elapsed="0.040502">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${count}</arg>
<arg>0</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:39.819278" elapsed="0.000022"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Check that there are no instances of the specified device in the Netconf topology.</doc>
<status status="FAIL" start="2026-08-23T02:08:39.777472" elapsed="0.041952">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Generate URI" owner="Restconf">
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>config</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="NOT RUN" start="2026-08-23T02:08:39.829268" elapsed="0.000028"/>
</kw>
<kw name="No Content From URI" owner="Utils">
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Issue a Get On Session and return on error 404 (No content) or will fail and log the content.
Issues a Get On Session for ${uri} in default using headers from
{'Content-Type': 'application/json'}. If the request returns a HTTP error, fails. Otherwise
returns the data obtained by the request.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:39.832816" elapsed="0.000031"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device has no Netconf connectors nor associated data.</doc>
<status status="FAIL" start="2026-08-23T02:08:39.775958" elapsed="0.057004">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Check_Device_Completely_Gone" owner="NetconfKeywords">
<kw name="Check_Device_Has_No_Netconf_Connector" owner="NetconfKeywords">
<kw name="Count_Netconf_Connectors_For_Device" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:40.849983" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:40.847765" elapsed="0.002252"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:40.850374" elapsed="0.000023"/>
</kw>
<var name="${nv}"/>
<status status="NOT RUN" start="2026-08-23T02:08:40.850219" elapsed="0.000219"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="NOT RUN" start="2026-08-23T02:08:40.850087" elapsed="0.000380"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:40.850821" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:40.850537" elapsed="0.000359"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:40.851667" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:40.851156" elapsed="0.000538"/>
</kw>
<status status="PASS" start="2026-08-23T02:08:40.850922" elapsed="0.000808"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:40.851935" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:40.851755" elapsed="0.000238"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:40.850518" elapsed="0.001496"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:40.852126" elapsed="0.000038"/>
</return>
<msg time="2026-08-23T02:08:40.852294" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:08:40.847252" elapsed="0.005078"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:40.852379" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:08:40.852524" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:08:40.846742" elapsed="0.005808"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:40.859935" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:40.859657" elapsed="0.000325"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:40.860381" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:40.860134" elapsed="0.000292"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:08:40.867149" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:08:40.867206" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '407'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:08:40.867320" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:08:40.862566" elapsed="0.005150">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:08:40.860493" elapsed="0.007306">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:40.868007" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:40.867837" elapsed="0.000236"/>
</branch>
<status status="FAIL" start="2026-08-23T02:08:40.860474" elapsed="0.007623">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:40.868486" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:40.868620" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:40.868583" elapsed="0.000081"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:40.868565" elapsed="0.000120"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:40.868824" elapsed="0.000051"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:08:40.868927" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:08:40.855274" elapsed="0.013760">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:40.869103" elapsed="0.000015"/>
</return>
<var>${mounts}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:08:40.852782" elapsed="0.016435">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${mounts}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:40.869431" elapsed="0.000024"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${actual_count}</var>
<arg>len('''${mounts}'''.split('"node-id": "${device_name}"'))-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:40.869603" elapsed="0.000021"/>
</kw>
<return>
<value>${actual_count}</value>
<status status="NOT RUN" start="2026-08-23T02:08:40.869665" elapsed="0.000015"/>
</return>
<var>${count}</var>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Count all instances of the specified device in the Netconf topology (usually 0 or 1).</doc>
<status status="FAIL" start="2026-08-23T02:08:40.836188" elapsed="0.033578">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${count}</arg>
<arg>0</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:40.869998" elapsed="0.000023"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Check that there are no instances of the specified device in the Netconf topology.</doc>
<status status="FAIL" start="2026-08-23T02:08:40.835117" elapsed="0.034995">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Generate URI" owner="Restconf">
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>config</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="NOT RUN" start="2026-08-23T02:08:40.879242" elapsed="0.000041"/>
</kw>
<kw name="No Content From URI" owner="Utils">
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Issue a Get On Session and return on error 404 (No content) or will fail and log the content.
Issues a Get On Session for ${uri} in default using headers from
{'Content-Type': 'application/json'}. If the request returns a HTTP error, fails. Otherwise
returns the data obtained by the request.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:40.883736" elapsed="0.000027"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device has no Netconf connectors nor associated data.</doc>
<status status="FAIL" start="2026-08-23T02:08:40.833722" elapsed="0.050156">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Check_Device_Completely_Gone" owner="NetconfKeywords">
<kw name="Check_Device_Has_No_Netconf_Connector" owner="NetconfKeywords">
<kw name="Count_Netconf_Connectors_For_Device" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:41.901002" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:41.898713" elapsed="0.002321"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:41.901390" elapsed="0.000023"/>
</kw>
<var name="${nv}"/>
<status status="NOT RUN" start="2026-08-23T02:08:41.901236" elapsed="0.000213"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="NOT RUN" start="2026-08-23T02:08:41.901105" elapsed="0.000373"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:41.901809" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:41.901549" elapsed="0.000336"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:41.902639" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:41.902155" elapsed="0.000511"/>
</kw>
<status status="PASS" start="2026-08-23T02:08:41.901911" elapsed="0.000791"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:41.902908" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:41.902728" elapsed="0.000245"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:41.901529" elapsed="0.001465"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:41.903032" elapsed="0.000037"/>
</return>
<msg time="2026-08-23T02:08:41.903194" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:08:41.898235" elapsed="0.004984"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:41.903266" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:08:41.903422" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:08:41.897715" elapsed="0.005733"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:41.911109" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:41.910823" elapsed="0.000333"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:41.911551" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:41.911307" elapsed="0.000287"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:08:41.918436" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:08:41.918492" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '407'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:08:41.918677" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:08:41.913762" elapsed="0.005322">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:08:41.911661" elapsed="0.007508">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:41.919357" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:41.919204" elapsed="0.000219"/>
</branch>
<status status="FAIL" start="2026-08-23T02:08:41.911642" elapsed="0.007805">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:41.919830" elapsed="0.000048"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:41.919990" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:41.919952" elapsed="0.000080"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:41.919934" elapsed="0.000120"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:41.920197" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:08:41.920268" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:08:41.906230" elapsed="0.014154">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:41.920456" elapsed="0.000016"/>
</return>
<var>${mounts}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:08:41.903664" elapsed="0.016919">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${mounts}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:41.920755" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${actual_count}</var>
<arg>len('''${mounts}'''.split('"node-id": "${device_name}"'))-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:41.920942" elapsed="0.000022"/>
</kw>
<return>
<value>${actual_count}</value>
<status status="NOT RUN" start="2026-08-23T02:08:41.921008" elapsed="0.000015"/>
</return>
<var>${count}</var>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Count all instances of the specified device in the Netconf topology (usually 0 or 1).</doc>
<status status="FAIL" start="2026-08-23T02:08:41.887264" elapsed="0.033843">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${count}</arg>
<arg>0</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:41.921270" elapsed="0.000021"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Check that there are no instances of the specified device in the Netconf topology.</doc>
<status status="FAIL" start="2026-08-23T02:08:41.886108" elapsed="0.035270">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Generate URI" owner="Restconf">
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>config</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="NOT RUN" start="2026-08-23T02:08:41.928712" elapsed="0.000054"/>
</kw>
<kw name="No Content From URI" owner="Utils">
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Issue a Get On Session and return on error 404 (No content) or will fail and log the content.
Issues a Get On Session for ${uri} in default using headers from
{'Content-Type': 'application/json'}. If the request returns a HTTP error, fails. Otherwise
returns the data obtained by the request.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:41.932275" elapsed="0.000027"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device has no Netconf connectors nor associated data.</doc>
<status status="FAIL" start="2026-08-23T02:08:41.884671" elapsed="0.047728">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Check_Device_Completely_Gone" owner="NetconfKeywords">
<kw name="Check_Device_Has_No_Netconf_Connector" owner="NetconfKeywords">
<kw name="Count_Netconf_Connectors_For_Device" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:42.950140" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:42.947975" elapsed="0.002202"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:42.950552" elapsed="0.000023"/>
</kw>
<var name="${nv}"/>
<status status="NOT RUN" start="2026-08-23T02:08:42.950380" elapsed="0.000231"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="NOT RUN" start="2026-08-23T02:08:42.950250" elapsed="0.000389"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:42.951093" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:42.950803" elapsed="0.000349"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:42.951929" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:42.951409" elapsed="0.000547"/>
</kw>
<status status="PASS" start="2026-08-23T02:08:42.951177" elapsed="0.000816"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:42.952182" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:42.952018" elapsed="0.000220"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:42.950782" elapsed="0.001477"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:42.952298" elapsed="0.000035"/>
</return>
<msg time="2026-08-23T02:08:42.952461" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:08:42.947476" elapsed="0.005012"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:42.952584" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:08:42.952733" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:08:42.946964" elapsed="0.005794"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:42.960245" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:42.959894" elapsed="0.000411"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:42.960812" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:42.960467" elapsed="0.000411"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:08:42.967886" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:08:42.967973" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '407'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:08:42.968116" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:08:42.963179" elapsed="0.005349">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:08:42.960960" elapsed="0.007670">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:42.968966" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:42.968672" elapsed="0.000364"/>
</branch>
<status status="FAIL" start="2026-08-23T02:08:42.960937" elapsed="0.008123">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:42.969528" elapsed="0.000040"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:42.969737" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:42.969676" elapsed="0.000126"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:42.969648" elapsed="0.000193"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:42.970126" elapsed="0.000035"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:08:42.970235" elapsed="0.000024"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:08:42.955470" elapsed="0.014936">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:42.970626" elapsed="0.000025"/>
</return>
<var>${mounts}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:08:42.953015" elapsed="0.017765">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${mounts}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:42.971074" elapsed="0.000033"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${actual_count}</var>
<arg>len('''${mounts}'''.split('"node-id": "${device_name}"'))-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:42.971321" elapsed="0.000030"/>
</kw>
<return>
<value>${actual_count}</value>
<status status="NOT RUN" start="2026-08-23T02:08:42.971415" elapsed="0.000022"/>
</return>
<var>${count}</var>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Count all instances of the specified device in the Netconf topology (usually 0 or 1).</doc>
<status status="FAIL" start="2026-08-23T02:08:42.935598" elapsed="0.035966">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${count}</arg>
<arg>0</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:42.971803" elapsed="0.000036"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Check that there are no instances of the specified device in the Netconf topology.</doc>
<status status="FAIL" start="2026-08-23T02:08:42.934570" elapsed="0.037422">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Generate URI" owner="Restconf">
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>config</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="NOT RUN" start="2026-08-23T02:08:42.981586" elapsed="0.000065"/>
</kw>
<kw name="No Content From URI" owner="Utils">
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Issue a Get On Session and return on error 404 (No content) or will fail and log the content.
Issues a Get On Session for ${uri} in default using headers from
{'Content-Type': 'application/json'}. If the request returns a HTTP error, fails. Otherwise
returns the data obtained by the request.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:42.985516" elapsed="0.000060"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device has no Netconf connectors nor associated data.</doc>
<status status="FAIL" start="2026-08-23T02:08:42.933268" elapsed="0.052463">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Check_Device_Completely_Gone" owner="NetconfKeywords">
<kw name="Check_Device_Has_No_Netconf_Connector" owner="NetconfKeywords">
<kw name="Count_Netconf_Connectors_For_Device" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:44.006099" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:44.003139" elapsed="0.003004"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:44.006660" elapsed="0.000031"/>
</kw>
<var name="${nv}"/>
<status status="NOT RUN" start="2026-08-23T02:08:44.006446" elapsed="0.000295"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="NOT RUN" start="2026-08-23T02:08:44.006231" elapsed="0.000550"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:44.007248" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:44.006896" elapsed="0.000432"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:44.008122" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:44.007628" elapsed="0.000522"/>
</kw>
<status status="PASS" start="2026-08-23T02:08:44.007363" elapsed="0.000822"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:44.008370" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:44.008211" elapsed="0.000215"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:44.006869" elapsed="0.001578"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:44.008484" elapsed="0.000035"/>
</return>
<msg time="2026-08-23T02:08:44.008643" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:08:44.002462" elapsed="0.006207"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:44.008715" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:08:44.008874" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:08:44.001727" elapsed="0.007174"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:44.016380" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:44.016114" elapsed="0.000312"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:44.016821" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:44.016577" elapsed="0.000391"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:08:44.023794" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:08:44.023906" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '407'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:08:44.024060" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:08:44.019108" elapsed="0.005458">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:08:44.017036" elapsed="0.007644">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:44.024971" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:44.024727" elapsed="0.000338"/>
</branch>
<status status="FAIL" start="2026-08-23T02:08:44.017017" elapsed="0.008082">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:44.025615" elapsed="0.000036"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:44.025799" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:44.025747" elapsed="0.000142"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:44.025723" elapsed="0.000198"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:44.026116" elapsed="0.000031"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:08:44.026214" elapsed="0.000021"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:08:44.011528" elapsed="0.014835">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:44.026459" elapsed="0.000022"/>
</return>
<var>${mounts}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:08:44.009118" elapsed="0.017477">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${mounts}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:44.026880" elapsed="0.000033"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${actual_count}</var>
<arg>len('''${mounts}'''.split('"node-id": "${device_name}"'))-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:44.027117" elapsed="0.000030"/>
</kw>
<return>
<value>${actual_count}</value>
<status status="NOT RUN" start="2026-08-23T02:08:44.027206" elapsed="0.000021"/>
</return>
<var>${count}</var>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Count all instances of the specified device in the Netconf topology (usually 0 or 1).</doc>
<status status="FAIL" start="2026-08-23T02:08:43.989169" elapsed="0.038174">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${count}</arg>
<arg>0</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:44.027571" elapsed="0.000030"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Check that there are no instances of the specified device in the Netconf topology.</doc>
<status status="FAIL" start="2026-08-23T02:08:43.988045" elapsed="0.039676">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Generate URI" owner="Restconf">
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>config</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="NOT RUN" start="2026-08-23T02:08:44.037428" elapsed="0.000029"/>
</kw>
<kw name="No Content From URI" owner="Utils">
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Issue a Get On Session and return on error 404 (No content) or will fail and log the content.
Issues a Get On Session for ${uri} in default using headers from
{'Content-Type': 'application/json'}. If the request returns a HTTP error, fails. Otherwise
returns the data obtained by the request.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:44.040965" elapsed="0.000026"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device has no Netconf connectors nor associated data.</doc>
<status status="FAIL" start="2026-08-23T02:08:43.986687" elapsed="0.054444">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Check_Device_Completely_Gone" owner="NetconfKeywords">
<kw name="Check_Device_Has_No_Netconf_Connector" owner="NetconfKeywords">
<kw name="Count_Netconf_Connectors_For_Device" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:45.059795" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:45.056552" elapsed="0.003308"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:45.060355" elapsed="0.000034"/>
</kw>
<var name="${nv}"/>
<status status="NOT RUN" start="2026-08-23T02:08:45.060129" elapsed="0.000313"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="NOT RUN" start="2026-08-23T02:08:45.059954" elapsed="0.000530"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:45.060975" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:45.060583" elapsed="0.000478"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:45.062177" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:45.061436" elapsed="0.000781"/>
</kw>
<status status="PASS" start="2026-08-23T02:08:45.061097" elapsed="0.001173"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:45.062548" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:45.062309" elapsed="0.000323"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:45.060555" elapsed="0.002109"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:45.062719" elapsed="0.000048"/>
</return>
<msg time="2026-08-23T02:08:45.062968" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:08:45.055868" elapsed="0.007139"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:45.063077" elapsed="0.000038"/>
</return>
<msg time="2026-08-23T02:08:45.063286" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:08:45.055131" elapsed="0.008192"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:45.071489" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:45.071217" elapsed="0.000331"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:45.071966" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:45.071703" elapsed="0.000307"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:08:45.078439" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:08:45.078495" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '407'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:08:45.078614" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:08:45.074126" elapsed="0.004901">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:08:45.072078" elapsed="0.007033">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:45.079308" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:45.079148" elapsed="0.000225"/>
</branch>
<status status="FAIL" start="2026-08-23T02:08:45.072058" elapsed="0.007338">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:45.079785" elapsed="0.000115"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:45.080017" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:45.079978" elapsed="0.000083"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:45.079959" elapsed="0.000123"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:45.080227" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:08:45.080297" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:08:45.066870" elapsed="0.013538">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:45.080479" elapsed="0.000015"/>
</return>
<var>${mounts}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:08:45.063647" elapsed="0.016935">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${mounts}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:45.080750" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${actual_count}</var>
<arg>len('''${mounts}'''.split('"node-id": "${device_name}"'))-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:45.080942" elapsed="0.000022"/>
</kw>
<return>
<value>${actual_count}</value>
<status status="NOT RUN" start="2026-08-23T02:08:45.081008" elapsed="0.000015"/>
</return>
<var>${count}</var>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Count all instances of the specified device in the Netconf topology (usually 0 or 1).</doc>
<status status="FAIL" start="2026-08-23T02:08:45.043716" elapsed="0.037391">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${count}</arg>
<arg>0</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:45.081268" elapsed="0.000021"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Check that there are no instances of the specified device in the Netconf topology.</doc>
<status status="FAIL" start="2026-08-23T02:08:45.042998" elapsed="0.038379">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Generate URI" owner="Restconf">
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>config</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="NOT RUN" start="2026-08-23T02:08:45.088798" elapsed="0.000030"/>
</kw>
<kw name="No Content From URI" owner="Utils">
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Issue a Get On Session and return on error 404 (No content) or will fail and log the content.
Issues a Get On Session for ${uri} in default using headers from
{'Content-Type': 'application/json'}. If the request returns a HTTP error, fails. Otherwise
returns the data obtained by the request.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:45.092410" elapsed="0.000027"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device has no Netconf connectors nor associated data.</doc>
<status status="FAIL" start="2026-08-23T02:08:45.041966" elapsed="0.050572">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<msg time="2026-08-23T02:08:45.092645" level="FAIL">Keyword 'Check_Device_Completely_Gone' failed after retrying for 10 seconds. The last error was: HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${timeout}</arg>
<arg>${period}</arg>
<arg>Check_Device_Completely_Gone</arg>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-08-23T02:08:34.515920" elapsed="10.576829">Keyword 'Check_Device_Completely_Gone' failed after retrying for 10 seconds. The last error was: HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<arg>${device_name}</arg>
<doc>Wait until all netconf connectors for the device with the given name disappear.
Call of Remove_Device_From_Netconf returns before netconf gets
around deleting the device's connector. To ensure the device is
really gone from netconf, use this keyword to make sure all
connectors disappear. If a call to Remove_Device_From_Netconf
is not made before using this keyword, the wait will fail.
Using this keyword is more readable than putting the WUKS below
into a test case.</doc>
<status status="FAIL" start="2026-08-23T02:08:34.515482" elapsed="10.577399">Keyword 'Check_Device_Completely_Gone' failed after retrying for 10 seconds. The last error was: HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<doc>Wait for the device to completely disappear.</doc>
<status status="FAIL" start="2026-08-23T02:08:34.429948" elapsed="10.663100">Keyword 'Check_Device_Completely_Gone' failed after retrying for 10 seconds. The last error was: HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</test>
<test id="s1-s4-s1-t13" name="Configure_The_Device_Back" line="122">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-08-23T02:08:45.096488" elapsed="0.000240"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:08:45.096226" elapsed="0.000557"/>
</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-08-23T02:08:45.097868" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:45.097728" elapsed="0.000190"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:45.097708" elapsed="0.000233"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:08:45.102947" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:45.102819" elapsed="0.000176"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:45.102801" elapsed="0.000217"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:08:45.104051" 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-08-23T02:08:45.103627" elapsed="0.000452"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:08:45.104537" 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-08-23T02:08:45.104239" elapsed="0.000324"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:08:45.104607" elapsed="0.000032"/>
</return>
<msg time="2026-08-23T02:08:45.104765" 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-08-23T02:08:45.103250" elapsed="0.001540"/>
</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-08-23T02:08:45.110444" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:45.110335" elapsed="0.000193"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:45.110316" elapsed="0.000236"/>
</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-08-23T02:08:45.111834" elapsed="0.000039"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:45.111722" elapsed="0.000184"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:45.111704" elapsed="0.000225"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:08:45.112469" 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-08-23T02:08:45.112073" elapsed="0.000422"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:08:45.112935" 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-08-23T02:08:45.112654" elapsed="0.000308"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:08:45.143340" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:08:45.113513" elapsed="0.030033"/>
</kw>
<msg time="2026-08-23T02:08:45.143745" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:08:45.143792" 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 "n "e "t "c "o "n "f "...</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-08-23T02:08:45.113119" elapsed="0.030711"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:08:45.162454" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "o "n "f "i "g "u "r "e "_ "T "h "e "_ "D "e "v "i "c "e "_ "B "a "c "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-08-23T02:08:45.144480" elapsed="0.018177"/>
</kw>
<msg time="2026-08-23T02:08:45.162843" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:08:45.162911" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "o "n "f "i "g "u "r "e "_ "T "h "e "_ "D ...</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-08-23T02:08:45.144044" elapsed="0.018904"/>
</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-08-23T02:08:45.163273" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:45.163035" elapsed="0.000350"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:45.163011" elapsed="0.000403"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:45.163984" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "o "n "f "i "g "u "r "e "_ "T "h "e "_ "D "e "v "i "c "e "_ "B "a "c "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-08-23T02:08:45.163559" elapsed="0.000495"/>
</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-08-23T02:08:45.164334" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:45.164120" elapsed="0.000291"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:45.164102" elapsed="0.000334"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:08:45.164472" elapsed="0.000036"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-23T02:08:45.168018" elapsed="0.000152"/>
</kw>
<msg time="2026-08-23T02:08:45.168247" 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-08-23T02:08:45.167224" elapsed="0.001135"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:45.169461" elapsed="0.000040"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:45.170767" elapsed="0.000038"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:08:45.165408" elapsed="0.005500"/>
</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-08-23T02:08:45.164767" elapsed="0.006270"/>
</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-08-23T02:08:45.111421" elapsed="0.059715"/>
</kw>
<msg time="2026-08-23T02:08:45.171230" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:08:45.171274" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "o "n "f "i "g "u "r "e "_ "T "h "e "_ "D ...</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-08-23T02:08:45.110721" elapsed="0.060591"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:08:45.171532" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:08:45.171388" elapsed="0.000204"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:45.171370" elapsed="0.000247"/>
</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-08-23T02:08:45.172078" 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-08-23T02:08:45.172415" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:08:45.172486" 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-08-23T02:08:45.109997" elapsed="0.062598"/>
</kw>
<msg time="2026-08-23T02:08:45.172688" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:08:45.172732" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "o "n "f "i "g "u "r "e "_ "T "h "e "_ "D ...</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-08-23T02:08:45.105180" elapsed="0.067588"/>
</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-08-23T02:08:45.173257" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:45.173004" elapsed="0.000307"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:45.172825" elapsed="0.000510"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:08:45.105040" elapsed="0.068319"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:08:45.104862" elapsed="0.068532"/>
</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-08-23T02:08:45.102438" elapsed="0.071013"/>
</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-08-23T02:08:45.097386" elapsed="0.076121"/>
</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-08-23T02:08:45.096953" elapsed="0.076599"/>
</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-08-23T02:08:45.094080" elapsed="0.079526"/>
</kw>
<kw name="Configure_Device_In_Netconf" owner="NetconfKeywords">
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T02:08:45.194820" elapsed="0.000453"/>
</kw>
<msg time="2026-08-23T02:08:45.195328" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:08:45.194460" elapsed="0.000924"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return scandium if vanadium is at least ${lower_bound},
return calcium otherwise.</doc>
<status status="PASS" start="2026-08-23T02:08:45.194069" elapsed="0.001464"/>
</kw>
<msg time="2026-08-23T02:08:45.195576" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:08:45.185370" elapsed="0.010250"/>
</kw>
<msg time="2026-08-23T02:08:45.196274" level="INFO">${version} = scandium</msg>
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-08-23T02:08:45.185019" elapsed="0.011381"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:08:45.198824" level="INFO">${mapping} = {'DEVICE_IP': '10.30.170.120', 'DEVICE_NAME': 'netconf-test-device', 'DEVICE_PORT': '17830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'topsecret', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/t...</msg>
<var>${mapping}</var>
<arg>DEVICE_IP=${device_address}</arg>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>DEVICE_PORT=${device_port}</arg>
<arg>DEVICE_USER=${device_user}</arg>
<arg>DEVICE_PASSWORD=${device_password}</arg>
<arg>DEVICE_KEY=${device_key}</arg>
<arg>SCHEMA_DIRECTORY=${schema_directory}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-23T02:08:45.196985" elapsed="0.001937"/>
</kw>
<if>
<branch type="IF" condition="'${http_method}'=='post'">
<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-08-23T02:08:45.236666" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:45.236273" elapsed="0.000421"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T02:08:45.237508" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/rpc-create-device.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-23T02:08:45.237213" elapsed="0.000380">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/rpc-create-device.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-23T02:08:45.237688" 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-08-23T02:08:45.236874" elapsed="0.000839"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:08:45.238284" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device/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-08-23T02:08:45.237897" elapsed="0.000414"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:08:45.238611" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/rpc-create-device/location.uri"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/rpc-create-device/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:08:45.238891" level="INFO">${template} = $RESTCONF_ROOT/operations/netconf-node-topology:create-device
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:08:45.238469" elapsed="0.000448"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:45.239324" level="INFO">$RESTCONF_ROOT/operations/netconf-node-topology:create-device
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:45.239078" 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-08-23T02:08:45.240556" level="INFO">mapping: {'DEVICE_IP': '10.30.170.120', 'DEVICE_NAME': 'netconf-test-device', 'DEVICE_PORT': '17830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'topsecret', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:45.240068" elapsed="0.000535"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:08:45.241043" 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-08-23T02:08:45.240758" elapsed="0.000311"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:08:45.242076" level="INFO">${value} = 10.30.170.120</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:08:45.241458" elapsed="0.000644"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:08:45.243348" level="INFO">${encoded} = 10.30.170.120</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-08-23T02:08:45.242758" elapsed="0.000634"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:08:45.243527" elapsed="0.000040"/>
</return>
<msg time="2026-08-23T02:08:45.243788" level="INFO">${encoded_value} = 10.30.170.120</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-08-23T02:08:45.242287" elapsed="0.001526"/>
</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-08-23T02:08:45.243992" elapsed="0.000581"/>
</kw>
<var name="${key}">DEVICE_IP</var>
<var name="${value}">10.30.170.120</var>
<status status="PASS" start="2026-08-23T02:08:45.241320" elapsed="0.003294"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:08:45.245443" level="INFO">${value} = netconf-test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:08:45.244896" elapsed="0.000573"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:08:45.246690" level="INFO">${encoded} = netconf-test-device</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-08-23T02:08:45.246144" elapsed="0.000589"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:08:45.247021" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T02:08:45.247322" level="INFO">${encoded_value} = netconf-test-device</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-08-23T02:08:45.245652" elapsed="0.001696"/>
</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-08-23T02:08:45.247499" elapsed="0.000549"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:08:45.244731" elapsed="0.003359"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:08:45.248984" level="INFO">${value} = 17830</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:08:45.248333" elapsed="0.000677"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:08:45.250200" level="INFO">${encoded} = 17830</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-08-23T02:08:45.249649" elapsed="0.000593"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:08:45.250368" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T02:08:45.250607" level="INFO">${encoded_value} = 17830</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-08-23T02:08:45.249191" elapsed="0.001441"/>
</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-08-23T02:08:45.250782" elapsed="0.000612"/>
</kw>
<var name="${key}">DEVICE_PORT</var>
<var name="${value}">17830</var>
<status status="PASS" start="2026-08-23T02:08:45.248203" elapsed="0.003234"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:08:45.252244" level="INFO">${value} = admin</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:08:45.251682" elapsed="0.000588"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:08:45.253550" level="INFO">${encoded} = admin</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-08-23T02:08:45.253016" elapsed="0.000577"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:08:45.253721" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T02:08:45.253985" level="INFO">${encoded_value} = admin</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-08-23T02:08:45.252452" elapsed="0.001559"/>
</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-08-23T02:08:45.254158" elapsed="0.000530"/>
</kw>
<var name="${key}">DEVICE_USER</var>
<var name="${value}">admin</var>
<status status="PASS" start="2026-08-23T02:08:45.251552" elapsed="0.003180"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:08:45.255609" level="INFO">${value} = topsecret</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:08:45.255071" elapsed="0.000564"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:08:45.256980" level="INFO">${encoded} = topsecret</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-08-23T02:08:45.256299" elapsed="0.000725"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:08:45.257152" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T02:08:45.257391" level="INFO">${encoded_value} = topsecret</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-08-23T02:08:45.255818" elapsed="0.001598"/>
</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-08-23T02:08:45.257565" elapsed="0.000546"/>
</kw>
<var name="${key}">DEVICE_PASSWORD</var>
<var name="${value}">topsecret</var>
<status status="PASS" start="2026-08-23T02:08:45.254937" elapsed="0.003218"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:08:45.259025" level="INFO">${value} = device-key</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:08:45.258397" elapsed="0.000654"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:08:45.260424" level="INFO">${encoded} = device-key</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-08-23T02:08:45.259891" elapsed="0.000576"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:08:45.260611" elapsed="0.000032"/>
</return>
<msg time="2026-08-23T02:08:45.260951" level="INFO">${encoded_value} = device-key</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-08-23T02:08:45.259410" elapsed="0.001569"/>
</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-08-23T02:08:45.261128" elapsed="0.000534"/>
</kw>
<var name="${key}">DEVICE_KEY</var>
<var name="${value}">device-key</var>
<status status="PASS" start="2026-08-23T02:08:45.258268" elapsed="0.003437"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:08:45.262503" level="INFO">${value} = /tmp/schema</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:08:45.261966" elapsed="0.000563"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:08:45.263784" level="INFO">${encoded} = /tmp/schema</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-08-23T02:08:45.263259" elapsed="0.000568"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:08:45.263971" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T02:08:45.264256" level="INFO">${encoded_value} = /tmp/schema</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-08-23T02:08:45.262710" elapsed="0.001572"/>
</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-08-23T02:08:45.264430" elapsed="0.000641"/>
</kw>
<var name="${key}">SCHEMA_DIRECTORY</var>
<var name="${value}">/tmp/schema</var>
<status status="PASS" start="2026-08-23T02:08:45.261818" elapsed="0.003296"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:08:45.265911" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:08:45.265358" elapsed="0.000580"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:08:45.267210" level="INFO">${encoded} = /rests</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-08-23T02:08:45.266572" elapsed="0.000679"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:08:45.267377" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T02:08:45.267615" level="INFO">${encoded_value} = /rests</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-08-23T02:08:45.266119" elapsed="0.001521"/>
</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-08-23T02:08:45.267789" elapsed="0.000536"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-23T02:08:45.265227" elapsed="0.003140"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-23T02:08:45.241127" elapsed="0.027275"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-23T02:08:45.268446" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:08:45.268608" level="INFO">${mapping_to_use} = {'DEVICE_IP': '10.30.170.120', 'DEVICE_NAME': 'netconf-test-device', 'DEVICE_PORT': '17830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'topsecret', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/t...</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-23T02:08:45.239728" elapsed="0.028906"/>
</kw>
<status status="PASS" start="2026-08-23T02:08:45.239433" elapsed="0.029232"/>
</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-08-23T02:08:45.268934" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:45.268704" elapsed="0.000290"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:45.239414" elapsed="0.029601"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:08:45.269936" level="INFO">${final_text} = /rests/operations/netconf-node-topology:create-device</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-08-23T02:08:45.269158" elapsed="0.000806"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T02:08:45.270012" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device/${file_name}.</doc>
<status status="PASS" start="2026-08-23T02:08:45.235627" elapsed="0.034509"/>
</kw>
<msg time="2026-08-23T02:08:45.270189" 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-08-23T02:08:45.222947" elapsed="0.047291"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:45.282788" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:45.295195" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:45.307826" 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-08-23T02:08:45.308069" 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-08-23T02:08:45.308242" 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-08-23T02:08:45.308604" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:45.308462" elapsed="0.000197"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:45.308447" 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-08-23T02:08:45.308818" 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-08-23T02:08:45.309003" 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-08-23T02:08:45.309166" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T02:08:45.308418" elapsed="0.000812"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T02:08:45.308318" 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-08-23T02:08:45.309401" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:45.309476" elapsed="0.000015"/>
</return>
<msg time="2026-08-23T02:08:45.309587" level="INFO">${uri} = /rests/operations/netconf-node-topology:create-device</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-08-23T02:08:45.218683" elapsed="0.090929"/>
</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-08-23T02:08:45.334296" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device.vanadium/post_data.xml</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:45.333922" elapsed="0.000403"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T02:08:45.335045" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/rpc-create-device.vanadium/post_data.xml' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-23T02:08:45.334809" elapsed="0.000301">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/rpc-create-device.vanadium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-08-23T02:08:45.335203" 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-08-23T02:08:45.334483" elapsed="0.000744"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:08:45.335769" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device/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-08-23T02:08:45.335389" elapsed="0.000407"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:08:45.336105" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/rpc-create-device/post_data.xml"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/rpc-create-device/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:08:45.336280" level="INFO">${template} = &lt;input xmlns="urn:opendaylight:netconf-node-topology"&gt;
   &lt;node-id&gt;$DEVICE_NAME&lt;/node-id&gt;
   &lt;host&gt;$DEVICE_IP&lt;/host&gt;
   &lt;port&gt;$DEVICE_PORT&lt;/port&gt;
   &lt;login-password&gt;
     &lt;username&gt;$DEVICE_USER&lt;/usern...</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:08:45.335971" elapsed="0.000339"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:45.336707" level="INFO">&lt;input xmlns="urn:opendaylight:netconf-node-topology"&gt;
   &lt;node-id&gt;$DEVICE_NAME&lt;/node-id&gt;
   &lt;host&gt;$DEVICE_IP&lt;/host&gt;
   &lt;port&gt;$DEVICE_PORT&lt;/port&gt;
   &lt;login-password&gt;
     &lt;username&gt;$DEVICE_USER&lt;/username&gt;
     &lt;password&gt;$DEVICE_PASSWORD&lt;/password&gt;
   &lt;/login-password&gt;
   &lt;tcp-only&gt;false&lt;/tcp-only&gt;
   &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
 &lt;/input&gt;
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:45.336466" elapsed="0.000291"/>
</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-08-23T02:08:45.337129" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:45.336822" elapsed="0.000365"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:45.337680" level="INFO">${mapping_to_use} = {'DEVICE_IP': '10.30.170.120', 'DEVICE_NAME': 'netconf-test-device', 'DEVICE_PORT': '17830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'topsecret', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/t...</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-08-23T02:08:45.337352" elapsed="0.000389"/>
</kw>
<status status="PASS" start="2026-08-23T02:08:45.337212" elapsed="0.000567"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:45.336804" elapsed="0.000997"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:08:45.338648" level="INFO">${final_text} = &lt;input xmlns="urn:opendaylight:netconf-node-topology"&gt;
   &lt;node-id&gt;netconf-test-device&lt;/node-id&gt;
   &lt;host&gt;10.30.170.120&lt;/host&gt;
   &lt;port&gt;17830&lt;/port&gt;
   &lt;login-password&gt;
     &lt;username&gt;admin&lt;/username&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-08-23T02:08:45.337963" elapsed="0.000716"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T02:08:45.338728" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device/${file_name}.</doc>
<status status="PASS" start="2026-08-23T02:08:45.333282" elapsed="0.005589"/>
</kw>
<msg time="2026-08-23T02:08:45.338926" 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-08-23T02:08:45.320578" elapsed="0.018397"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:45.351653" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:45.363992" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:45.376458" 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-08-23T02:08:45.376650" 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-08-23T02:08:45.376819" 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-08-23T02:08:45.377191" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:45.377051" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:45.377037" 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-08-23T02:08:45.377405" 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-08-23T02:08:45.377566" 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-08-23T02:08:45.377726" elapsed="0.000019"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T02:08:45.377009" elapsed="0.000768"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T02:08:45.376909" 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-08-23T02:08:45.377959" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:45.378034" elapsed="0.000016"/>
</return>
<msg time="2026-08-23T02:08:45.378176" level="INFO">${data} = &lt;input xmlns="urn:opendaylight:netconf-node-topology"&gt;
   &lt;node-id&gt;netconf-test-device&lt;/node-id&gt;
   &lt;host&gt;10.30.170.120&lt;/host&gt;
   &lt;port&gt;17830&lt;/port&gt;
   &lt;login-password&gt;
     &lt;username&gt;admin&lt;/username&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-08-23T02:08:45.319720" elapsed="0.058520"/>
</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-08-23T02:08:45.379485" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/rpc-create-device/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-08-23T02:08:45.379251" elapsed="0.000298">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/rpc-create-device/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-23T02:08:45.379640" 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-08-23T02:08:45.378915" 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-08-23T02:08:45.379994" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:45.379734" elapsed="0.000317"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:45.380538" 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-08-23T02:08:45.380247" elapsed="0.000318"/>
</kw>
<status status="PASS" start="2026-08-23T02:08:45.380076" elapsed="0.000523"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:45.379715" elapsed="0.000906"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:08:45.382997" 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-08-23T02:08:45.380768" elapsed="0.002256"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-23T02:08:45.383075" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:08:45.383229" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-23T02:08:45.378577" elapsed="0.004677"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:45.384777" level="INFO">/rests/operations/netconf-node-topology:create-device</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:45.384531" elapsed="0.000291"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:45.385227" level="INFO">&lt;input xmlns="urn:opendaylight:netconf-node-topology"&gt;
   &lt;node-id&gt;netconf-test-device&lt;/node-id&gt;
   &lt;host&gt;10.30.170.120&lt;/host&gt;
   &lt;port&gt;17830&lt;/port&gt;
   &lt;login-password&gt;
     &lt;username&gt;admin&lt;/username&gt;
     &lt;password&gt;topsecret&lt;/password&gt;
   &lt;/login-password&gt;
   &lt;tcp-only&gt;false&lt;/tcp-only&gt;
   &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
 &lt;/input&gt;</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:45.384989" elapsed="0.000288"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:45.385661" 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-08-23T02:08:45.385421" elapsed="0.000283"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:45.386108" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:45.385866" elapsed="0.000285"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-08-23T02:08:45.386993" 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-08-23T02:08:45.386780" elapsed="0.000239"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-08-23T02:08:45.387343" 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-08-23T02:08:45.387170" 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-08-23T02:08:45.387511" elapsed="0.000195"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:45.388123" 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-08-23T02:08:45.387875" elapsed="0.000292"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-08-23T02:08:45.388208" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:08:45.388363" 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-08-23T02:08:45.386379" 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">
<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="NOT RUN" start="2026-08-23T02:08:45.390761" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:45.388458" elapsed="0.002369"/>
</branch>
<branch type="ELSE">
<kw name="POST On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:08:45.395351" level="INFO">POST Request : url=http://10.30.170.114:8181/rests/operations/netconf-node-topology:create-device 
 path_url=/rests/operations/netconf-node-topology:create-device 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Content-Length': '337', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="urn:opendaylight:netconf-node-topology"&gt;
   &lt;node-id&gt;netconf-test-device&lt;/node-id&gt;
   &lt;host&gt;10.30.170.120&lt;/host&gt;
   &lt;port&gt;17830&lt;/port&gt;
   &lt;login-password&gt;
     &lt;username&gt;admin&lt;/username&gt;
     &lt;password&gt;topsecret&lt;/password&gt;
   &lt;/login-password&gt;
   &lt;tcp-only&gt;false&lt;/tcp-only&gt;
   &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
 &lt;/input&gt; 
 </msg>
<msg time="2026-08-23T02:08:45.395406" level="INFO">POST Response : url=http://10.30.170.114:8181/rests/operations/netconf-node-topology:create-device 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:08:45.395512" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-node-topology:create-device</msg>
<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="FAIL" start="2026-08-23T02:08:45.391010" elapsed="0.005057">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-node-topology:create-device</status>
</kw>
<status status="FAIL" start="2026-08-23T02:08:45.390869" elapsed="0.005322">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-node-topology:create-device</status>
</branch>
<status status="FAIL" start="2026-08-23T02:08:45.388440" elapsed="0.007793">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-node-topology:create-device</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:45.396749" elapsed="0.000037"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:45.396966" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:45.396913" elapsed="0.000112"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:45.396888" elapsed="0.000167"/>
</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-08-23T02:08:45.397251" elapsed="0.000030"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:08:45.397344" elapsed="0.000022"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>content_type=${content_type}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>POST data to given URI, check status code and return response text.
${content_type} and ${accept} are mandatory Python objects with headers to use.
If ${normalize_json}, normalize text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:08:45.383578" elapsed="0.013914">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-node-topology:create-device</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:45.397602" elapsed="0.000022"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>extension=xml</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>content_type=${HEADERS_XML}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>endline=${\n}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve URI and data from folder, call Post_To_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-23T02:08:45.206330" elapsed="0.191403">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-node-topology:create-device</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=response</arg>
<arg>mapping=${mapping}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:45.398156" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:45.397912" elapsed="0.000339"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:45.397887" elapsed="0.000397"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:45.398330" elapsed="0.000020"/>
</return>
<arg>folder=${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Add arguments sensible for XML data, return Post_Templated response text.
Optionally, verification against response.xml (no iteration) is called.</doc>
<status status="FAIL" start="2026-08-23T02:08:45.200032" elapsed="0.198455">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-node-topology:create-device</status>
</kw>
<status status="FAIL" start="2026-08-23T02:08:45.199158" elapsed="0.199421">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-node-topology:create-device</status>
</branch>
<branch type="ELSE">
<kw name="Put_As_Xml_Templated" owner="TemplatedRequests">
<arg>folder=${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Add arguments sensible for XML data, return Put_Templated response text.
Optionally, verification against response.xml (no iteration) is called.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:45.398973" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:45.398620" elapsed="0.000446"/>
</branch>
<status status="FAIL" start="2026-08-23T02:08:45.199099" elapsed="0.199998">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-node-topology:create-device</status>
</if>
<kw name="Set To Dictionary" owner="Collections">
<arg>${NetconfKeywords__mounted_device_types}</arg>
<arg>${device_name}</arg>
<arg>${device_type}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:45.399305" elapsed="0.000029"/>
</kw>
<arg>${device_name}</arg>
<arg>device_type=${device_type_rpc_create}</arg>
<arg>http_timeout=2</arg>
<arg>http_method=post</arg>
<doc>Tell Netconf about the specified device so it can add it into its configuration.</doc>
<status status="FAIL" start="2026-08-23T02:08:45.173898" elapsed="0.225619">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-node-topology:create-device</status>
</kw>
<doc>Configure the device again.
This is the second step of the device configuration.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-08-23T02:08:45.093440" elapsed="0.306300">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-node-topology:create-device</status>
</test>
<test id="s1-s4-s1-t14" name="Wait_For_Device_To_Reconnect" line="132">
<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-08-23T02:08:45.404410" elapsed="0.000295"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:08:45.404049" elapsed="0.000732"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:08:45.406251" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:45.406018" elapsed="0.000299"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:45.405992" elapsed="0.000356"/>
</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-08-23T02:08:45.411561" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:45.411453" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:45.411435" elapsed="0.000194"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:08:45.412621" 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-08-23T02:08:45.412242" elapsed="0.000405"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:08:45.413116" 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-08-23T02:08:45.412803" elapsed="0.000339"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:08:45.413187" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:08:45.413341" 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-08-23T02:08:45.411866" elapsed="0.001500"/>
</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-08-23T02:08:45.418824" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:45.418717" elapsed="0.000169"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:45.418698" elapsed="0.000211"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:08:45.420128" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:45.420022" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:45.420004" elapsed="0.000192"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:08:45.420716" 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-08-23T02:08:45.420335" elapsed="0.000407"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:08:45.421178" 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-08-23T02:08:45.420917" elapsed="0.000287"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:08:45.457715" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:08:45.421749" elapsed="0.036184"/>
</kw>
<msg time="2026-08-23T02:08:45.458114" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:08:45.458160" 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 "n "e "t "c "o "n "f "...</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-08-23T02:08:45.421360" elapsed="0.036837"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:08:45.480601" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "W "a "i "t "_ "F "o "r "_ "D "e "v "i "c "e "_ "T "o "_ "R "e "c "o "n "n "e "c "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-08-23T02:08:45.458757" elapsed="0.022031"/>
</kw>
<msg time="2026-08-23T02:08:45.480992" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:08:45.481038" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "W "a "i "t "_ "F "o "r "_ "D "e "v "i "c "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-08-23T02:08:45.458364" elapsed="0.022710"/>
</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-08-23T02:08:45.481368" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:45.481150" elapsed="0.000340"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:45.481130" elapsed="0.000389"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:45.482071" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "W "a "i "t "_ "F "o "r "_ "D "e "v "i "c "e "_ "T "o "_ "R "e "c "o "n "n "e "c "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-08-23T02:08:45.481659" elapsed="0.000482"/>
</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-08-23T02:08:45.482419" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:45.482208" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:45.482190" elapsed="0.000331"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:08:45.482555" 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-08-23T02:08:45.485796" elapsed="0.000309"/>
</kw>
<msg time="2026-08-23T02:08:45.486183" 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-08-23T02:08:45.485125" elapsed="0.001161"/>
</kw>
<kw name="Open 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-08-23T02:08:45.487362" elapsed="0.000040"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:45.488489" elapsed="0.000040"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:08:45.483427" elapsed="0.005185"/>
</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-08-23T02:08:45.482810" elapsed="0.005928"/>
</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-08-23T02:08:45.419696" elapsed="0.069144"/>
</kw>
<msg time="2026-08-23T02:08:45.488981" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:08:45.489026" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "W "a "i "t "_ "F "o "r "_ "D "e "v "i "c "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-08-23T02:08:45.419057" elapsed="0.070006"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:08:45.489245" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:08:45.489139" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:45.489121" 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-08-23T02:08:45.489717" 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-08-23T02:08:45.490379" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:08:45.490453" 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-08-23T02:08:45.418367" elapsed="0.072193"/>
</kw>
<msg time="2026-08-23T02:08:45.490653" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:08:45.490697" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "W "a "i "t "_ "F "o "r "_ "D "e "v "i "c "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-08-23T02:08:45.413726" elapsed="0.077008"/>
</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-08-23T02:08:45.491072" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:45.490807" elapsed="0.000320"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:45.490790" elapsed="0.000360"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:08:45.413586" elapsed="0.077588"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:08:45.413417" elapsed="0.077785"/>
</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-08-23T02:08:45.411092" elapsed="0.080161"/>
</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-08-23T02:08:45.405593" elapsed="0.085715"/>
</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-08-23T02:08:45.405008" elapsed="0.086345"/>
</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-08-23T02:08:45.401032" elapsed="0.090372"/>
</kw>
<kw name="Wait_Device_Connected" owner="NetconfKeywords">
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:45.503313" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:45.501238" elapsed="0.002102"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:45.504018" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:45.503666" elapsed="0.000378"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:08:45.503517" elapsed="0.000563"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:45.504619" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:45.504305" elapsed="0.000340"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:08:45.504158" elapsed="0.000522"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:08:45.503391" elapsed="0.001318"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:45.505025" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:45.504771" elapsed="0.000312"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:45.505800" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:45.505332" elapsed="0.000494"/>
</kw>
<status status="PASS" start="2026-08-23T02:08:45.505107" elapsed="0.000772"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:45.506065" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:45.505905" elapsed="0.000216"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:45.504753" elapsed="0.001388"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:45.506174" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:08:45.506320" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:08:45.500771" elapsed="0.005575"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:45.506392" elapsed="0.000025"/>
</return>
<msg time="2026-08-23T02:08:45.506532" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:08:45.500223" elapsed="0.006333"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:45.514061" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:45.513793" elapsed="0.000314"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:45.514498" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:45.514257" elapsed="0.000289"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:08:45.520451" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:08:45.520508" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:08:45.520607" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:08:45.516672" elapsed="0.004289">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:08:45.514612" elapsed="0.006429">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:45.521223" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:45.521074" elapsed="0.000246"/>
</branch>
<status status="FAIL" start="2026-08-23T02:08:45.514593" elapsed="0.006751">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:45.521698" elapsed="0.000025"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:45.521828" elapsed="0.000031"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:45.521792" elapsed="0.000097"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:45.521775" elapsed="0.000135"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:45.522050" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:08:45.522119" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:08:45.509442" elapsed="0.012782">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:45.522292" elapsed="0.000016"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:08:45.506774" elapsed="0.015612">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:45.522554" elapsed="0.000021"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:08:45.492626" elapsed="0.030035">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:46.539831" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:46.537598" elapsed="0.002278"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:46.540563" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:46.540211" elapsed="0.000378"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:08:46.540060" elapsed="0.000566"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:46.541348" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:46.540870" elapsed="0.000504"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:08:46.540705" elapsed="0.000705"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:08:46.539930" elapsed="0.001510"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:46.541742" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:46.541503" elapsed="0.000296"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:46.542538" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:46.542071" elapsed="0.000497"/>
</kw>
<status status="PASS" start="2026-08-23T02:08:46.541823" elapsed="0.000784"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:46.542791" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:46.542631" elapsed="0.000233"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:46.541485" elapsed="0.001401"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:46.542921" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:08:46.543071" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:08:46.537152" elapsed="0.005945"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:46.543142" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:08:46.543282" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:08:46.536585" elapsed="0.006722"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:46.550585" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:46.550336" elapsed="0.000295"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:46.551042" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:46.550781" elapsed="0.000304"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:08:46.557598" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:08:46.557689" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:08:46.557871" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:08:46.553311" elapsed="0.005016">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:08:46.551150" elapsed="0.007288">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:46.558697" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:46.558485" elapsed="0.000301"/>
</branch>
<status status="FAIL" start="2026-08-23T02:08:46.551132" elapsed="0.007686">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:46.559350" elapsed="0.000036"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:46.559532" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:46.559481" elapsed="0.000108"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:46.559458" elapsed="0.000161"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:46.559809" elapsed="0.000034"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:08:46.559930" elapsed="0.000021"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:08:46.546030" elapsed="0.014045">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:46.560169" elapsed="0.000021"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:08:46.543566" elapsed="0.016732">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:46.560527" elapsed="0.000029"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:08:46.523348" elapsed="0.037327">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:47.578980" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:47.576810" elapsed="0.002287"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:47.579856" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:47.579483" elapsed="0.000402"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:08:47.579327" elapsed="0.000595"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:47.580526" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:47.580158" elapsed="0.000411"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:08:47.580008" elapsed="0.000613"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:08:47.579174" elapsed="0.001489"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:47.581151" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:47.580764" elapsed="0.000468"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:47.582260" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:47.581586" elapsed="0.000713"/>
</kw>
<status status="PASS" start="2026-08-23T02:08:47.581267" elapsed="0.001082"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:47.582607" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:47.582385" elapsed="0.000299"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:47.580736" elapsed="0.001977"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:47.582765" elapsed="0.000049"/>
</return>
<msg time="2026-08-23T02:08:47.583012" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:08:47.576329" elapsed="0.006720"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:47.583115" elapsed="0.000035"/>
</return>
<msg time="2026-08-23T02:08:47.583312" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:08:47.575718" elapsed="0.007629"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:47.590969" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:47.590692" elapsed="0.000324"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:47.591406" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:47.591165" elapsed="0.000284"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:08:47.597831" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:08:47.597910" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:08:47.598026" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:08:47.593687" elapsed="0.004742">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:08:47.591515" elapsed="0.006999">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:47.598702" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:47.598551" elapsed="0.000248"/>
</branch>
<status status="FAIL" start="2026-08-23T02:08:47.591496" elapsed="0.007328">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:47.599217" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:47.599350" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:47.599313" elapsed="0.000077"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:47.599296" elapsed="0.000116"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:47.599550" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:08:47.599619" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:08:47.586386" elapsed="0.013338">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:47.599792" elapsed="0.000016"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:08:47.583650" elapsed="0.016267">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:47.600082" elapsed="0.000022"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:08:47.561627" elapsed="0.038562">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:48.617540" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:48.615320" elapsed="0.002259"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:48.618315" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:48.617986" elapsed="0.000356"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:08:48.617814" elapsed="0.000564"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:48.618952" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:48.618612" elapsed="0.000367"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:08:48.618461" elapsed="0.000553"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:08:48.617661" elapsed="0.001383"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:48.619375" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:48.619113" elapsed="0.000320"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:48.620171" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:48.619684" elapsed="0.000515"/>
</kw>
<status status="PASS" start="2026-08-23T02:08:48.619458" elapsed="0.000778"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:48.620421" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:48.620262" elapsed="0.000215"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:48.619093" elapsed="0.001405"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:48.620535" elapsed="0.000034"/>
</return>
<msg time="2026-08-23T02:08:48.620694" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:08:48.614817" elapsed="0.005903"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:48.620767" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:08:48.620927" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:08:48.614150" elapsed="0.006804"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:48.628379" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:48.628123" elapsed="0.000303"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:48.628927" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:48.628575" elapsed="0.000397"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:08:48.635564" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:08:48.635639" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:08:48.635806" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:08:48.631097" elapsed="0.005303">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:08:48.629039" elapsed="0.007483">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:48.636799" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:48.636574" elapsed="0.000349"/>
</branch>
<status status="FAIL" start="2026-08-23T02:08:48.629020" elapsed="0.007940">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:48.637514" elapsed="0.000043"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:48.637767" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:48.637704" elapsed="0.000126"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:48.637673" 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>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:48.638091" elapsed="0.000031"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:08:48.638193" elapsed="0.000022"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:08:48.623709" elapsed="0.014640">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:48.638451" elapsed="0.000023"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:08:48.621250" elapsed="0.017349">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:48.638877" elapsed="0.000033"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:08:48.600968" elapsed="0.038071">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:49.658194" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:49.656011" elapsed="0.002217"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:49.659016" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:49.658587" elapsed="0.000457"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:08:49.658434" elapsed="0.000646"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:49.659634" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:49.659313" elapsed="0.000348"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:08:49.659162" elapsed="0.000535"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:08:49.658294" elapsed="0.001432"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:49.660075" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:49.659795" elapsed="0.000339"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:49.660881" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:49.660390" elapsed="0.000520"/>
</kw>
<status status="PASS" start="2026-08-23T02:08:49.660160" elapsed="0.000786"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:49.661133" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:49.660971" elapsed="0.000218"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:49.659775" elapsed="0.001436"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:49.661248" elapsed="0.000033"/>
</return>
<msg time="2026-08-23T02:08:49.661405" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:08:49.655522" elapsed="0.005909"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:49.661478" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:08:49.661622" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:08:49.654930" elapsed="0.006719"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:49.669044" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:49.668767" elapsed="0.000324"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:49.669487" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:49.669242" elapsed="0.000289"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:08:49.676059" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:08:49.676116" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:08:49.676234" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:08:49.671712" elapsed="0.004929">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:08:49.669598" elapsed="0.007156">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:49.677039" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:49.676802" elapsed="0.000331"/>
</branch>
<status status="FAIL" start="2026-08-23T02:08:49.669579" elapsed="0.007587">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:49.677718" elapsed="0.000036"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:49.677932" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:49.677877" elapsed="0.000115"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:49.677828" elapsed="0.000194"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:49.678216" elapsed="0.000031"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:08:49.678340" elapsed="0.000022"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:08:49.664357" elapsed="0.014133">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:49.678589" elapsed="0.000025"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:08:49.661889" elapsed="0.016836">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:49.678977" elapsed="0.000032"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:08:49.639898" elapsed="0.039235">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:50.735577" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:50.733422" elapsed="0.002186"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:50.736319" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:50.735986" elapsed="0.000360"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:08:50.735814" elapsed="0.000570"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:50.736962" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:50.736617" elapsed="0.000373"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:08:50.736467" elapsed="0.000559"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:08:50.735674" elapsed="0.001382"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:50.737385" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:50.737124" elapsed="0.000320"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:50.738195" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:50.737697" elapsed="0.000526"/>
</kw>
<status status="PASS" start="2026-08-23T02:08:50.737469" elapsed="0.000790"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:50.738446" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:50.738285" elapsed="0.000217"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:50.737105" elapsed="0.001418"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:50.738558" elapsed="0.000033"/>
</return>
<msg time="2026-08-23T02:08:50.738715" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:08:50.732953" elapsed="0.005788"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:50.738789" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:08:50.738952" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:08:50.732217" elapsed="0.006762"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:50.746422" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:50.746163" elapsed="0.000377"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:50.746956" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:50.746694" elapsed="0.000307"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:08:50.753673" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:08:50.753734" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:08:50.753878" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:08:50.749253" elapsed="0.005028">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:08:50.747067" elapsed="0.007298">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:50.754552" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:50.754399" elapsed="0.000219"/>
</branch>
<status status="FAIL" start="2026-08-23T02:08:50.747048" elapsed="0.007593">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:50.755023" elapsed="0.000027"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:50.755159" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:50.755121" elapsed="0.000080"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:50.755104" elapsed="0.000119"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:50.755362" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:08:50.755433" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:08:50.741673" elapsed="0.013866">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:50.755609" elapsed="0.000019"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:08:50.739205" elapsed="0.016504">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:50.755895" elapsed="0.000023"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:08:50.679925" elapsed="0.076081">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:51.773423" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:51.771173" elapsed="0.002284"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:51.774185" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:51.773855" elapsed="0.000357"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:08:51.773683" elapsed="0.000566"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:51.774925" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:51.774582" elapsed="0.000370"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:08:51.774431" elapsed="0.000557"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:08:51.773534" elapsed="0.001484"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:51.775358" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:51.775094" elapsed="0.000323"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:51.776162" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:51.775672" elapsed="0.000519"/>
</kw>
<status status="PASS" start="2026-08-23T02:08:51.775442" elapsed="0.000786"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:51.776415" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:51.776253" elapsed="0.000218"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:51.775073" elapsed="0.001420"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:51.776531" elapsed="0.000037"/>
</return>
<msg time="2026-08-23T02:08:51.776734" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:08:51.770669" elapsed="0.006097"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:51.776824" elapsed="0.000052"/>
</return>
<msg time="2026-08-23T02:08:51.777003" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:08:51.770056" elapsed="0.006973"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:51.784825" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:51.784515" elapsed="0.000385"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:51.785318" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:51.785070" elapsed="0.000293"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:08:51.793025" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:08:51.793084" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:08:51.793199" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:08:51.787483" elapsed="0.006107">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:08:51.785429" elapsed="0.008246">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:51.793964" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:51.793729" elapsed="0.000328"/>
</branch>
<status status="FAIL" start="2026-08-23T02:08:51.785411" elapsed="0.008679">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:51.794597" elapsed="0.000036"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:51.794871" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:51.794794" elapsed="0.000141"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:51.794769" elapsed="0.000197"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:51.795163" elapsed="0.000030"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:08:51.795261" elapsed="0.000021"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:08:51.780096" elapsed="0.015314">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:51.795509" elapsed="0.000022"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:08:51.777254" elapsed="0.018390">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:51.795897" elapsed="0.000032"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:08:51.756912" elapsed="0.039142">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:52.814699" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:52.811422" elapsed="0.003321"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:52.815714" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:52.815263" elapsed="0.000478"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:08:52.815046" elapsed="0.000731"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:52.816350" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:52.816028" elapsed="0.000348"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:08:52.815877" elapsed="0.000534"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:08:52.814830" elapsed="0.001611"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:52.816772" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:52.816511" elapsed="0.000318"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:52.817567" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:52.817100" elapsed="0.000495"/>
</kw>
<status status="PASS" start="2026-08-23T02:08:52.816871" elapsed="0.000759"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:52.817818" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:52.817655" elapsed="0.000237"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:52.816491" elapsed="0.001422"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:52.817950" elapsed="0.000037"/>
</return>
<msg time="2026-08-23T02:08:52.818111" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:08:52.810746" elapsed="0.007391"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:52.818183" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:08:52.818323" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:08:52.809918" elapsed="0.008430"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:52.825637" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:52.825381" elapsed="0.000303"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:52.826093" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:52.825837" elapsed="0.000300"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:08:52.832933" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:08:52.832991" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:08:52.833104" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:08:52.828354" elapsed="0.005134">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:08:52.826279" elapsed="0.007291">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:52.833756" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:52.833604" elapsed="0.000217"/>
</branch>
<status status="FAIL" start="2026-08-23T02:08:52.826260" elapsed="0.007602">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:52.834234" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:52.834367" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:52.834330" elapsed="0.000079"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:52.834312" elapsed="0.000118"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:52.834568" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:08:52.834656" elapsed="0.000016"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:08:52.821050" elapsed="0.013717">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:52.834851" elapsed="0.000017"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:08:52.818583" elapsed="0.016367">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:52.835115" elapsed="0.000021"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:08:52.796941" elapsed="0.038282">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:53.853497" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:53.850715" elapsed="0.002815"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:53.854262" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:53.853917" elapsed="0.000373"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:08:53.853747" elapsed="0.000580"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:53.854905" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:53.854560" elapsed="0.000372"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:08:53.854410" elapsed="0.000686"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:08:53.853600" elapsed="0.001529"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:53.855470" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:53.855204" elapsed="0.000325"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:53.856334" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:53.855826" elapsed="0.000537"/>
</kw>
<status status="PASS" start="2026-08-23T02:08:53.855554" elapsed="0.000846"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:53.856586" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:53.856426" elapsed="0.000217"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:53.855183" elapsed="0.001481"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:53.856702" elapsed="0.000036"/>
</return>
<msg time="2026-08-23T02:08:53.856882" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:08:53.850057" elapsed="0.006853"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:53.856957" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:08:53.857101" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:08:53.849229" elapsed="0.007897"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:53.864487" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:53.864200" elapsed="0.000336"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:53.864956" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:53.864690" elapsed="0.000310"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:08:53.872058" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:08:53.872116" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:08:53.872235" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:08:53.867149" elapsed="0.005472">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:08:53.865066" elapsed="0.007638">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:53.872907" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:53.872738" elapsed="0.000236"/>
</branch>
<status status="FAIL" start="2026-08-23T02:08:53.865047" elapsed="0.007950">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:53.873364" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:53.873496" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:53.873458" elapsed="0.000110"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:53.873441" elapsed="0.000152"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:53.873733" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:08:53.873803" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:08:53.859836" elapsed="0.014093">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:53.873999" elapsed="0.000016"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:08:53.857348" elapsed="0.016746">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:53.874257" elapsed="0.000021"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:08:53.836235" elapsed="0.038129">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:54.891727" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:54.889578" elapsed="0.002184"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:54.892488" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:54.892146" elapsed="0.000369"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:08:54.891992" elapsed="0.000560"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:54.893205" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:54.892787" elapsed="0.000445"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:08:54.892635" elapsed="0.000633"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:08:54.891830" elapsed="0.001467"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:54.893632" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:54.893369" elapsed="0.000320"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:54.894430" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:54.893964" elapsed="0.000494"/>
</kw>
<status status="PASS" start="2026-08-23T02:08:54.893714" elapsed="0.000779"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:54.894678" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:54.894518" elapsed="0.000218"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:54.893349" elapsed="0.001410"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:54.894797" elapsed="0.000056"/>
</return>
<msg time="2026-08-23T02:08:54.894985" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:08:54.889097" elapsed="0.005915"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:54.895059" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:08:54.895199" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:08:54.888353" elapsed="0.006872"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:54.902496" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:54.902240" elapsed="0.000304"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:54.902952" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:54.902693" elapsed="0.000303"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:08:54.910198" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:08:54.910255" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:08:54.910369" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:08:54.905252" elapsed="0.005510">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:08:54.903062" elapsed="0.007801">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:54.911049" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:54.910899" elapsed="0.000215"/>
</branch>
<status status="FAIL" start="2026-08-23T02:08:54.903044" elapsed="0.008093">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:54.911501" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:54.911634" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:54.911597" elapsed="0.000078"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:54.911580" elapsed="0.000116"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:54.911855" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:08:54.911928" elapsed="0.000014"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:08:54.897942" elapsed="0.014091">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:54.912102" elapsed="0.000015"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:08:54.895449" elapsed="0.016747">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:54.912387" elapsed="0.000023"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:08:54.875221" elapsed="0.037276">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:55.928794" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:55.926513" elapsed="0.002314"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:55.929544" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:55.929219" elapsed="0.000351"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:08:55.929064" elapsed="0.000542"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:55.930171" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:55.929851" elapsed="0.000346"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:08:55.929688" elapsed="0.000545"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:08:55.928916" elapsed="0.001419"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:55.930675" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:55.930413" elapsed="0.000325"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:55.931509" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:55.931045" elapsed="0.000491"/>
</kw>
<status status="PASS" start="2026-08-23T02:08:55.930768" elapsed="0.000803"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:55.931760" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:55.931596" elapsed="0.000232"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:55.930392" elapsed="0.001482"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:55.931916" elapsed="0.000037"/>
</return>
<msg time="2026-08-23T02:08:55.932077" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:08:55.926034" elapsed="0.006070"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:55.932151" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:08:55.932294" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:08:55.925428" elapsed="0.006920"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:55.939889" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:55.939604" elapsed="0.000334"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:55.940333" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:55.940089" elapsed="0.000310"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:08:55.947201" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:08:55.947260" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:08:55.947372" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:08:55.942513" elapsed="0.005246">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:08:55.940466" elapsed="0.007396">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:55.948051" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:55.947898" elapsed="0.000219"/>
</branch>
<status status="FAIL" start="2026-08-23T02:08:55.940448" elapsed="0.007692">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:55.948546" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:55.948680" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:55.948643" elapsed="0.000079"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:55.948626" elapsed="0.000118"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:55.948959" elapsed="0.000031"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:08:55.949104" elapsed="0.000023"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:08:55.935302" elapsed="0.013951">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:55.949351" elapsed="0.000021"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:08:55.932631" elapsed="0.016854">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:55.949717" elapsed="0.000030"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:08:55.913343" elapsed="0.036548">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:56.967753" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:56.965426" elapsed="0.002360"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:56.968625" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:56.968222" elapsed="0.000431"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:08:56.968067" elapsed="0.000623"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:56.969275" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:56.968950" elapsed="0.000352"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:08:56.968773" elapsed="0.000565"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:08:56.967888" elapsed="0.001480"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:56.969701" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:56.969437" elapsed="0.000322"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:56.970505" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:56.970034" elapsed="0.000499"/>
</kw>
<status status="PASS" start="2026-08-23T02:08:56.969784" elapsed="0.000785"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:56.970756" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:56.970595" elapsed="0.000217"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:56.969418" elapsed="0.001431"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:56.970888" elapsed="0.000036"/>
</return>
<msg time="2026-08-23T02:08:56.971047" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:08:56.964955" elapsed="0.006118"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:56.971120" elapsed="0.000025"/>
</return>
<msg time="2026-08-23T02:08:56.971261" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:08:56.964197" elapsed="0.007090"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:56.978598" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:56.978340" elapsed="0.000306"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:56.979058" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:56.978796" elapsed="0.000306"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:08:56.985902" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:08:56.986035" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:08:56.986157" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:08:56.981379" elapsed="0.005173">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:08:56.979167" elapsed="0.007468">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:56.986820" elapsed="0.000041"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:56.986669" elapsed="0.000236"/>
</branch>
<status status="FAIL" start="2026-08-23T02:08:56.979149" elapsed="0.007780">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:56.987298" elapsed="0.000025"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:56.987431" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:56.987394" elapsed="0.000079"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:56.987376" elapsed="0.000118"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:56.987631" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:08:56.987700" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:08:56.973996" elapsed="0.013808">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:56.987891" elapsed="0.000017"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:08:56.971508" elapsed="0.016512">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:56.988188" elapsed="0.000021"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:08:56.950696" elapsed="0.037601">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:58.004612" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:58.002333" elapsed="0.002313"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:58.005457" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:58.005122" elapsed="0.000363"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:08:58.004961" elapsed="0.000561"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:58.006119" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:58.005756" elapsed="0.000393"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:08:58.005606" elapsed="0.000580"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:08:58.004717" elapsed="0.001499"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:58.006581" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:58.006289" elapsed="0.000426"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:58.007547" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:58.007007" elapsed="0.000569"/>
</kw>
<status status="PASS" start="2026-08-23T02:08:58.006743" elapsed="0.000870"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:58.007802" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:58.007639" elapsed="0.000251"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:58.006268" elapsed="0.001651"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:58.007974" elapsed="0.000044"/>
</return>
<msg time="2026-08-23T02:08:58.008153" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:08:58.001850" elapsed="0.006330"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:58.008228" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:08:58.008374" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:08:58.001171" elapsed="0.007231"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:58.016065" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:58.015757" elapsed="0.000359"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:58.016525" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:58.016269" elapsed="0.000300"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:08:58.023500" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:08:58.023560" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:08:58.023685" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:08:58.018758" elapsed="0.005488">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:08:58.016640" elapsed="0.007732">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:58.024671" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:58.024437" elapsed="0.000331"/>
</branch>
<status status="FAIL" start="2026-08-23T02:08:58.016620" elapsed="0.008184">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:58.025410" elapsed="0.000041"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:58.025618" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:58.025558" elapsed="0.000126"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:58.025532" elapsed="0.000186"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:58.025955" elapsed="0.000034"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:08:58.026063" elapsed="0.000023"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:08:58.011369" elapsed="0.014858">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:58.026412" elapsed="0.000026"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:08:58.008718" elapsed="0.017845">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:58.026815" elapsed="0.000056"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:08:57.989053" elapsed="0.037953">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:59.045264" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:59.043044" elapsed="0.002253"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:59.046059" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:59.045677" elapsed="0.000411"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:08:59.045519" elapsed="0.000606"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:59.046682" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:59.046360" elapsed="0.000348"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:08:59.046209" elapsed="0.000535"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:08:59.045369" elapsed="0.001417"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:59.047151" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:59.046880" elapsed="0.000330"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:08:59.047959" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:08:59.047466" elapsed="0.000521"/>
</kw>
<status status="PASS" start="2026-08-23T02:08:59.047235" elapsed="0.000788"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:59.048211" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:59.048049" elapsed="0.000218"/>
</branch>
<status status="PASS" start="2026-08-23T02:08:59.046857" elapsed="0.001432"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:59.048327" elapsed="0.000038"/>
</return>
<msg time="2026-08-23T02:08:59.048516" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:08:59.042545" elapsed="0.005999"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:08:59.048593" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:08:59.048738" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:08:59.041947" elapsed="0.006817"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:59.056401" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:59.056136" elapsed="0.000313"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:08:59.056868" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:08:59.056602" elapsed="0.000312"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:08:59.066163" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:08:59.066271" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:08:59.066565" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:08:59.059197" elapsed="0.008088">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:08:59.056990" elapsed="0.010421">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:59.067745" elapsed="0.000038"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:08:59.067467" elapsed="0.000403"/>
</branch>
<status status="FAIL" start="2026-08-23T02:08:59.056970" elapsed="0.010937">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:59.068441" elapsed="0.000044"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:59.068646" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:08:59.068593" elapsed="0.000113"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:08:59.068569" elapsed="0.000168"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:59.068957" elapsed="0.000031"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:08:59.069056" elapsed="0.000021"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:08:59.051536" elapsed="0.017670">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:08:59.069303" elapsed="0.000022"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:08:59.049023" elapsed="0.020413">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:08:59.069667" elapsed="0.000030"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:08:59.027822" elapsed="0.041997">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:00.087333" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:00.085134" elapsed="0.002232"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:00.088086" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:00.087736" elapsed="0.000378"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:09:00.087577" elapsed="0.000573"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:00.088731" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:00.088383" elapsed="0.000375"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:09:00.088233" elapsed="0.000561"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:09:00.087434" elapsed="0.001390"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:00.089177" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:00.088913" elapsed="0.000321"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:00.089970" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:00.089487" elapsed="0.000511"/>
</kw>
<status status="PASS" start="2026-08-23T02:09:00.089260" elapsed="0.000773"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:00.090218" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:00.090058" elapsed="0.000363"/>
</branch>
<status status="PASS" start="2026-08-23T02:09:00.088892" elapsed="0.001557"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:09:00.090491" elapsed="0.000039"/>
</return>
<msg time="2026-08-23T02:09:00.090688" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:09:00.084637" elapsed="0.006078"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:09:00.090762" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:09:00.090946" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:09:00.084045" elapsed="0.006933"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:00.100064" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:00.099774" elapsed="0.000340"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:00.100512" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:00.100267" elapsed="0.000289"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:09:00.107114" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:00.107171" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:09:00.107294" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:09:00.102754" elapsed="0.004928">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:09:00.100643" elapsed="0.007122">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:00.107973" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:00.107801" elapsed="0.000239"/>
</branch>
<status status="FAIL" start="2026-08-23T02:09:00.100621" elapsed="0.007443">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:00.108439" elapsed="0.000027"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:00.108602" elapsed="0.000136"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:09:00.108536" elapsed="0.000245"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:00.108519" elapsed="0.000285"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:00.109016" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:09:00.109088" elapsed="0.000014"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:09:00.095364" elapsed="0.013830">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:00.109261" elapsed="0.000016"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:09:00.091222" elapsed="0.018133">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:00.109648" elapsed="0.000023"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:09:00.070697" elapsed="0.039065">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:01.124780" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:01.122401" elapsed="0.002413"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:01.125532" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:01.125202" elapsed="0.000357"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:09:01.125046" elapsed="0.000549"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:01.126169" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:01.125828" elapsed="0.000368"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:09:01.125677" elapsed="0.000555"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:09:01.124903" elapsed="0.001359"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:01.126627" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:01.126332" elapsed="0.000354"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:01.127461" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:01.126983" elapsed="0.000507"/>
</kw>
<status status="PASS" start="2026-08-23T02:09:01.126712" elapsed="0.000814"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:01.127718" elapsed="0.000041"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:01.127552" elapsed="0.000255"/>
</branch>
<status status="PASS" start="2026-08-23T02:09:01.126313" elapsed="0.001516"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:09:01.127890" elapsed="0.000046"/>
</return>
<msg time="2026-08-23T02:09:01.128084" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:09:01.121925" elapsed="0.006186"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:09:01.128159" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:09:01.128332" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:09:01.121320" elapsed="0.007048"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:01.140726" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:01.140314" elapsed="0.000490"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:01.141463" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:01.141077" elapsed="0.000458"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:09:01.151195" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:01.151280" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:09:01.151451" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:09:01.145198" elapsed="0.006861">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:09:01.141640" elapsed="0.010621">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:01.152560" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:01.152319" elapsed="0.000345"/>
</branch>
<status status="FAIL" start="2026-08-23T02:09:01.141611" elapsed="0.011094">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:01.153343" elapsed="0.000040"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:01.153555" elapsed="0.000024"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:09:01.153492" elapsed="0.000135"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:01.153464" elapsed="0.000201"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:01.153916" elapsed="0.000034"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:09:01.154028" elapsed="0.000024"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:09:01.133097" elapsed="0.021097">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:01.154305" elapsed="0.000025"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:09:01.128706" elapsed="0.025753">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:01.154722" elapsed="0.000034"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:09:01.110371" elapsed="0.044570">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:02.173721" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:02.171487" elapsed="0.002266"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:02.174469" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:02.174139" elapsed="0.000358"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:09:02.173982" elapsed="0.000551"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:02.175116" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:02.174771" elapsed="0.000372"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:09:02.174618" elapsed="0.000561"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:09:02.173822" elapsed="0.001387"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:02.175546" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:02.175281" elapsed="0.000323"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:02.176353" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:02.175875" elapsed="0.000506"/>
</kw>
<status status="PASS" start="2026-08-23T02:09:02.175629" elapsed="0.000789"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:02.176606" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:02.176443" elapsed="0.000218"/>
</branch>
<status status="PASS" start="2026-08-23T02:09:02.175261" elapsed="0.001420"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:09:02.176719" elapsed="0.000036"/>
</return>
<msg time="2026-08-23T02:09:02.176896" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:09:02.170996" elapsed="0.006015"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:09:02.177064" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:09:02.177214" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:09:02.170145" elapsed="0.007096"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:02.184576" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:02.184316" elapsed="0.000308"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:02.185093" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:02.184793" elapsed="0.000345"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:09:02.191855" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:02.191923" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:09:02.192043" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:09:02.187262" elapsed="0.005164">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:09:02.185208" elapsed="0.007302">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:02.192700" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:02.192546" elapsed="0.000219"/>
</branch>
<status status="FAIL" start="2026-08-23T02:09:02.185188" elapsed="0.007601">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:02.193206" elapsed="0.000027"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:02.193343" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:09:02.193304" elapsed="0.000082"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:02.193286" elapsed="0.000122"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:02.193550" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:09:02.193620" elapsed="0.000014"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:09:02.179957" elapsed="0.013769">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:02.193795" elapsed="0.000015"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:09:02.177469" elapsed="0.016443">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:02.194096" elapsed="0.000022"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:09:02.155943" elapsed="0.038312">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:03.211749" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:03.209557" elapsed="0.002227"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:03.212512" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:03.212185" elapsed="0.000354"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:09:03.212031" elapsed="0.000545"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:03.213144" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:03.212809" elapsed="0.000363"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:09:03.212661" elapsed="0.000546"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:09:03.211876" elapsed="0.001361"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:03.213577" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:03.213312" elapsed="0.000323"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:03.214374" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:03.213904" elapsed="0.000498"/>
</kw>
<status status="PASS" start="2026-08-23T02:09:03.213662" elapsed="0.000776"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:03.214623" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:03.214463" elapsed="0.000217"/>
</branch>
<status status="PASS" start="2026-08-23T02:09:03.213291" elapsed="0.001410"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:09:03.214739" elapsed="0.000035"/>
</return>
<msg time="2026-08-23T02:09:03.214939" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:09:03.209066" elapsed="0.005900"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:09:03.215015" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:09:03.215157" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:09:03.208281" elapsed="0.006903"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:03.222527" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:03.222264" elapsed="0.000311"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:03.223024" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:03.222727" elapsed="0.000342"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:09:03.232547" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:03.232630" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:09:03.232789" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:09:03.225186" elapsed="0.008197">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:09:03.223137" elapsed="0.010441">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:03.233888" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:03.233635" elapsed="0.000356"/>
</branch>
<status status="FAIL" start="2026-08-23T02:09:03.223117" elapsed="0.010911">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:03.234595" elapsed="0.000040"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:03.234799" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:09:03.234742" elapsed="0.000170"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:03.234715" elapsed="0.000235"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:03.235181" elapsed="0.000034"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:09:03.235290" elapsed="0.000023"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:09:03.217905" elapsed="0.017547">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:03.235559" elapsed="0.000024"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:09:03.215412" elapsed="0.020295">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:03.235981" elapsed="0.000034"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:09:03.195157" elapsed="0.040992">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:04.248379" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:04.246211" elapsed="0.002200"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:04.249172" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:04.248798" elapsed="0.000408"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:09:04.248643" elapsed="0.000599"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:04.249795" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:04.249474" elapsed="0.000348"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:09:04.249324" elapsed="0.000548"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:09:04.248477" elapsed="0.001425"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:04.250268" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:04.249971" elapsed="0.000356"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:04.251063" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:04.250580" elapsed="0.000512"/>
</kw>
<status status="PASS" start="2026-08-23T02:09:04.250352" elapsed="0.000776"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:04.251312" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:04.251154" elapsed="0.000214"/>
</branch>
<status status="PASS" start="2026-08-23T02:09:04.249952" elapsed="0.001436"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:09:04.251425" elapsed="0.000034"/>
</return>
<msg time="2026-08-23T02:09:04.251581" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:09:04.245717" elapsed="0.005890"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:09:04.251654" elapsed="0.000092"/>
</return>
<msg time="2026-08-23T02:09:04.251883" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:09:04.245147" elapsed="0.006762"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:04.259231" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:04.258967" elapsed="0.000312"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:04.259674" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:04.259429" elapsed="0.000289"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:09:04.265936" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:04.265993" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:09:04.266107" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:09:04.261865" elapsed="0.004630">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:09:04.259785" elapsed="0.006792">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:04.266761" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:04.266611" elapsed="0.000215"/>
</branch>
<status status="FAIL" start="2026-08-23T02:09:04.259766" elapsed="0.007100">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:04.267231" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:04.267362" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:09:04.267325" elapsed="0.000078"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:04.267308" elapsed="0.000116"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:04.267562" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:09:04.267630" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:09:04.254619" elapsed="0.013115">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:04.267801" elapsed="0.000015"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:09:04.252129" elapsed="0.015784">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:04.268075" elapsed="0.000021"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:09:04.236931" elapsed="0.031250">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:05.285987" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:05.283811" elapsed="0.002209"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:05.286769" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:05.286418" elapsed="0.000378"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:09:05.286259" elapsed="0.000593"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:05.287415" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:05.287088" elapsed="0.000353"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:09:05.286938" elapsed="0.000539"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:09:05.286112" elapsed="0.001395"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:05.287879" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:05.287579" elapsed="0.000361"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:05.288680" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:05.288196" elapsed="0.000512"/>
</kw>
<status status="PASS" start="2026-08-23T02:09:05.287967" elapsed="0.000777"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:05.288946" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:05.288770" elapsed="0.000233"/>
</branch>
<status status="PASS" start="2026-08-23T02:09:05.287558" elapsed="0.001467"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:09:05.289064" elapsed="0.000045"/>
</return>
<msg time="2026-08-23T02:09:05.289235" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:09:05.283233" elapsed="0.006028"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:09:05.289308" elapsed="0.000025"/>
</return>
<msg time="2026-08-23T02:09:05.289450" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:09:05.282642" elapsed="0.006834"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:05.296902" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:05.296630" elapsed="0.000318"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:05.297374" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:05.297107" elapsed="0.000311"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:09:05.303768" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:05.303825" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:09:05.303961" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:09:05.299532" elapsed="0.004939">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:09:05.297483" elapsed="0.007101">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:05.304862" elapsed="0.000109"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:05.304633" elapsed="0.000402"/>
</branch>
<status status="FAIL" start="2026-08-23T02:09:05.297465" elapsed="0.007604">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:05.305591" elapsed="0.000037"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:05.305779" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:09:05.305726" elapsed="0.000135"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:05.305702" elapsed="0.000191"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:05.306120" elapsed="0.000031"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:09:05.306222" elapsed="0.000021"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:09:05.292243" elapsed="0.014128">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:05.306469" elapsed="0.000022"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:09:05.289702" elapsed="0.016902">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:05.306872" elapsed="0.000034"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:09:05.269081" elapsed="0.037953">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:06.323872" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:06.321699" elapsed="0.002206"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:06.324596" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:06.324271" elapsed="0.000352"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:09:06.324116" elapsed="0.000542"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:06.325231" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:06.324904" elapsed="0.000353"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:09:06.324740" elapsed="0.000553"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:09:06.323973" elapsed="0.001349"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:06.325659" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:06.325391" elapsed="0.000325"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:06.327209" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:06.325985" elapsed="0.001274"/>
</kw>
<status status="PASS" start="2026-08-23T02:09:06.325741" elapsed="0.001562"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:06.327576" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:06.327332" elapsed="0.000304"/>
</branch>
<status status="PASS" start="2026-08-23T02:09:06.325372" elapsed="0.002285"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:09:06.327699" elapsed="0.000039"/>
</return>
<msg time="2026-08-23T02:09:06.327904" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:09:06.321220" elapsed="0.006712"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:09:06.327983" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:09:06.328138" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:09:06.320632" elapsed="0.007537"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:06.335688" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:06.335398" elapsed="0.000337"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:06.336149" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:06.335902" elapsed="0.000290"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:09:06.344193" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:06.344272" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:09:06.344422" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:09:06.338313" elapsed="0.006673">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:09:06.336259" elapsed="0.008843">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:06.345362" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:06.345151" elapsed="0.000302"/>
</branch>
<status status="FAIL" start="2026-08-23T02:09:06.336240" elapsed="0.009246">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:06.346020" elapsed="0.000037"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:06.346207" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:09:06.346154" elapsed="0.000121"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:06.346130" elapsed="0.000176"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:06.346515" elapsed="0.000031"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:09:06.346614" elapsed="0.000021"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:09:06.331019" elapsed="0.015742">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:06.346883" elapsed="0.000023"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:09:06.328511" elapsed="0.018510">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:06.347251" elapsed="0.000030"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:09:06.307895" elapsed="0.039508">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<msg time="2026-08-23T02:09:06.347576" level="FAIL">Keyword 'Check_Device_Connected' failed after retrying for 20 seconds. The last error was: HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${timeout}</arg>
<arg>${period}</arg>
<arg>Check_Device_Connected</arg>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-08-23T02:08:45.492057" elapsed="20.855708">Keyword 'Check_Device_Connected' failed after retrying for 20 seconds. The last error was: HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<arg>${device_name}</arg>
<doc>Wait for the device to become connected.
It is more readable to use this keyword in a test case than to put the whole WUKS below into it.</doc>
<status status="FAIL" start="2026-08-23T02:08:45.491627" elapsed="20.856317">Keyword 'Check_Device_Connected' failed after retrying for 20 seconds. The last error was: HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<doc>Wait until the device becomes available through Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:08:45.400273" elapsed="20.947885">Keyword 'Check_Device_Connected' failed after retrying for 20 seconds. The last error was: HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</test>
<test id="s1-s4-s1-t15" name="Check_Modified_Device_Data_Is_Still_There" line="136">
<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-08-23T02:09:06.352963" elapsed="0.000222"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:09:06.352683" elapsed="0.000557"/>
</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-08-23T02:09:06.354241" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:09:06.354129" elapsed="0.000160"/>
</branch>
<status status="PASS" start="2026-08-23T02:09:06.354109" elapsed="0.000202"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:09:06.359311" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:09:06.359202" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-23T02:09:06.359184" elapsed="0.000196"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:09:06.360418" 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-08-23T02:09:06.360026" elapsed="0.000419"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:09:06.360915" 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-08-23T02:09:06.360604" elapsed="0.000337"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:09:06.360986" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:09:06.361139" 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-08-23T02:09:06.359628" elapsed="0.001537"/>
</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-08-23T02:09:06.366597" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:09:06.366490" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-23T02:09:06.366471" elapsed="0.000194"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:09:06.368110" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:09:06.368003" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-23T02:09:06.367984" elapsed="0.000194"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:09:06.368713" 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-08-23T02:09:06.368323" elapsed="0.000416"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:09:06.369187" 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-08-23T02:09:06.368915" elapsed="0.000297"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:09:06.402151" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:09:06.369761" elapsed="0.032565"/>
</kw>
<msg time="2026-08-23T02:09:06.402507" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:09:06.402554" 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 "n "e "t "c "o "n "f "...</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-08-23T02:09:06.369370" elapsed="0.033220"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:09:06.428207" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "h "e "c "k "_ "M "o "d "i "f "i "e "d "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "I "s "_ "S "t "i "l "l "_ "T "h "e "r "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-08-23T02:09:06.403324" elapsed="0.025077"/>
</kw>
<msg time="2026-08-23T02:09:06.428578" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:09:06.428665" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "h "e "c "k "_ "M "o "d "i "f "i "e "d "_ ...</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-08-23T02:09:06.402757" elapsed="0.025946"/>
</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-08-23T02:09:06.429021" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:06.428780" elapsed="0.000320"/>
</branch>
<status status="PASS" start="2026-08-23T02:09:06.428760" elapsed="0.000366"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:06.429656" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "h "e "c "k "_ "M "o "d "i "f "i "e "d "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "I "s "_ "S "t "i "l "l "_ "T "h "e "r "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-08-23T02:09:06.429265" elapsed="0.000463"/>
</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-08-23T02:09:06.430026" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:06.429796" elapsed="0.000309"/>
</branch>
<status status="PASS" start="2026-08-23T02:09:06.429778" elapsed="0.000351"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:09:06.430163" 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-08-23T02:09:06.433471" elapsed="0.000146"/>
</kw>
<msg time="2026-08-23T02:09:06.433692" 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-08-23T02:09:06.432764" elapsed="0.001031"/>
</kw>
<kw name="Open 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-08-23T02:09:06.434904" elapsed="0.000039"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:06.436257" elapsed="0.000039"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:09:06.431042" elapsed="0.005336"/>
</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-08-23T02:09:06.430429" elapsed="0.006075"/>
</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-08-23T02:09:06.367678" elapsed="0.068925"/>
</kw>
<msg time="2026-08-23T02:09:06.436694" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:09:06.436738" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "h "e "c "k "_ "M "o "d "i "f "i "e "d "_ ...</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-08-23T02:09:06.366815" elapsed="0.069960"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:09:06.436975" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:09:06.436866" elapsed="0.000169"/>
</branch>
<status status="PASS" start="2026-08-23T02:09:06.436846" 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-08-23T02:09:06.437451" 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-08-23T02:09:06.437780" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:09:06.437966" 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-08-23T02:09:06.366156" elapsed="0.071922"/>
</kw>
<msg time="2026-08-23T02:09:06.438171" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:09:06.438215" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "h "e "c "k "_ "M "o "d "i "f "i "e "d "_ ...</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-08-23T02:09:06.361533" elapsed="0.076720"/>
</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-08-23T02:09:06.438575" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:06.438327" elapsed="0.000303"/>
</branch>
<status status="PASS" start="2026-08-23T02:09:06.438310" elapsed="0.000343"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:09:06.361394" elapsed="0.077282"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:09:06.361218" elapsed="0.077489"/>
</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-08-23T02:09:06.358831" elapsed="0.079957"/>
</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-08-23T02:09:06.353822" elapsed="0.085096"/>
</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-08-23T02:09:06.353392" elapsed="0.085575"/>
</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-08-23T02:09:06.349603" elapsed="0.089419"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:06.440828" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:06.440446" elapsed="0.000425"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:06.448292" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:06.448037" elapsed="0.000302"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:06.448736" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:06.448490" elapsed="0.000290"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:09:06.454827" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:06.454894" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:06.454999" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:09:06.450903" elapsed="0.004461">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:09:06.448861" elapsed="0.006586">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:06.455638" elapsed="0.000056"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:06.455481" elapsed="0.000258"/>
</branch>
<status status="FAIL" start="2026-08-23T02:09:06.448828" elapsed="0.006935">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:06.456208" elapsed="0.000043"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:06.456403" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:09:06.456350" elapsed="0.000111"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:06.456326" elapsed="0.000166"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:06.456686" elapsed="0.000030"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:09:06.456784" elapsed="0.000021"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:09:06.443614" elapsed="0.013341">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:06.457055" elapsed="0.000022"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:09:06.441083" elapsed="0.016107">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:09:06.457265" elapsed="0.000021"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:09:06.440180" elapsed="0.017215">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:06.457698" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:06.457496" elapsed="0.000354"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:06.458087" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:06.457888" elapsed="0.000277"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:06.458386" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:06.458198" elapsed="0.000264"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:06.457473" elapsed="0.001018"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:09:06.439743" elapsed="0.018857">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:07.462282" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:07.461310" elapsed="0.001043"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:07.473730" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:07.473466" elapsed="0.000311"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:07.474188" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:07.473943" elapsed="0.000290"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:09:07.481264" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:07.481315" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:07.481422" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:09:07.476497" elapsed="0.005316">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:09:07.474308" elapsed="0.007612">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:07.482111" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:07.481958" elapsed="0.000223"/>
</branch>
<status status="FAIL" start="2026-08-23T02:09:07.474285" elapsed="0.007920">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:07.482575" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:07.482710" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:09:07.482671" elapsed="0.000084"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:07.482653" elapsed="0.000124"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:07.482936" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:09:07.483008" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:09:07.468739" elapsed="0.014375">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:07.483184" elapsed="0.000016"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:09:07.462867" elapsed="0.020413">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:09:07.483403" elapsed="0.000017"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:09:07.460598" elapsed="0.022903">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:07.483724" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:07.483576" elapsed="0.000204"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:07.483960" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:07.483804" elapsed="0.000212"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:07.484174" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:07.484040" elapsed="0.000189"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:07.483559" elapsed="0.000691"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:09:07.459498" elapsed="0.024830">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:08.487973" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:08.487005" elapsed="0.001038"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:08.499387" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:08.499128" elapsed="0.000307"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:08.499831" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:08.499585" elapsed="0.000307"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:09:08.506032" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:08.506082" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:08.506202" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:09:08.502045" elapsed="0.004535">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:09:08.499966" elapsed="0.006696">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:08.506865" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:08.506698" elapsed="0.000233"/>
</branch>
<status status="FAIL" start="2026-08-23T02:09:08.499945" elapsed="0.007009">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:08.507351" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:08.507486" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:09:08.507447" elapsed="0.000083"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:08.507430" elapsed="0.000122"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:08.507693" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:09:08.507762" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:09:08.494289" elapsed="0.013596">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:08.508020" elapsed="0.000017"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:09:08.488526" elapsed="0.019593">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:09:08.508179" elapsed="0.000015"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:09:08.486336" elapsed="0.021935">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:08.508488" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:08.508342" elapsed="0.000202"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:08.508706" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:08.508568" elapsed="0.000192"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:08.508946" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:08.508783" elapsed="0.000219"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:08.508326" elapsed="0.000698"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:09:08.485167" elapsed="0.023935">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:09.512584" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:09.511805" elapsed="0.000827"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:09.524218" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:09.523899" elapsed="0.000403"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:09.524954" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:09.524678" elapsed="0.000322"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:09:09.532131" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:09.532184" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:09.532307" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:09:09.527444" elapsed="0.005477">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:09:09.525080" elapsed="0.007930">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:09.533206" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:09.533050" elapsed="0.000222"/>
</branch>
<status status="FAIL" start="2026-08-23T02:09:09.525056" elapsed="0.008240">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:09.533746" elapsed="0.000029"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:09.533913" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:09:09.533870" elapsed="0.000088"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:09.533849" elapsed="0.000131"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:09.534126" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:09:09.534281" elapsed="0.000018"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:09:09.519087" elapsed="0.015315">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:09.534484" elapsed="0.000020"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:09:09.512981" elapsed="0.021613">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:09:09.534650" elapsed="0.000016"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:09:09.511013" elapsed="0.023732">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:09.534989" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:09.534819" elapsed="0.000228"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:09.535301" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:09.535071" elapsed="0.000290"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:09.535524" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:09.535386" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:09.534802" elapsed="0.000798"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:09:09.509965" elapsed="0.025714">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:10.539261" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:10.538298" elapsed="0.001034"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:10.550290" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:10.550031" elapsed="0.000309"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:10.550905" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:10.550641" elapsed="0.000309"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:09:10.557431" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:10.557482" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:10.557605" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:09:10.553256" elapsed="0.004758">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:09:10.551026" elapsed="0.007071">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:10.558285" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:10.558133" elapsed="0.000243"/>
</branch>
<status status="FAIL" start="2026-08-23T02:09:10.551003" elapsed="0.007406">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:10.558935" elapsed="0.000037"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:10.559198" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:09:10.559142" elapsed="0.000122"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:10.559116" elapsed="0.000179"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:10.559492" elapsed="0.000030"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:09:10.559591" elapsed="0.000021"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:09:10.544180" elapsed="0.015559">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:10.559858" elapsed="0.000024"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:09:10.539812" elapsed="0.020185">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:09:10.560095" elapsed="0.000025"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:09:10.537636" elapsed="0.022615">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:10.560573" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:10.560369" elapsed="0.000282"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:10.560901" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:10.560684" elapsed="0.000295"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:10.561201" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:10.561013" elapsed="0.000269"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:10.560337" elapsed="0.000974"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:09:10.536537" elapsed="0.024882">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:11.565447" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:11.564446" elapsed="0.001074"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:11.577412" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:11.577147" elapsed="0.000313"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:11.577881" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:11.577613" elapsed="0.000315"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:09:11.584118" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:11.584168" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:11.584281" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:09:11.580106" elapsed="0.004592">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:09:11.578010" elapsed="0.006774">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:11.585002" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:11.584825" elapsed="0.000311"/>
</branch>
<status status="FAIL" start="2026-08-23T02:09:11.577984" elapsed="0.007180">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:11.585559" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:11.585701" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:09:11.585659" elapsed="0.000088"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:11.585640" elapsed="0.000129"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:11.585930" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:09:11.586001" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:09:11.572130" elapsed="0.013979">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:11.586178" elapsed="0.000016"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:09:11.566058" elapsed="0.020218">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:09:11.586332" elapsed="0.000015"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:09:11.563710" elapsed="0.022713">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:11.586643" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:11.586495" elapsed="0.000203"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:11.586881" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:11.586723" elapsed="0.000215"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:11.587096" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:11.586962" elapsed="0.000188"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:11.586478" elapsed="0.000693"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:09:11.562562" elapsed="0.024687">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:12.590986" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:12.589981" elapsed="0.001075"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:12.603649" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:12.603319" elapsed="0.000391"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:12.604142" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:12.603891" elapsed="0.000296"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:09:12.610718" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:12.610768" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:12.610909" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:09:12.606365" elapsed="0.004970">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:09:12.604268" elapsed="0.007283">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:12.611842" elapsed="0.000054"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:12.611608" elapsed="0.000354"/>
</branch>
<status status="FAIL" start="2026-08-23T02:09:12.604244" elapsed="0.007754">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:12.612603" elapsed="0.000039"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:12.612808" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:09:12.612748" elapsed="0.000152"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:12.612721" 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>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:12.613144" elapsed="0.000032"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:09:12.613247" elapsed="0.000022"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:09:12.596730" elapsed="0.016678">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:12.613512" elapsed="0.000023"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:09:12.591528" elapsed="0.022127">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:09:12.613735" elapsed="0.000022"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:09:12.589329" elapsed="0.024568">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:12.614225" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:12.614008" elapsed="0.000298"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:12.614545" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:12.614341" elapsed="0.000324"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:12.614931" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:12.614702" elapsed="0.000310"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:12.613984" elapsed="0.001059"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:09:12.588269" elapsed="0.026892">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:13.618827" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:13.617883" elapsed="0.001062"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:13.630100" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:13.629825" elapsed="0.000324"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:13.630554" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:13.630303" elapsed="0.000296"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:09:13.637156" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:13.637206" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:13.637415" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:09:13.632755" elapsed="0.005074">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:09:13.630674" elapsed="0.007260">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:13.638124" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:13.637971" elapsed="0.000220"/>
</branch>
<status status="FAIL" start="2026-08-23T02:09:13.630651" elapsed="0.007564">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:13.638704" elapsed="0.000036"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:13.638945" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:09:13.638845" elapsed="0.000164"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:13.638816" elapsed="0.000223"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:13.639240" elapsed="0.000030"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:09:13.639339" elapsed="0.000021"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:09:13.623872" elapsed="0.015615">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:13.639585" elapsed="0.000023"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:09:13.619432" elapsed="0.020288">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:09:13.639796" elapsed="0.000021"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:09:13.617209" elapsed="0.022739">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:13.640253" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:13.640051" elapsed="0.000279"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:13.640560" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:13.640364" elapsed="0.000271"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:13.640875" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:13.640668" elapsed="0.000287"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:13.640028" elapsed="0.000956"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:09:13.616079" elapsed="0.025014">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:14.644747" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:14.643775" elapsed="0.001042"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:14.657322" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:14.656920" elapsed="0.000471"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:14.657798" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:14.657547" elapsed="0.000300"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:09:14.664107" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:14.664226" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:14.664337" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:09:14.660062" elapsed="0.004670">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:09:14.657936" elapsed="0.006881">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:14.665025" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:14.664870" elapsed="0.000221"/>
</branch>
<status status="FAIL" start="2026-08-23T02:09:14.657913" elapsed="0.007203">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:14.665537" elapsed="0.000027"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:14.665688" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:09:14.665640" elapsed="0.000094"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:14.665619" elapsed="0.000137"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:14.665921" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:09:14.665994" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:09:14.650770" elapsed="0.015332">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:14.666173" elapsed="0.000015"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:09:14.645400" elapsed="0.020868">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:09:14.666322" elapsed="0.000016"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:09:14.643110" elapsed="0.023343">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:14.666758" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:14.666554" elapsed="0.000287"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:14.667090" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:14.666893" elapsed="0.000274"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:14.667388" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:14.667201" elapsed="0.000263"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:14.666531" elapsed="0.000962"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:09:14.642026" elapsed="0.025575">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:15.671204" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:15.670154" elapsed="0.001120"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:15.681090" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:15.680815" elapsed="0.000324"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:15.681537" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:15.681290" elapsed="0.000292"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:09:15.688162" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:15.688212" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:15.688315" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:09:15.683865" elapsed="0.004829">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:09:15.681725" elapsed="0.007053">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:15.688990" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:15.688813" elapsed="0.000245"/>
</branch>
<status status="FAIL" start="2026-08-23T02:09:15.681702" elapsed="0.007380">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:15.689462" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:15.689599" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:09:15.689558" elapsed="0.000085"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:15.689540" elapsed="0.000126"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:15.689807" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:09:15.689898" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:09:15.675277" elapsed="0.014728">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:15.690075" elapsed="0.000016"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:09:15.671610" elapsed="0.018560">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:09:15.690224" elapsed="0.000014"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:09:15.669493" elapsed="0.020823">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:15.690674" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:15.690388" elapsed="0.000342"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:15.690933" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:15.690754" elapsed="0.000235"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:15.691145" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:15.691012" elapsed="0.000187"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:15.690371" elapsed="0.000848"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:09:15.668429" elapsed="0.022868">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:16.694874" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:16.693801" elapsed="0.001146"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:16.706662" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:16.706403" elapsed="0.000307"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:16.707128" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:16.706879" elapsed="0.000293"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:09:16.714170" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:16.714227" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:16.714329" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:09:16.709324" elapsed="0.005388">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:09:16.707249" elapsed="0.007547">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:16.715009" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:16.714833" elapsed="0.000245"/>
</branch>
<status status="FAIL" start="2026-08-23T02:09:16.707225" elapsed="0.007878">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:16.715476" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:16.715616" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:09:16.715574" elapsed="0.000087"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:16.715556" elapsed="0.000127"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:16.715825" elapsed="0.000040"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:09:16.715918" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:09:16.701302" elapsed="0.014724">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:16.716098" elapsed="0.000016"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:09:16.695536" elapsed="0.020658">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:09:16.716250" elapsed="0.000015"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:09:16.693182" elapsed="0.023160">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:16.716561" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:16.716415" elapsed="0.000203"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:16.716781" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:16.716642" elapsed="0.000198"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:16.717014" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:16.716877" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:16.716399" elapsed="0.000691"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:09:16.692136" elapsed="0.025031">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:17.720804" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:17.719839" elapsed="0.001069"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:17.732580" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:17.732321" elapsed="0.000306"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:17.733043" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:17.732779" elapsed="0.000308"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:09:17.739599" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:17.739680" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:17.739801" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:09:17.735249" elapsed="0.004968">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:09:17.733162" elapsed="0.007142">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:17.740497" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:17.740341" elapsed="0.000223"/>
</branch>
<status status="FAIL" start="2026-08-23T02:09:17.733140" elapsed="0.007447">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:17.740991" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:17.741132" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:09:17.741091" elapsed="0.000086"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:17.741073" elapsed="0.000126"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:17.741339" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:09:17.741409" elapsed="0.000014"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:09:17.727283" elapsed="0.014232">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:17.741587" elapsed="0.000018"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:09:17.721395" elapsed="0.020294">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:09:17.741742" elapsed="0.000015"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:09:17.719149" elapsed="0.022684">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:17.742078" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:17.741932" elapsed="0.000202"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:17.742295" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:17.742158" elapsed="0.000191"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:17.742505" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:17.742372" elapsed="0.000250"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:17.741915" elapsed="0.000729"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:09:17.718115" elapsed="0.024609">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:18.745742" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:18.745109" elapsed="0.000682"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:18.755287" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:18.755020" elapsed="0.000317"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:18.755773" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:18.755516" elapsed="0.000305"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:09:18.762785" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:18.762854" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:18.762966" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:09:18.758069" elapsed="0.005284">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:09:18.755918" elapsed="0.007522">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:18.763660" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:18.763482" elapsed="0.000248"/>
</branch>
<status status="FAIL" start="2026-08-23T02:09:18.755894" elapsed="0.007861">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:18.764149" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:18.764290" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:09:18.764249" elapsed="0.000086"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:18.764231" elapsed="0.000127"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:18.764525" elapsed="0.000024"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:09:18.764600" elapsed="0.000017"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:09:18.749799" elapsed="0.014910">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:18.764782" elapsed="0.000016"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:09:18.746133" elapsed="0.018768">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:09:18.764958" elapsed="0.000016"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:09:18.744657" elapsed="0.020397">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:18.765278" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:18.765130" elapsed="0.000265"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:18.765566" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:18.765421" elapsed="0.000202"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:18.765783" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:18.765646" elapsed="0.000196"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:18.765112" elapsed="0.000768"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:09:18.743617" elapsed="0.022346">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:19.769693" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:19.768684" elapsed="0.001137"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:19.780240" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:19.779979" elapsed="0.000308"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:19.780827" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:19.780439" elapsed="0.000451"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:09:19.789692" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:19.789742" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:19.789874" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:09:19.783301" elapsed="0.007000">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:09:19.780986" elapsed="0.009401">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:19.790641" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:19.790423" elapsed="0.000312"/>
</branch>
<status status="FAIL" start="2026-08-23T02:09:19.780957" elapsed="0.009811">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:19.791371" elapsed="0.000038"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:19.791564" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:09:19.791508" elapsed="0.000118"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:19.791484" elapsed="0.000172"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:19.791887" elapsed="0.000031"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:09:19.791987" elapsed="0.000021"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:09:19.775410" elapsed="0.016738">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:19.792247" elapsed="0.000035"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:09:19.770459" elapsed="0.021947">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:09:19.792551" elapsed="0.000023"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:09:19.767992" elapsed="0.024692">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:19.793037" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:19.792802" elapsed="0.000314"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:19.793346" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:19.793150" elapsed="0.000272"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:19.793660" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:19.793456" elapsed="0.000282"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:19.792778" elapsed="0.000989"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:09:19.766783" elapsed="0.027116">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:20.797304" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:20.796350" elapsed="0.001023"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:20.808177" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:20.807914" elapsed="0.000313"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:20.808623" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:20.808380" elapsed="0.000287"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:09:20.815269" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:20.815320" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:20.815428" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:09:20.810812" elapsed="0.005007">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:09:20.808744" elapsed="0.007185">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:20.816121" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:20.815966" elapsed="0.000221"/>
</branch>
<status status="FAIL" start="2026-08-23T02:09:20.808721" elapsed="0.007490">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:20.816591" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:20.816728" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:09:20.816687" elapsed="0.000086"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:20.816670" elapsed="0.000125"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:20.816955" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:09:20.817026" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:09:20.803562" elapsed="0.013571">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:20.817264" elapsed="0.000016"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:09:20.797881" elapsed="0.019481">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:09:20.817416" elapsed="0.000016"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:09:20.795707" elapsed="0.021803">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:20.817729" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:20.817582" elapsed="0.000204"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:20.817968" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:20.817810" elapsed="0.000214"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:20.818184" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:20.818048" elapsed="0.000190"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:20.817566" elapsed="0.000694"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:09:20.794646" elapsed="0.023693">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:21.821866" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:21.820900" elapsed="0.001038"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:21.836553" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:21.836291" elapsed="0.000310"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:21.837017" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:21.836753" elapsed="0.000308"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:09:21.843557" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:21.843621" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:21.843773" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:09:21.839276" elapsed="0.005028">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:09:21.837137" elapsed="0.007285">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:21.844684" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:21.844472" elapsed="0.000305"/>
</branch>
<status status="FAIL" start="2026-08-23T02:09:21.837113" elapsed="0.007696">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:21.845348" elapsed="0.000037"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:21.845538" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:09:21.845483" elapsed="0.000115"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:21.845458" elapsed="0.000171"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:21.845825" elapsed="0.000053"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:09:21.846017" elapsed="0.000022"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:09:21.830394" elapsed="0.015772">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:21.846263" elapsed="0.000022"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:09:21.822420" elapsed="0.023977">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:09:21.846472" elapsed="0.000021"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:09:21.820240" elapsed="0.026361">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:21.846929" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:21.846703" elapsed="0.000307"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:21.847256" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:21.847045" elapsed="0.000292"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:21.847563" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:21.847371" elapsed="0.000271"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:21.846679" elapsed="0.000993"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:09:21.819193" elapsed="0.028590">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:22.851384" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:22.850424" elapsed="0.001032"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:22.863290" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:22.862863" elapsed="0.000475"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:22.863733" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:22.863490" elapsed="0.000287"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:09:22.870563" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:22.870636" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:22.870777" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:09:22.865951" elapsed="0.005370">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:09:22.863871" elapsed="0.007570">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:22.871715" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:22.871497" elapsed="0.000309"/>
</branch>
<status status="FAIL" start="2026-08-23T02:09:22.863829" elapsed="0.008035">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:22.872384" elapsed="0.000038"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:22.872656" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:09:22.872599" elapsed="0.000119"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:22.872573" elapsed="0.000176"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:22.873149" elapsed="0.000031"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:09:22.873249" elapsed="0.000021"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:09:22.856659" elapsed="0.016738">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:22.873501" elapsed="0.000022"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:09:22.851969" elapsed="0.021670">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:09:22.873714" elapsed="0.000022"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:09:22.849724" elapsed="0.024138">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:22.874177" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:22.873969" elapsed="0.000287"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:22.874503" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:22.874289" elapsed="0.000292"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:22.874812" elapsed="0.000058"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:22.874614" elapsed="0.000317"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:22.873944" elapsed="0.001024"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:09:22.848627" elapsed="0.026466">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:23.878597" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:23.877624" elapsed="0.001047"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:23.890531" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:23.890115" elapsed="0.000467"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:23.891007" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:23.890739" elapsed="0.000313"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:09:23.899680" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:23.899802" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:23.900078" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:09:23.893258" elapsed="0.007720">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:09:23.891129" elapsed="0.010044">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:23.901625" elapsed="0.000053"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:23.901258" elapsed="0.000654"/>
</branch>
<status status="FAIL" start="2026-08-23T02:09:23.891107" elapsed="0.010869">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:23.902895" elapsed="0.000065"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:23.903221" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:09:23.903129" elapsed="0.000196"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:23.903088" 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>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:23.903717" elapsed="0.000050"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:09:23.903918" elapsed="0.000036"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:09:23.883819" elapsed="0.020351">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:23.904336" elapsed="0.000038"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:09:23.879183" elapsed="0.025382">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:09:23.904742" elapsed="0.000038"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:09:23.876988" elapsed="0.028013">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:23.905525" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:23.905177" elapsed="0.000480"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:23.906080" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:23.905714" elapsed="0.000498"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:23.906589" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:23.906269" elapsed="0.000449"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:23.905138" elapsed="0.001630"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:09:23.875899" elapsed="0.031090">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:24.910637" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:24.909597" elapsed="0.001090"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:24.920470" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:24.920209" elapsed="0.000308"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:24.920937" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:24.920671" elapsed="0.000313"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:09:24.927151" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:24.927203" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:24.927311" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:09:24.923157" elapsed="0.004572">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:09:24.921058" elapsed="0.006886">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:24.928217" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:24.927998" elapsed="0.000312"/>
</branch>
<status status="FAIL" start="2026-08-23T02:09:24.921036" elapsed="0.007307">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:24.928902" elapsed="0.000037"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:24.929095" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:09:24.929040" elapsed="0.000118"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:24.929014" elapsed="0.000174"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:24.929387" elapsed="0.000031"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:09:24.929486" elapsed="0.000021"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:09:24.914672" elapsed="0.014963">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:24.929733" elapsed="0.000022"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:09:24.911019" elapsed="0.018872">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:09:24.929970" elapsed="0.000021"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:09:24.908969" elapsed="0.021130">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:24.930420" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:24.930198" elapsed="0.000300"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:24.930726" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:24.930532" elapsed="0.000268"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:24.931045" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:24.930833" elapsed="0.000287"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:24.930176" elapsed="0.000973"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:09:24.907890" elapsed="0.023370">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:25.934825" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:25.933807" elapsed="0.001127"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:25.945281" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:25.945021" elapsed="0.000308"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:25.945751" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:25.945483" elapsed="0.000313"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:09:25.952170" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:25.952281" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:25.952598" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:09:25.948015" elapsed="0.005392">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:09:25.945889" elapsed="0.007700">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:25.954042" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:25.953667" elapsed="0.000524"/>
</branch>
<status status="FAIL" start="2026-08-23T02:09:25.945866" elapsed="0.008378">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:25.955088" elapsed="0.000079"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:25.955416" elapsed="0.000032"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:09:25.955326" elapsed="0.000184"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:25.955287" elapsed="0.000272"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:25.955903" elapsed="0.000048"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:09:25.956062" elapsed="0.000033"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:09:25.939331" elapsed="0.016966">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:25.956452" elapsed="0.000034"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:09:25.935475" elapsed="0.021187">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:09:25.956780" elapsed="0.000033"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:09:25.933177" elapsed="0.023839">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:25.957500" elapsed="0.000046"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:25.957178" elapsed="0.000444"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:25.958019" elapsed="0.000045"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:25.957675" elapsed="0.000466"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:25.958488" elapsed="0.000044"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:25.958192" elapsed="0.000415"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:25.957141" elapsed="0.001512"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:09:25.932122" elapsed="0.026703">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:26.962454" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:26.961491" elapsed="0.001034"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:26.973138" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:26.972878" elapsed="0.000308"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:26.973582" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:26.973338" elapsed="0.000289"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:09:26.979870" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:26.979988" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:26.980096" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:09:26.975818" elapsed="0.004659">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:09:26.973703" elapsed="0.006857">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:26.980750" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:26.980598" elapsed="0.000224"/>
</branch>
<status status="FAIL" start="2026-08-23T02:09:26.973679" elapsed="0.007184">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:26.981234" elapsed="0.000027"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:26.981373" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:09:26.981332" elapsed="0.000085"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:26.981314" elapsed="0.000125"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:26.981581" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:09:26.981651" elapsed="0.000014"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:09:26.968486" elapsed="0.013269">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:26.981825" elapsed="0.000037"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:09:26.963045" elapsed="0.018901">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:09:26.982000" elapsed="0.000014"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:09:26.960861" elapsed="0.021232">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:26.982310" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:26.982164" elapsed="0.000202"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:26.982527" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:26.982390" elapsed="0.000190"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:26.982738" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:26.982603" elapsed="0.000191"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:26.982148" elapsed="0.000667"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:09:26.959735" elapsed="0.023173">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:27.986725" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:27.985752" elapsed="0.001064"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:27.997399" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:27.997125" elapsed="0.000322"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:27.997874" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:27.997599" elapsed="0.000321"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:09:28.004339" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:28.004389" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:28.004492" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:09:28.000211" elapsed="0.004770">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:09:27.998066" elapsed="0.007030">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:28.005357" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:28.005146" elapsed="0.000304"/>
</branch>
<status status="FAIL" start="2026-08-23T02:09:27.998042" elapsed="0.007442">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:28.006038" elapsed="0.000037"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:28.006245" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:09:28.006174" elapsed="0.000133"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:28.006150" elapsed="0.000187"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:28.006534" elapsed="0.000030"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:09:28.006632" elapsed="0.000022"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:09:27.991283" elapsed="0.015496">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:28.006903" elapsed="0.000023"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:09:27.987411" elapsed="0.019628">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:09:28.007115" elapsed="0.000022"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:09:27.985090" elapsed="0.022154">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:28.007590" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:28.007385" elapsed="0.000284"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:28.007925" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:28.007703" elapsed="0.000315"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:28.008243" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:28.008053" elapsed="0.000267"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:28.007361" elapsed="0.000989"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:09:27.983953" elapsed="0.024506">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:29.012142" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:29.011129" elapsed="0.001083"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:29.024246" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:29.023984" elapsed="0.000311"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:29.024703" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:29.024448" elapsed="0.000301"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:09:29.031220" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:29.031270" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:29.031376" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:09:29.026991" elapsed="0.004772">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:09:29.024823" elapsed="0.007047">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:29.032072" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:29.031908" elapsed="0.000230"/>
</branch>
<status status="FAIL" start="2026-08-23T02:09:29.024801" elapsed="0.007361">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:29.032542" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:29.032680" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:09:29.032639" elapsed="0.000085"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:29.032622" elapsed="0.000124"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:29.032912" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:09:29.032985" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:09:29.018986" elapsed="0.014106">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:29.033163" elapsed="0.000016"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:09:29.012980" elapsed="0.020280">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:09:29.033314" elapsed="0.000015"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:09:29.010356" elapsed="0.023051">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:29.033639" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:29.033480" elapsed="0.000216"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:29.033880" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:29.033720" elapsed="0.000217"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:29.034108" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:29.033960" elapsed="0.000203"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:29.033463" elapsed="0.000721"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:09:29.009276" elapsed="0.024986">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:30.038026" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:30.036974" elapsed="0.001126"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:30.048471" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:30.048199" elapsed="0.000321"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:30.048937" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:30.048674" elapsed="0.000308"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:09:30.055323" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:30.055374" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:30.055482" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:09:30.051155" elapsed="0.004745">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:09:30.049063" elapsed="0.006922">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:30.056175" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:30.056024" elapsed="0.000217"/>
</branch>
<status status="FAIL" start="2026-08-23T02:09:30.049038" elapsed="0.007227">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:30.056651" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:30.056789" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:09:30.056748" elapsed="0.000116"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:30.056731" elapsed="0.000161"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:30.057039" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:09:30.057111" elapsed="0.000014"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:09:30.042520" elapsed="0.014698">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:30.057287" elapsed="0.000015"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:09:30.038616" elapsed="0.018764">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:09:30.057432" elapsed="0.000014"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:09:30.036304" elapsed="0.021217">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:30.057737" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:30.057592" elapsed="0.000200"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:30.057983" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:30.057816" elapsed="0.000221"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:30.058193" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:30.058061" elapsed="0.000247"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:30.057576" elapsed="0.000754"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:09:30.035197" elapsed="0.023211">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:31.062142" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:31.061137" elapsed="0.001077"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:31.073586" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:31.073324" elapsed="0.000309"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:31.074055" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:31.073784" elapsed="0.000316"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:09:31.080768" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:31.080928" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:31.081185" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:09:31.076261" elapsed="0.005816">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:09:31.074180" elapsed="0.008099">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:31.082738" elapsed="0.000054"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:31.082366" elapsed="0.000566"/>
</branch>
<status status="FAIL" start="2026-08-23T02:09:31.074155" elapsed="0.008835">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:31.083892" elapsed="0.000065"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:31.084223" elapsed="0.000036"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:09:31.084131" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:31.084089" 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>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:31.084735" elapsed="0.000052"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:09:31.084934" elapsed="0.000037"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:09:31.067297" elapsed="0.017890">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:31.085353" elapsed="0.000037"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:09:31.062696" elapsed="0.022882">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:09:31.085704" elapsed="0.000035"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:09:31.060419" elapsed="0.025534">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:31.086475" elapsed="0.000048"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:31.086129" elapsed="0.000575"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:31.087140" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:31.086764" elapsed="0.000510"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:31.087650" elapsed="0.000047"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:31.087330" elapsed="0.000447"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:31.086088" elapsed="0.001739"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:09:31.059311" elapsed="0.028734">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:32.091672" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:32.090644" elapsed="0.001099"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:32.103765" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:32.103505" elapsed="0.000307"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:32.104228" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:32.103981" elapsed="0.000292"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:09:32.110413" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:32.110463" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:32.110567" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:09:32.106446" elapsed="0.004623">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:09:32.104347" elapsed="0.006825">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:32.111370" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:32.111216" elapsed="0.000221"/>
</branch>
<status status="FAIL" start="2026-08-23T02:09:32.104325" elapsed="0.007135">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:32.111829" elapsed="0.000041"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:32.111988" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:09:32.111947" elapsed="0.000086"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:32.111930" elapsed="0.000125"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:32.112197" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:09:32.112267" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:09:32.098201" elapsed="0.014171">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:32.112444" elapsed="0.000017"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:09:32.092298" elapsed="0.020242">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:09:32.112656" elapsed="0.000017"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:09:32.090008" elapsed="0.022745">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:32.112995" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:32.112827" elapsed="0.000224"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:32.113214" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:32.113075" elapsed="0.000194"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:32.113426" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:32.113293" elapsed="0.000188"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:32.112810" elapsed="0.000692"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:09:32.088950" elapsed="0.024629">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:33.117047" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:33.116088" elapsed="0.001030"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:33.129518" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:33.129257" elapsed="0.000310"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:33.129985" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:33.129719" elapsed="0.000314"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:09:33.136528" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:33.136577" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:33.136680" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:09:33.132197" elapsed="0.004886">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:09:33.130106" elapsed="0.007061">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:33.137375" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:33.137203" elapsed="0.000238"/>
</branch>
<status status="FAIL" start="2026-08-23T02:09:33.130085" elapsed="0.007380">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:33.137834" elapsed="0.000041"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:33.137991" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:09:33.137951" elapsed="0.000084"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:33.137931" elapsed="0.000126"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:33.138199" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:09:33.138268" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:09:33.123352" elapsed="0.015021">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:33.138500" elapsed="0.000016"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:09:33.117624" elapsed="0.020974">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:09:33.138652" elapsed="0.000014"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:09:33.115435" elapsed="0.023309">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:33.138977" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:33.138816" elapsed="0.000218"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:33.139198" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:33.139057" elapsed="0.000195"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:33.139407" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:33.139275" elapsed="0.000186"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:33.138799" elapsed="0.000683"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:09:33.114382" elapsed="0.025176">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:34.141608" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:34.141148" elapsed="0.000496"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:34.150940" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:34.150661" elapsed="0.000328"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:34.151417" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:34.151141" elapsed="0.000321"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:09:34.157723" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:34.157772" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:34.157906" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:09:34.153620" elapsed="0.004681">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:09:34.151536" elapsed="0.006849">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:34.158571" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:34.158420" elapsed="0.000216"/>
</branch>
<status status="FAIL" start="2026-08-23T02:09:34.151514" elapsed="0.007145">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:34.159051" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:34.159188" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:09:34.159148" elapsed="0.000085"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:34.159131" elapsed="0.000149"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:34.159421" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:09:34.159552" elapsed="0.000016"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:09:34.146347" elapsed="0.013313">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:34.159729" elapsed="0.000016"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:09:34.141884" elapsed="0.017940">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:09:34.159895" elapsed="0.000016"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:09:34.140806" elapsed="0.019183">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:34.160206" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:34.160062" elapsed="0.000200"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:34.160424" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:34.160285" elapsed="0.000193"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:34.160634" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:34.160501" elapsed="0.000187"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:34.160045" elapsed="0.000664"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:09:34.140233" elapsed="0.020553">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:35.164628" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:35.163584" elapsed="0.001121"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:35.175402" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:35.175140" elapsed="0.000312"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:35.175887" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:35.175607" elapsed="0.000327"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:09:35.182341" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:35.182393" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:35.182499" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:09:35.178148" elapsed="0.004775">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:09:35.176016" elapsed="0.006996">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:35.183203" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:35.183051" elapsed="0.000219"/>
</branch>
<status status="FAIL" start="2026-08-23T02:09:35.175991" elapsed="0.007303">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:35.183677" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:35.183908" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:09:35.183861" elapsed="0.000096"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:35.183821" elapsed="0.000158"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:35.184124" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:09:35.184195" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:09:35.170715" elapsed="0.013587">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:35.184373" elapsed="0.000016"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:09:35.165297" elapsed="0.019172">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:09:35.184524" elapsed="0.000015"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:09:35.162872" elapsed="0.021744">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:35.184854" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:35.184689" elapsed="0.000241"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:35.185132" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:35.184954" elapsed="0.000237"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:35.185351" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:35.185215" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:35.184672" elapsed="0.000756"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:09:35.161689" elapsed="0.023819">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:36.189061" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:36.188092" elapsed="0.001040"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:36.200048" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:36.199773" elapsed="0.000322"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:36.200491" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:36.200246" elapsed="0.000289"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:09:36.206616" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:36.206667" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:36.206798" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:09:36.202707" elapsed="0.004610">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:09:36.200611" elapsed="0.006822">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:36.207694" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:36.207484" elapsed="0.000391"/>
</branch>
<status status="FAIL" start="2026-08-23T02:09:36.200588" elapsed="0.007326">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:36.208438" elapsed="0.000036"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:36.208629" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:09:36.208574" elapsed="0.000117"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:36.208549" elapsed="0.000172"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:36.208940" elapsed="0.000031"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:09:36.209040" elapsed="0.000021"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:09:36.193788" elapsed="0.015399">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:36.209285" elapsed="0.000022"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:09:36.189613" elapsed="0.019805">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:09:36.209492" elapsed="0.000021"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:09:36.187436" elapsed="0.022184">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:36.209946" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:36.209721" elapsed="0.000305"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:36.210254" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:36.210059" elapsed="0.000271"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:36.210549" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:36.210362" elapsed="0.000262"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:36.209698" elapsed="0.000955"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:09:36.186342" elapsed="0.024433">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:37.214501" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:37.213505" elapsed="0.001066"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:37.228136" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:37.227873" elapsed="0.000311"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:37.228660" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:37.228404" elapsed="0.000300"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:09:37.235015" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:37.235064" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:37.235171" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:09:37.230874" elapsed="0.004692">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:09:37.228779" elapsed="0.006934">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:37.235920" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:37.235751" elapsed="0.000237"/>
</branch>
<status status="FAIL" start="2026-08-23T02:09:37.228756" elapsed="0.007259">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:37.236466" elapsed="0.000031"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:37.236614" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:09:37.236572" elapsed="0.000089"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:37.236553" elapsed="0.000130"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:37.236829" elapsed="0.000040"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:09:37.236919" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:09:37.221062" elapsed="0.015973">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:37.237138" elapsed="0.000021"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:09:37.215087" elapsed="0.022184">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:09:37.237343" elapsed="0.000021"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:09:37.212814" elapsed="0.024656">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:37.237769" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:37.237568" elapsed="0.000298"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:37.238100" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:37.237900" elapsed="0.000274"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:37.238388" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:37.238206" elapsed="0.000256"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:37.237545" elapsed="0.000946"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:09:37.211616" elapsed="0.026980">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:38.242147" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:38.241135" elapsed="0.001082"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:38.254187" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:38.253917" elapsed="0.000318"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:38.254648" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:38.254398" elapsed="0.000295"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:09:38.261088" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:38.261138" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:38.261307" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:09:38.256855" elapsed="0.004868">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:09:38.254768" elapsed="0.007040">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:38.262017" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:38.261862" elapsed="0.000221"/>
</branch>
<status status="FAIL" start="2026-08-23T02:09:38.254745" elapsed="0.007362">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:38.262483" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:38.262620" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:09:38.262580" elapsed="0.000086"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:38.262562" elapsed="0.000126"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:38.262846" elapsed="0.000024"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:09:38.262921" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:09:38.248676" elapsed="0.014352">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:38.263104" elapsed="0.000016"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:09:38.242737" elapsed="0.020464">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:09:38.263256" elapsed="0.000015"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:09:38.240473" elapsed="0.022876">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:38.263569" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:38.263422" elapsed="0.000202"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:38.263788" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:38.263648" elapsed="0.000208"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:38.264016" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:38.263881" elapsed="0.000190"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:38.263406" elapsed="0.000685"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:09:38.239434" elapsed="0.024736">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:39.268315" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:39.267116" elapsed="0.001276"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:39.280617" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:39.280338" elapsed="0.000332"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:39.281094" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:39.280826" elapsed="0.000313"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:09:39.287350" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:39.287478" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:39.287590" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:09:39.283374" elapsed="0.004638">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:09:39.281217" elapsed="0.006910">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:39.288439" elapsed="0.000040"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:39.288180" elapsed="0.000363"/>
</branch>
<status status="FAIL" start="2026-08-23T02:09:39.281192" elapsed="0.007385">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:39.289148" elapsed="0.000037"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:39.289343" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:09:39.289285" elapsed="0.000121"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:39.289260" elapsed="0.000176"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:39.289633" elapsed="0.000029"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:09:39.289729" elapsed="0.000020"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:09:39.274075" elapsed="0.015822">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:39.289996" elapsed="0.000022"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:09:39.268946" elapsed="0.021190">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:09:39.290209" elapsed="0.000021"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:09:39.266365" elapsed="0.023974">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:39.290641" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:39.290438" elapsed="0.000279"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:39.291051" elapsed="0.000040"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:39.290751" elapsed="0.000394"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:39.291375" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:39.291179" elapsed="0.000272"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:39.290415" elapsed="0.001066"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:09:39.265082" elapsed="0.026510">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:40.295264" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:40.294290" elapsed="0.001045"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:40.308472" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:40.308207" elapsed="0.000314"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:40.308936" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:40.308674" elapsed="0.000307"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:09:40.315333" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:40.315382" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:40.315492" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:09:40.311236" elapsed="0.004676">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:09:40.309140" elapsed="0.006856">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:40.316207" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:40.316033" elapsed="0.000240"/>
</branch>
<status status="FAIL" start="2026-08-23T02:09:40.309116" elapsed="0.007181">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:40.316675" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:40.316813" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:09:40.316772" elapsed="0.000104"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:40.316754" elapsed="0.000145"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:40.317040" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:09:40.317110" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:09:40.301965" elapsed="0.015251">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:40.317288" elapsed="0.000015"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:09:40.295817" elapsed="0.021566">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:09:40.317438" elapsed="0.000016"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:09:40.293627" elapsed="0.023904">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:40.317771" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:40.317604" elapsed="0.000246"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:40.318020" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:40.317876" elapsed="0.000199"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:40.318239" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:40.318102" elapsed="0.000190"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:40.317587" elapsed="0.000726"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:09:40.292528" elapsed="0.025863">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:41.321980" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:41.320953" elapsed="0.001100"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:41.334078" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:41.333802" elapsed="0.000325"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:41.334546" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:41.334296" elapsed="0.000295"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:09:41.340867" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:41.340918" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:41.341022" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:09:41.336757" elapsed="0.004727">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:09:41.334667" elapsed="0.006901">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:41.341756" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:41.341605" elapsed="0.000217"/>
</branch>
<status status="FAIL" start="2026-08-23T02:09:41.334645" elapsed="0.007218">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:41.342232" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:41.342369" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:09:41.342327" elapsed="0.000087"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:41.342310" elapsed="0.000126"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:41.342577" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:09:41.342647" elapsed="0.000016"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:09:41.328440" elapsed="0.014313">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:41.342823" elapsed="0.000032"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:09:41.322659" elapsed="0.020279">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:09:41.342993" elapsed="0.000015"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:09:41.320295" elapsed="0.022790">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:41.343309" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:41.343158" elapsed="0.000207"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:41.343530" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:41.343389" elapsed="0.000195"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:41.343742" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:41.343607" elapsed="0.000188"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:41.343141" elapsed="0.000675"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:09:41.319233" elapsed="0.024675">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:42.347525" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:42.346557" elapsed="0.001040"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:42.359353" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:42.359018" elapsed="0.000384"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:42.359806" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:42.359558" elapsed="0.000311"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:09:42.366039" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:42.366089" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:42.366211" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:09:42.362027" elapsed="0.004571">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:09:42.359945" elapsed="0.006737">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:42.366890" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:42.366718" elapsed="0.000239"/>
</branch>
<status status="FAIL" start="2026-08-23T02:09:42.359922" elapsed="0.007059">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:42.367355" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:42.367491" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:09:42.367452" elapsed="0.000085"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:42.367434" elapsed="0.000124"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:42.367697" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:09:42.367766" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:09:42.353947" elapsed="0.013939">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:42.367956" elapsed="0.000015"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:09:42.348114" elapsed="0.019937">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:09:42.368104" elapsed="0.000015"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:09:42.345871" elapsed="0.022325">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:42.368412" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:42.368267" elapsed="0.000200"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:42.368630" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:42.368491" elapsed="0.000194"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:42.368857" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:42.368709" elapsed="0.000263"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:42.368251" elapsed="0.000744"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:09:42.344779" elapsed="0.024295">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:43.372648" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:43.371684" elapsed="0.001033"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:43.384332" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:43.384068" elapsed="0.000311"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:43.384777" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:43.384531" elapsed="0.000291"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:09:43.391078" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:43.391128" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:43.391239" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:09:43.387000" elapsed="0.004661">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:09:43.384917" elapsed="0.006830">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:43.391950" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:43.391782" elapsed="0.000235"/>
</branch>
<status status="FAIL" start="2026-08-23T02:09:43.384893" elapsed="0.007147">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:43.392414" elapsed="0.000025"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:43.392549" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:09:43.392509" elapsed="0.000085"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:43.392492" elapsed="0.000124"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:43.392755" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:09:43.392825" elapsed="0.000018"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:09:43.379079" elapsed="0.013873">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:43.393022" elapsed="0.000015"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:09:43.373228" elapsed="0.019889">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:09:43.393170" elapsed="0.000015"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:09:43.371003" elapsed="0.022263">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:43.393485" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:43.393338" elapsed="0.000276"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:43.393784" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:43.393640" elapsed="0.000203"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:43.394016" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:43.393879" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:43.393320" elapsed="0.000771"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:09:43.369946" elapsed="0.024225">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:44.398192" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:44.397161" elapsed="0.001111"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:44.409401" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:44.409131" elapsed="0.000318"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:44.409854" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:44.409600" elapsed="0.000314"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:09:44.416159" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:44.416216" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:44.416364" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:09:44.412202" elapsed="0.004737">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:09:44.409991" elapsed="0.007070">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:44.417335" elapsed="0.000040"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:44.417115" elapsed="0.000335"/>
</branch>
<status status="FAIL" start="2026-08-23T02:09:44.409968" elapsed="0.007518">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:44.418039" elapsed="0.000042"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:44.418247" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:09:44.418187" elapsed="0.000123"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:44.418161" elapsed="0.000179"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:44.418554" elapsed="0.000032"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:09:44.418657" elapsed="0.000022"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:09:44.403288" elapsed="0.015521">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:44.418934" elapsed="0.000024"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:09:44.398830" elapsed="0.020242">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:09:44.419260" elapsed="0.000032"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:09:44.396456" elapsed="0.022968">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:44.419750" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:44.419530" elapsed="0.000301"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:44.420095" elapsed="0.000060"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:44.419890" elapsed="0.000316"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:44.420429" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:44.420239" elapsed="0.000264"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:44.419506" elapsed="0.001025"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:09:44.395147" elapsed="0.025508">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:45.424477" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:45.423443" elapsed="0.001105"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:45.436832" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:45.436573" elapsed="0.000324"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:45.437302" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:45.437050" elapsed="0.000297"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:09:45.443465" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:45.443515" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:45.443619" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:09:45.439513" elapsed="0.004512">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:09:45.437421" elapsed="0.006688">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:45.444297" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:45.444145" elapsed="0.000218"/>
</branch>
<status status="FAIL" start="2026-08-23T02:09:45.437399" elapsed="0.006987">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:45.444789" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:45.444946" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:09:45.444905" elapsed="0.000086"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:45.444887" elapsed="0.000127"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:45.445155" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:09:45.445226" elapsed="0.000014"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:09:45.430789" elapsed="0.014547">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:45.445466" elapsed="0.000017"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:09:45.425066" elapsed="0.020499">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:09:45.445618" elapsed="0.000015"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:09:45.422782" elapsed="0.022927">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:45.445945" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:45.445780" elapsed="0.000223"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:45.446164" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:45.446026" elapsed="0.000193"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:45.446373" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:45.446241" elapsed="0.000186"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:45.445763" elapsed="0.000684"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:09:45.421688" elapsed="0.024836">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:46.450028" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:46.449056" elapsed="0.001041"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:46.463907" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:46.463622" elapsed="0.000334"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:46.464360" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:46.464109" elapsed="0.000295"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:09:46.470292" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:46.470341" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:46.470453" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:09:46.466588" elapsed="0.004288">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:09:46.464478" elapsed="0.006482">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:46.471149" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:46.470998" elapsed="0.000217"/>
</branch>
<status status="FAIL" start="2026-08-23T02:09:46.464455" elapsed="0.006783">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:46.471614" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:46.471749" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:09:46.471710" elapsed="0.000083"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:46.471693" elapsed="0.000121"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:46.471986" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:09:46.472170" elapsed="0.000017"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:09:46.459148" elapsed="0.013135">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:46.472356" elapsed="0.000015"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:09:46.450576" elapsed="0.021875">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:09:46.472513" elapsed="0.000015"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:09:46.448347" elapsed="0.024257">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:46.472821" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:46.472676" elapsed="0.000221"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:46.473061" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:46.472921" elapsed="0.000194"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:46.473271" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:46.473139" elapsed="0.000186"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:46.472660" elapsed="0.000686"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:09:46.447299" elapsed="0.026125">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:47.477249" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:47.476282" elapsed="0.001039"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:47.488356" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:47.488092" elapsed="0.000317"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:47.488812" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:47.488561" elapsed="0.000313"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:09:47.494859" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:47.494910" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:47.495015" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:09:47.491041" elapsed="0.004401">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:09:47.488954" elapsed="0.006608">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:47.495824" elapsed="0.000054"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:47.495613" elapsed="0.000328"/>
</branch>
<status status="FAIL" start="2026-08-23T02:09:47.488930" elapsed="0.007044">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:47.496494" elapsed="0.000037"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:47.496760" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:09:47.496703" elapsed="0.000119"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:47.496677" elapsed="0.000198"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:47.497077" elapsed="0.000030"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:09:47.497175" elapsed="0.000022"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:09:47.483663" elapsed="0.013662">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:47.497426" elapsed="0.000023"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:09:47.477798" elapsed="0.019763">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:09:47.497637" elapsed="0.000021"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:09:47.475580" elapsed="0.022185">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:47.498104" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:47.497891" elapsed="0.000291"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:47.498409" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:47.498216" elapsed="0.000267"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:47.498701" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:47.498516" elapsed="0.000259"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:47.497866" elapsed="0.000937"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:09:47.474392" elapsed="0.024542">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:48.502811" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:48.501778" elapsed="0.001139"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:48.515224" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:48.514956" elapsed="0.000319"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:48.515787" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:48.515450" elapsed="0.000417"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:09:48.522178" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:48.522229" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:48.522334" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:09:48.518143" elapsed="0.004623">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:09:48.515953" elapsed="0.006918">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:48.523070" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:48.522911" elapsed="0.000294"/>
</branch>
<status status="FAIL" start="2026-08-23T02:09:48.515928" elapsed="0.007304">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:48.523612" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:48.523750" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:09:48.523709" elapsed="0.000086"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:48.523691" elapsed="0.000126"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:48.523976" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:09:48.524047" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:09:48.509490" elapsed="0.014664">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:48.524224" elapsed="0.000015"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:09:48.503411" elapsed="0.020909">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:09:48.524377" elapsed="0.000016"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:09:48.501127" elapsed="0.023343">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:48.524691" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:48.524543" elapsed="0.000203"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:48.524927" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:48.524770" elapsed="0.000214"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:48.525143" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:48.525007" elapsed="0.000190"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:48.524526" elapsed="0.000692"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:09:48.499970" elapsed="0.025326">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:49.529285" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:49.528201" elapsed="0.001160"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:49.540606" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:49.540335" elapsed="0.000321"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:49.541079" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:49.540812" elapsed="0.000311"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:09:49.547285" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:49.547353" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:49.547460" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:09:49.543324" elapsed="0.004541">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:09:49.541202" elapsed="0.006821">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:49.548217" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:49.548063" elapsed="0.000220"/>
</branch>
<status status="FAIL" start="2026-08-23T02:09:49.541178" elapsed="0.007129">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:49.548684" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:49.548822" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:09:49.548782" elapsed="0.000104"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:49.548764" elapsed="0.000144"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:49.549052" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:09:49.549123" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:09:49.535923" elapsed="0.013306">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:49.549299" elapsed="0.000016"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:09:49.529910" elapsed="0.019491">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:09:49.549455" elapsed="0.000015"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:09:49.527487" elapsed="0.022061">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:49.549767" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:49.549621" elapsed="0.000202"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:49.550007" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:49.549864" elapsed="0.000197"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:49.550218" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:49.550084" elapsed="0.000188"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:49.549604" elapsed="0.000688"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:09:49.526254" elapsed="0.024115">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:50.554240" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:50.553154" elapsed="0.001161"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:50.566652" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:50.566390" elapsed="0.000310"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:50.567120" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:50.566870" elapsed="0.000294"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:09:50.573397" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:50.573447" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:50.573616" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:09:50.569343" elapsed="0.004686">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:09:50.567240" elapsed="0.006898">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:50.574330" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:50.574176" elapsed="0.000220"/>
</branch>
<status status="FAIL" start="2026-08-23T02:09:50.567217" elapsed="0.007203">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:50.574804" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:50.574960" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:09:50.574919" elapsed="0.000086"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:50.574901" elapsed="0.000125"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:50.575168" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:09:50.575236" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:09:50.560904" elapsed="0.014438">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:50.575429" elapsed="0.000016"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:09:50.554873" elapsed="0.020654">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:09:50.575580" elapsed="0.000015"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:09:50.552436" elapsed="0.023235">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:50.575910" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:50.575743" elapsed="0.000223"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:50.576129" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:50.575990" elapsed="0.000192"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:50.576338" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:50.576205" elapsed="0.000186"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:50.575727" elapsed="0.000684"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:09:50.551311" elapsed="0.025182">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:51.580235" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:51.579196" elapsed="0.001111"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:51.593933" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:51.593574" elapsed="0.000426"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:51.594530" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:51.594202" elapsed="0.000387"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:09:51.602277" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:51.602433" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:51.602584" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:09:51.597515" elapsed="0.005609">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:09:51.594692" elapsed="0.008535">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:51.603443" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:51.603271" elapsed="0.000244"/>
</branch>
<status status="FAIL" start="2026-08-23T02:09:51.594659" elapsed="0.008882">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:51.603950" elapsed="0.000027"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:51.604090" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:09:51.604049" elapsed="0.000088"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:51.604032" elapsed="0.000127"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:51.604302" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:09:51.604371" elapsed="0.000014"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:09:51.586162" elapsed="0.018321">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:51.604551" elapsed="0.000016"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:09:51.580812" elapsed="0.023834">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:09:51.604698" elapsed="0.000015"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:09:51.578482" elapsed="0.026307">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:51.605026" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:51.604878" elapsed="0.000204"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:51.605242" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:51.605105" elapsed="0.000190"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:51.605452" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:51.605319" elapsed="0.000186"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:51.604860" elapsed="0.000665"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:09:51.577354" elapsed="0.028249">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:52.609432" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:52.608394" elapsed="0.001115"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:52.620650" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:52.620370" elapsed="0.000333"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:52.621137" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:52.620879" elapsed="0.000305"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:09:52.627629" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:52.627689" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:52.627802" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:09:52.623480" elapsed="0.004750">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:09:52.621340" elapsed="0.006977">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:52.628509" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:52.628354" elapsed="0.000223"/>
</branch>
<status status="FAIL" start="2026-08-23T02:09:52.621315" elapsed="0.007286">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:52.629016" elapsed="0.000028"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:52.629161" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:09:52.629118" elapsed="0.000088"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:52.629100" elapsed="0.000129"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:52.629373" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:09:52.629445" elapsed="0.000017"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:09:52.614400" elapsed="0.015159">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:52.629632" elapsed="0.000016"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:09:52.610051" elapsed="0.019678">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:09:52.629784" elapsed="0.000016"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:09:52.607679" elapsed="0.022228">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:52.630136" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:52.629987" elapsed="0.000208"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:52.630360" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:52.630219" elapsed="0.000197"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:52.630610" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:52.630440" elapsed="0.000229"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:52.629969" elapsed="0.000721"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:09:52.606520" elapsed="0.024250">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:53.634380" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:53.633408" elapsed="0.001043"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:53.646134" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:53.645868" elapsed="0.000314"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:53.646583" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:53.646335" elapsed="0.000293"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:09:53.652931" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:53.652995" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:53.653114" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:09:53.648789" elapsed="0.004735">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:09:53.646703" elapsed="0.006977">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:53.653971" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:53.653731" elapsed="0.000333"/>
</branch>
<status status="FAIL" start="2026-08-23T02:09:53.646681" elapsed="0.007415">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:53.654623" elapsed="0.000036"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:53.654813" elapsed="0.000026"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:09:53.654758" elapsed="0.000142"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:53.654734" elapsed="0.000196"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:53.655129" elapsed="0.000030"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:09:53.655227" elapsed="0.000021"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:09:53.639746" elapsed="0.015627">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:53.655470" elapsed="0.000022"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:09:53.635093" elapsed="0.020508">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:09:53.655675" elapsed="0.000020"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:09:53.632739" elapsed="0.023061">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:53.656129" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:53.655924" elapsed="0.000283"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:53.656432" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:53.656239" elapsed="0.000267"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:53.656765" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:53.656558" elapsed="0.000303"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:53.655900" elapsed="0.000992"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:09:53.631617" elapsed="0.025385">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:54.660713" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:54.659739" elapsed="0.001044"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:54.672996" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:54.672615" elapsed="0.000448"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:54.673658" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:54.673308" elapsed="0.000448"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:09:54.679964" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:54.680016" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:54.680120" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:09:54.676000" elapsed="0.004499">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:09:54.673906" elapsed="0.006675">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:54.680771" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:54.680620" elapsed="0.000233"/>
</branch>
<status status="FAIL" start="2026-08-23T02:09:54.673871" elapsed="0.007008">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:54.681251" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:54.681424" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:09:54.681382" elapsed="0.000087"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:54.681330" elapsed="0.000161"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:54.681632" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:09:54.681702" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:09:54.666553" elapsed="0.015340">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:54.682010" elapsed="0.000022"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:09:54.661322" elapsed="0.020822">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:09:54.682218" elapsed="0.000021"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:09:54.659108" elapsed="0.023240">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:54.682652" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:54.682449" elapsed="0.000281"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:54.682978" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:54.682764" elapsed="0.000292"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:54.683275" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:54.683089" elapsed="0.000329"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:54.682426" elapsed="0.001022"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:09:54.658011" elapsed="0.025548">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:55.687230" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:55.686255" elapsed="0.001046"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:55.698433" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:55.698173" elapsed="0.000308"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:55.698902" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:55.698637" elapsed="0.000310"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:09:55.705333" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:55.705382" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:55.705485" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:09:55.701120" elapsed="0.004916">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:09:55.699022" elapsed="0.007129">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:55.706409" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:55.706200" elapsed="0.000300"/>
</branch>
<status status="FAIL" start="2026-08-23T02:09:55.699000" elapsed="0.007532">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:55.707060" elapsed="0.000037"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:55.707248" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:09:55.707194" elapsed="0.000114"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:55.707170" elapsed="0.000168"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:55.707533" elapsed="0.000030"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:09:55.707632" elapsed="0.000020"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:09:55.692209" elapsed="0.015569">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:55.707901" elapsed="0.000023"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:09:55.687789" elapsed="0.020247">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:09:55.708111" elapsed="0.000021"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:09:55.685578" elapsed="0.022660">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:55.708579" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:55.708341" elapsed="0.000393"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:55.709005" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:55.708769" elapsed="0.000315"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:55.709328" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:55.709130" elapsed="0.000272"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:55.708316" elapsed="0.001115"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:09:55.684428" elapsed="0.025113">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:56.713217" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:56.712214" elapsed="0.001075"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:56.725123" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:56.724836" elapsed="0.000337"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:56.725573" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:56.725327" elapsed="0.000290"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:09:56.731987" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:56.732037" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:56.732146" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:09:56.727757" elapsed="0.004786">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:09:56.725695" elapsed="0.006935">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:56.732819" elapsed="0.000040"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:56.732669" elapsed="0.000234"/>
</branch>
<status status="FAIL" start="2026-08-23T02:09:56.725671" elapsed="0.007256">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:56.733309" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:56.733447" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:09:56.733405" elapsed="0.000088"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:56.733388" elapsed="0.000126"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:56.733706" elapsed="0.000025"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:09:56.733781" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:09:56.720232" elapsed="0.013670">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:56.733972" elapsed="0.000016"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:09:56.713797" elapsed="0.020270">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:09:56.734183" elapsed="0.000017"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:09:56.711442" elapsed="0.022837">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:56.734498" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:56.734351" elapsed="0.000202"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:56.734715" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:56.734577" elapsed="0.000192"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:56.734943" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:56.734793" elapsed="0.000205"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:56.734334" elapsed="0.000684"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:09:56.710394" elapsed="0.024702">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:57.738680" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:57.737670" elapsed="0.001081"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:57.750621" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:57.750361" elapsed="0.000309"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:57.751088" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:57.750821" elapsed="0.000312"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:09:57.757564" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:57.757613" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:57.757719" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:09:57.753275" elapsed="0.004884">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:09:57.751210" elapsed="0.007032">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:57.758430" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:57.758279" elapsed="0.000216"/>
</branch>
<status status="FAIL" start="2026-08-23T02:09:57.751187" elapsed="0.007332">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:57.758915" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:57.759052" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:09:57.759012" elapsed="0.000084"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:57.758994" elapsed="0.000124"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:57.759258" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:09:57.759328" elapsed="0.000014"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:09:57.745010" elapsed="0.014423">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:57.759564" elapsed="0.000017"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:09:57.739270" elapsed="0.020394">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:09:57.759719" elapsed="0.000015"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:09:57.737033" elapsed="0.022777">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:57.760046" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:57.759901" elapsed="0.000201"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:57.760264" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:57.760125" elapsed="0.000192"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:57.760472" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:57.760340" elapsed="0.000185"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:57.759884" elapsed="0.000662"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:09:57.735926" elapsed="0.024697">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:58.764244" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:58.763197" elapsed="0.001122"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:58.778541" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:58.778178" elapsed="0.000430"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:58.779194" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:58.778821" elapsed="0.000436"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:09:58.785728" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:58.785778" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:58.785909" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:09:58.781544" elapsed="0.004748">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:09:58.779389" elapsed="0.006987">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:58.786567" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:58.786413" elapsed="0.000220"/>
</branch>
<status status="FAIL" start="2026-08-23T02:09:58.779358" elapsed="0.007300">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:58.787055" elapsed="0.000027"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:58.787192" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:09:58.787153" elapsed="0.000083"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:58.787135" elapsed="0.000123"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:58.787443" elapsed="0.000025"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:09:58.787591" elapsed="0.000018"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:09:58.772105" elapsed="0.015638">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:58.787868" elapsed="0.000024"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:09:58.764875" elapsed="0.023135">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:09:58.788090" elapsed="0.000022"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:09:58.762527" elapsed="0.025696">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:58.788536" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:58.788327" elapsed="0.000289"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:58.788874" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:58.788651" elapsed="0.000305"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:58.789184" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:58.788990" elapsed="0.000274"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:58.788302" elapsed="0.000992"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:09:58.761455" elapsed="0.027950">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:09:59.793092" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:09:59.792095" elapsed="0.001068"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:59.805021" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:59.804734" elapsed="0.000336"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:09:59.805468" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:09:59.805222" elapsed="0.000291"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:09:59.812354" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:59.812414" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:09:59.812541" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:09:59.807751" elapsed="0.005266">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:09:59.805590" elapsed="0.007515">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:59.813308" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:59.813147" elapsed="0.000225"/>
</branch>
<status status="FAIL" start="2026-08-23T02:09:59.805566" elapsed="0.007830">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:59.813771" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:59.813994" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:09:59.813951" elapsed="0.000089"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:59.813932" elapsed="0.000130"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:59.814207" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:09:59.814277" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:09:59.799634" elapsed="0.014751">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:09:59.814453" elapsed="0.000016"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:09:59.793731" elapsed="0.020818">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:09:59.814602" elapsed="0.000015"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:09:59.791384" elapsed="0.023308">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:59.814930" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:59.814763" elapsed="0.000224"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:59.815149" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:59.815010" elapsed="0.000192"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:09:59.815357" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:09:59.815225" elapsed="0.000185"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:09:59.814747" elapsed="0.000683"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:09:59.790302" elapsed="0.025206">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:00.819793" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:00.818536" elapsed="0.001391"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:00.830613" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:00.830319" elapsed="0.000351"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:00.831102" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:00.830831" elapsed="0.000316"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:00.838175" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:00.838229" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:00.838344" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:10:00.833549" elapsed="0.005260">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:00.831227" elapsed="0.007712">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:00.839152" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:00.838985" elapsed="0.000308"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:00.831203" elapsed="0.008117">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:00.839743" elapsed="0.000029"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:00.839915" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:00.839870" elapsed="0.000094"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:00.839830" elapsed="0.000157"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:00.840136" elapsed="0.000029"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:00.840220" elapsed="0.000016"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:10:00.825879" elapsed="0.014504">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:00.840457" elapsed="0.000017"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:00.820560" elapsed="0.019998">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:10:00.840614" elapsed="0.000016"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:10:00.817752" elapsed="0.022963">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:00.841063" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:00.840827" elapsed="0.000319"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:00.841379" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:00.841180" elapsed="0.000278"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:00.841701" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:00.841495" elapsed="0.000286"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:00.840803" elapsed="0.001008"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:10:00.816581" elapsed="0.025384">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:01.845764" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:01.844790" elapsed="0.001073"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:01.857552" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:01.857265" elapsed="0.000339"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:01.858028" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:01.857763" elapsed="0.000310"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:01.864441" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:01.864491" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:01.864601" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:10:01.860258" elapsed="0.004856">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:01.858150" elapsed="0.007165">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:01.865584" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:01.865368" elapsed="0.000309"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:01.858126" elapsed="0.007585">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:01.866274" elapsed="0.000037"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:01.866469" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:01.866411" elapsed="0.000120"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:01.866387" elapsed="0.000175"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:01.866760" elapsed="0.000030"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:01.866884" elapsed="0.000023"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:10:01.851100" elapsed="0.015936">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:01.867136" elapsed="0.000022"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:01.846350" elapsed="0.020921">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:10:01.867347" elapsed="0.000021"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:10:01.844135" elapsed="0.023341">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:01.867785" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:01.867577" elapsed="0.000312"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:01.868150" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:01.867924" elapsed="0.000304"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:01.868447" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:01.868260" elapsed="0.000262"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:01.867554" elapsed="0.000996"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:10:01.842887" elapsed="0.025774">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:02.872390" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:02.871391" elapsed="0.001071"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:02.884119" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:02.883851" elapsed="0.000317"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:02.884572" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:02.884324" elapsed="0.000293"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:02.891183" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:02.891234" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:02.891430" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:10:02.886789" elapsed="0.005041">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:02.884699" elapsed="0.007240">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:02.892131" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:02.891977" elapsed="0.000220"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:02.884673" elapsed="0.007547">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:02.892598" elapsed="0.000025"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:02.892736" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:02.892695" elapsed="0.000087"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:02.892678" elapsed="0.000125"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:02.892967" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:02.893037" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:10:02.878886" elapsed="0.014258">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:02.893215" elapsed="0.000015"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:02.872985" elapsed="0.020324">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:10:02.893363" elapsed="0.000015"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:10:02.870661" elapsed="0.022792">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:02.893672" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:02.893526" elapsed="0.000201"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:02.893913" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:02.893751" elapsed="0.000217"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:02.894126" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:02.893992" elapsed="0.000187"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:02.893510" elapsed="0.000690"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:10:02.869536" elapsed="0.024741">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:03.898076" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:03.897044" elapsed="0.001108"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:03.908537" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:03.908276" elapsed="0.000308"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:03.909004" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:03.908738" elapsed="0.000312"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:03.915220" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:03.915344" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:03.915453" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:10:03.911268" elapsed="0.004591">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:03.909128" elapsed="0.006817">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:03.916134" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:03.915982" elapsed="0.000218"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:03.909104" elapsed="0.007120">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:03.916600" elapsed="0.000025"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:03.916737" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:03.916696" elapsed="0.000087"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:03.916679" elapsed="0.000129"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:03.916969" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:03.917041" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:10:03.902640" elapsed="0.014507">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:03.917217" elapsed="0.000016"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:03.898817" elapsed="0.018496">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:10:03.917367" elapsed="0.000015"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:10:03.896340" elapsed="0.021121">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:03.917677" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:03.917533" elapsed="0.000199"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:03.917951" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:03.917757" elapsed="0.000261"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:03.918174" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:03.918041" elapsed="0.000187"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:03.917516" elapsed="0.000733"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:10:03.895181" elapsed="0.023167">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:04.922496" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:04.921356" elapsed="0.001212"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:04.934303" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:04.934043" elapsed="0.000308"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:04.934749" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:04.934503" elapsed="0.000289"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:04.941067" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:04.941118" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:04.941229" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:10:04.937111" elapsed="0.004555">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:04.934998" elapsed="0.006757">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:04.941967" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:04.941792" elapsed="0.000241"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:04.934972" elapsed="0.007085">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:04.942429" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:04.942566" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:04.942525" elapsed="0.000088"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:04.942508" elapsed="0.000126"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:04.942777" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:04.942862" elapsed="0.000016"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:10:04.929216" elapsed="0.013757">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:04.943043" elapsed="0.000015"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:04.923113" elapsed="0.020023">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:10:04.943190" elapsed="0.000014"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:10:04.920295" elapsed="0.022985">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:04.943497" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:04.943352" elapsed="0.000200"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:04.943713" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:04.943575" elapsed="0.000191"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:04.943938" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:04.943789" elapsed="0.000204"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:04.943335" elapsed="0.000678"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:10:04.919202" elapsed="0.024890">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:05.947771" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:05.946739" elapsed="0.001142"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:05.957806" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:05.957525" elapsed="0.000348"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:05.958282" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:05.958033" elapsed="0.000294"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:05.964366" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:05.964417" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:05.964527" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:10:05.960527" elapsed="0.004424">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:05.958405" elapsed="0.006633">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:05.965231" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:05.965077" elapsed="0.000220"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:05.958382" elapsed="0.006939">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:05.965694" elapsed="0.000025"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:05.965831" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:05.965791" elapsed="0.000106"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:05.965773" elapsed="0.000150"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:05.966068" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:05.966140" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:10:05.953149" elapsed="0.013099">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:05.966319" elapsed="0.000016"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:05.948514" elapsed="0.017903">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:10:05.966473" elapsed="0.000016"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:10:05.946094" elapsed="0.020473">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:05.966791" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:05.966642" elapsed="0.000225"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:05.967035" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:05.966892" elapsed="0.000197"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:05.967248" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:05.967113" elapsed="0.000191"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:05.966625" elapsed="0.000699"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:10:05.944988" elapsed="0.022458">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:06.971106" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:06.970124" elapsed="0.001055"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:06.982373" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:06.982077" elapsed="0.000344"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:06.982819" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:06.982574" elapsed="0.000305"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:06.989243" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:06.989293" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:06.989403" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:10:06.985031" elapsed="0.004834">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:06.982959" elapsed="0.006993">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:06.990146" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:06.989989" elapsed="0.000222"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:06.982935" elapsed="0.007300">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:06.990617" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:06.990753" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:06.990713" elapsed="0.000084"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:06.990696" elapsed="0.000122"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:06.990982" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:06.991053" elapsed="0.000014"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:10:06.977434" elapsed="0.013724">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:06.991226" elapsed="0.000015"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:06.971662" elapsed="0.019657">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:10:06.991371" elapsed="0.000014"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:10:06.969409" elapsed="0.022051">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:06.991675" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:06.991530" elapsed="0.000201"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:06.991909" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:06.991754" elapsed="0.000215"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:06.992125" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:06.991992" elapsed="0.000249"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:06.991514" elapsed="0.000748"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:10:06.968311" elapsed="0.024030">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<msg time="2026-08-23T02:10:06.992434" level="FAIL">Keyword 'Check_Config_Data' failed after retrying for 1 minute. The last error was: HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>60s</arg>
<arg>1s</arg>
<arg>Check_Config_Data</arg>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-08-23T02:09:06.439192" elapsed="60.553337">Keyword 'Check_Config_Data' failed after retrying for 1 minute. The last error was: HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<doc>Get the device data and make sure it contains the created content.</doc>
<status status="FAIL" start="2026-08-23T02:09:06.348785" elapsed="60.643923">Keyword 'Check_Config_Data' failed after retrying for 1 minute. The last error was: HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</test>
<test id="s1-s4-s1-t16" name="Modify_Device_Data_Again" line="144">
<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-08-23T02:10:06.996971" elapsed="0.000299"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:10:06.996580" elapsed="0.000767"/>
</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-08-23T02:10:06.998760" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:06.998606" elapsed="0.000219"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:06.998579" elapsed="0.000299"/>
</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-08-23T02:10:07.004998" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:07.004887" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:07.004868" elapsed="0.000207"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.006096" 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-08-23T02:10:07.005689" elapsed="0.000436"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.006581" 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-08-23T02:10:07.006285" elapsed="0.000321"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:10:07.006651" elapsed="0.000033"/>
</return>
<msg time="2026-08-23T02:10:07.006811" 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-08-23T02:10:07.005301" elapsed="0.001549"/>
</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-08-23T02:10:07.012296" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:07.012187" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:07.012168" elapsed="0.000197"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:10:07.013638" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:07.013519" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:07.013501" elapsed="0.000205"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:10:07.014263" 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-08-23T02:10:07.013870" elapsed="0.000419"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:10:07.014709" 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-08-23T02:10:07.014446" elapsed="0.000289"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:10:07.044239" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:10:07.015313" elapsed="0.029108"/>
</kw>
<msg time="2026-08-23T02:10:07.044608" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:10:07.044655" 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 "n "e "t "c "o "n "f "...</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-08-23T02:10:07.014918" elapsed="0.029774"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:10:07.066618" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "M "o "d "i "f "y "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "A "g "a "i "n "[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-08-23T02:10:07.045355" elapsed="0.021454"/>
</kw>
<msg time="2026-08-23T02:10:07.067012" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:10:07.067058" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "M "o "d "i "f "y "_ "D "e "v "i "c "e "_ "D ...</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-08-23T02:10:07.044952" elapsed="0.022144"/>
</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-08-23T02:10:07.067395" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:07.067172" elapsed="0.000302"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:07.067153" elapsed="0.000346"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.068062" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "M "o "d "i "f "y "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "A "g "a "i "n "[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-08-23T02:10:07.067637" elapsed="0.000495"/>
</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-08-23T02:10:07.068413" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:07.068199" elapsed="0.000291"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:07.068181" elapsed="0.000334"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:10:07.068548" 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-08-23T02:10:07.071883" elapsed="0.000280"/>
</kw>
<msg time="2026-08-23T02:10:07.072242" 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-08-23T02:10:07.071158" elapsed="0.001192"/>
</kw>
<kw name="Open 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-08-23T02:10:07.073466" elapsed="0.000040"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:07.074621" elapsed="0.000042"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:10:07.069433" elapsed="0.005312"/>
</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-08-23T02:10:07.068823" elapsed="0.006229"/>
</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-08-23T02:10:07.013218" elapsed="0.061935"/>
</kw>
<msg time="2026-08-23T02:10:07.075245" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:10:07.075289" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "M "o "d "i "f "y "_ "D "e "v "i "c "e "_ "D ...</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-08-23T02:10:07.012514" elapsed="0.062812"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:10:07.075508" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-08-23T02:10:07.075401" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:07.075382" 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-08-23T02:10:07.076007" 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-08-23T02:10:07.076339" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:10:07.076410" 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-08-23T02:10:07.011846" elapsed="0.064671"/>
</kw>
<msg time="2026-08-23T02:10:07.076610" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:10:07.076654" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "M "o "d "i "f "y "_ "D "e "v "i "c "e "_ "D ...</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-08-23T02:10:07.007232" elapsed="0.069458"/>
</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-08-23T02:10:07.077027" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:07.076765" elapsed="0.000316"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:07.076748" elapsed="0.000356"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:10:07.007094" elapsed="0.070033"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:10:07.006912" elapsed="0.070278"/>
</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-08-23T02:10:07.004510" elapsed="0.072738"/>
</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-08-23T02:10:06.998204" elapsed="0.079099"/>
</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-08-23T02:10:06.997569" elapsed="0.079778"/>
</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-08-23T02:10:06.993602" elapsed="0.083797"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.078041" level="INFO">${mapping} = {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping}</var>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-23T02:10:07.077567" elapsed="0.000501"/>
</kw>
<kw name="Put_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Put_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-08-23T02:10:07.111591" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod2.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:07.111201" elapsed="0.000421"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T02:10:07.112411" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamod2.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-23T02:10:07.112138" elapsed="0.000348">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamod2.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-23T02:10:07.112581" 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-08-23T02:10:07.111788" elapsed="0.000817"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.113174" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod2/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-08-23T02:10:07.112768" elapsed="0.000433"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:10:07.113497" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamod2/location.uri"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamod2/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:10:07.113668" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount/test:cont
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:10:07.113358" elapsed="0.000335"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.114146" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount/test:cont
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:07.113891" 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-08-23T02:10:07.115170" level="INFO">mapping: {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:07.114912" elapsed="0.000303"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.115905" 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-08-23T02:10:07.115371" elapsed="0.000561"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.116608" level="INFO">${value} = netconf-test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:10:07.116306" elapsed="0.000328"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:10:07.117429" level="INFO">${encoded} = netconf-test-device</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-08-23T02:10:07.117159" elapsed="0.000296"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:10:07.117508" elapsed="0.000035"/>
</return>
<msg time="2026-08-23T02:10:07.117671" level="INFO">${encoded_value} = netconf-test-device</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-08-23T02:10:07.116821" elapsed="0.000875"/>
</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-08-23T02:10:07.117901" elapsed="0.000252"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:10:07.116170" elapsed="0.002025"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.118742" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:10:07.118442" elapsed="0.000326"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:10:07.119518" level="INFO">${encoded} = /rests</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-08-23T02:10:07.119281" elapsed="0.000306"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:10:07.119640" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:10:07.119794" level="INFO">${encoded_value} = /rests</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-08-23T02:10:07.118966" elapsed="0.000853"/>
</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-08-23T02:10:07.119983" elapsed="0.000224"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-23T02:10:07.118313" elapsed="0.001935"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-23T02:10:07.115992" elapsed="0.004291"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-23T02:10:07.120326" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:10:07.120483" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-23T02:10:07.114574" elapsed="0.005934"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:07.114268" 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-08-23T02:10:07.120711" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:07.120567" elapsed="0.000200"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:07.114244" elapsed="0.006544"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.121522" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</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-08-23T02:10:07.120945" elapsed="0.000605"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T02:10:07.121599" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod2.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod2.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod2/${file_name}.</doc>
<status status="PASS" start="2026-08-23T02:10:07.110561" elapsed="0.011163"/>
</kw>
<msg time="2026-08-23T02:10:07.121802" 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-08-23T02:10:07.097914" elapsed="0.023964"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod2.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod2.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod2/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:07.134256" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod2.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod2.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod2/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:07.146896" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod2.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod2.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod2/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:07.159309" 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-08-23T02:10:07.159501" 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-08-23T02:10:07.159674" 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-08-23T02:10:07.160053" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:07.159910" elapsed="0.000200"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:07.159895" 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-08-23T02:10:07.160269" 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-08-23T02:10:07.160471" 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-08-23T02:10:07.160635" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T02:10:07.159865" elapsed="0.000823"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T02:10:07.159751" 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-08-23T02:10:07.160871" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:07.160950" elapsed="0.000015"/>
</return>
<msg time="2026-08-23T02:10:07.161070" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</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-08-23T02:10:07.093632" elapsed="0.067463"/>
</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-08-23T02:10:07.189999" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod2.vanadium/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-08-23T02:10:07.189592" elapsed="0.000435"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T02:10:07.190742" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamod2.vanadium/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-08-23T02:10:07.190521" elapsed="0.000289">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamod2.vanadium/data.xml' does not exist.</status>
</kw>
<msg time="2026-08-23T02:10:07.190921" 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-08-23T02:10:07.190187" elapsed="0.000758"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.191489" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod2/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-08-23T02:10:07.191106" elapsed="0.000410"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:10:07.191805" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamod2/data.xml"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamod2/data.xml&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:10:07.191961" level="INFO">${template} = &lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;
&lt;l&gt;Another Modified Content&lt;/l&gt;
&lt;/cont&gt;
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:10:07.191672" elapsed="0.000317"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.192382" level="INFO">&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;
&lt;l&gt;Another Modified Content&lt;/l&gt;
&lt;/cont&gt;
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:07.192141" 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-08-23T02:10:07.192783" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:07.192493" elapsed="0.000364"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.193323" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</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-08-23T02:10:07.193033" elapsed="0.000316"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:07.192885" elapsed="0.000499"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:07.192474" elapsed="0.000932"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.194022" level="INFO">${final_text} = &lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;
&lt;l&gt;Another Modified Content&lt;/l&gt;
&lt;/cont&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-08-23T02:10:07.193547" elapsed="0.000503"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T02:10:07.194100" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod2.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod2.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod2/${file_name}.</doc>
<status status="PASS" start="2026-08-23T02:10:07.188978" elapsed="0.005251"/>
</kw>
<msg time="2026-08-23T02:10:07.194316" 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-08-23T02:10:07.176177" elapsed="0.018188"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod2.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod2.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod2/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:07.206725" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod2.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod2.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod2/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:07.219131" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod2.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod2.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod2/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:07.231648" 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-08-23T02:10:07.231854" 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-08-23T02:10:07.232030" 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-08-23T02:10:07.232387" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:07.232248" elapsed="0.000195"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:07.232232" 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-08-23T02:10:07.232602" 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-08-23T02:10:07.232764" 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-08-23T02:10:07.232942" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T02:10:07.232205" elapsed="0.000791"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T02:10:07.232104" 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-08-23T02:10:07.233163" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:07.233238" elapsed="0.000015"/>
</return>
<msg time="2026-08-23T02:10:07.233355" level="INFO">${data} = &lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;
&lt;l&gt;Another Modified Content&lt;/l&gt;
&lt;/cont&gt;</msg>
<var>${data}</var>
<arg>folder=${folder}</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-08-23T02:10:07.173485" elapsed="0.059898"/>
</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-08-23T02:10:07.234656" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamod2/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-08-23T02:10:07.234412" elapsed="0.000307">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamod2/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-23T02:10:07.234812" 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-08-23T02:10:07.234077" 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-08-23T02:10:07.235203" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:07.234959" elapsed="0.000301"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.235748" 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-08-23T02:10:07.235456" elapsed="0.000318"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:07.235285" elapsed="0.000525"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:07.234940" elapsed="0.000892"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.238187" 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-08-23T02:10:07.235999" elapsed="0.002215"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-23T02:10:07.238265" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:10:07.238418" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod2/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-23T02:10:07.233711" elapsed="0.004733"/>
</kw>
<kw name="Put_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.239806" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:07.239559" elapsed="0.000309"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.240262" level="INFO">&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;
&lt;l&gt;Another Modified Content&lt;/l&gt;
&lt;/cont&gt;</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:07.240019" elapsed="0.000290"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.240699" 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-08-23T02:10:07.240455" elapsed="0.000287"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.241226" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:07.240904" elapsed="0.000367"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-08-23T02:10:07.242111" 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-08-23T02:10:07.241888" elapsed="0.000249"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-08-23T02:10:07.242461" 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-08-23T02:10:07.242288" 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-08-23T02:10:07.242632" elapsed="0.000217"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.243248" 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-08-23T02:10:07.243002" elapsed="0.000290"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-08-23T02:10:07.243334" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:10:07.243488" 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-08-23T02:10:07.241472" elapsed="0.002041"/>
</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-08-23T02:10:07.249965" level="INFO">PUT Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Content-Length': '89', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;
&lt;l&gt;Another Modified Content&lt;/l&gt;
&lt;/cont&gt; 
 </msg>
<msg time="2026-08-23T02:10:07.250045" level="INFO">PUT Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont 
 status=404, reason=Not Found 
 headers={'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:07.250141" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</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-08-23T02:10:07.245924" elapsed="0.004590">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:07.243583" elapsed="0.007019">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</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-08-23T02:10:07.250788" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:07.250638" elapsed="0.000236"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:07.243566" elapsed="0.007331">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</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-08-23T02:10:07.251301" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:07.251431" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:07.251395" elapsed="0.000076"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:07.251378" elapsed="0.000115"/>
</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-08-23T02:10:07.251632" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:07.251699" elapsed="0.000014"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>content_type=${content_type}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</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-08-23T02:10:07.238767" elapsed="0.013035">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:07.251894" elapsed="0.000016"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>extension=xml</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>content_type=${HEADERS_XML}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>endline=${\n}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve URI and data from folder, call Put_To_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:07.082751" elapsed="0.169238">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=response</arg>
<arg>mapping=${mapping}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:07.252270" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:07.252095" elapsed="0.000241"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:07.252079" elapsed="0.000280"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:07.252392" elapsed="0.000015"/>
</return>
<arg>${DIRECTORY_WITH_TEMPLATE_FOLDERS}${/}datamod2</arg>
<arg>${mapping}</arg>
<doc>Add arguments sensible for XML data, return Put_Templated response text.
Optionally, verification against response.xml (no iteration) is called.</doc>
<status status="FAIL" start="2026-08-23T02:10:07.078319" elapsed="0.174166">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</status>
</kw>
<doc>Send a request to change the sample test data and check that the request went OK.</doc>
<status status="FAIL" start="2026-08-23T02:10:06.993052" elapsed="0.259591">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</status>
</test>
<test id="s1-s4-s1-t17" name="Check_Device_Data_Is_Modified_Again" line="149">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-08-23T02:10:07.256005" elapsed="0.000212"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:10:07.255722" elapsed="0.000550"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:10:07.257257" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:07.257146" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:07.257127" 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-08-23T02:10:07.262294" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:07.262188" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:07.262170" elapsed="0.000191"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.263342" 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-08-23T02:10:07.262965" elapsed="0.000404"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.263815" 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-08-23T02:10:07.263523" elapsed="0.000333"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:10:07.263903" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:10:07.264058" 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-08-23T02:10:07.262580" elapsed="0.001503"/>
</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-08-23T02:10:07.269700" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:07.269591" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:07.269572" 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-08-23T02:10:07.271116" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:07.271007" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:07.270988" elapsed="0.000196"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:10:07.271723" 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-08-23T02:10:07.271324" elapsed="0.000425"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:10:07.272194" 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-08-23T02:10:07.271921" elapsed="0.000299"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:10:07.303194" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:10:07.272777" elapsed="0.030591"/>
</kw>
<msg time="2026-08-23T02:10:07.303554" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:10:07.303601" 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 "n "e "t "c "o "n "f "...</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-08-23T02:10:07.272384" elapsed="0.031254"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:10:07.324517" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "I "s "_ "M "o "d "i "f "i "e "d "_ "A "g "a "i "n "[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-08-23T02:10:07.304229" elapsed="0.020496"/>
</kw>
<msg time="2026-08-23T02:10:07.324940" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:10:07.324987" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "D "a ...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:10:07.303807" elapsed="0.021216"/>
</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-08-23T02:10:07.325364" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:07.325108" elapsed="0.000336"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:07.325087" elapsed="0.000382"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.326029" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "I "s "_ "M "o "d "i "f "i "e "d "_ "A "g "a "i "n "[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-08-23T02:10:07.325615" elapsed="0.000485"/>
</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-08-23T02:10:07.326399" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:07.326178" elapsed="0.000299"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:07.326159" elapsed="0.000343"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:10:07.326535" 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-08-23T02:10:07.329802" elapsed="0.000184"/>
</kw>
<msg time="2026-08-23T02:10:07.330062" 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-08-23T02:10:07.329106" elapsed="0.001083"/>
</kw>
<kw name="Open 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-08-23T02:10:07.331267" elapsed="0.000039"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:07.332390" elapsed="0.000039"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:10:07.327409" elapsed="0.005100"/>
</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-08-23T02:10:07.326796" elapsed="0.005842"/>
</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-08-23T02:10:07.270662" elapsed="0.062076"/>
</kw>
<msg time="2026-08-23T02:10:07.332830" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:10:07.333067" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "D "a ...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:10:07.269969" elapsed="0.063136"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:10:07.333289" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:10:07.333182" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:07.333163" 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-08-23T02:10:07.333829" elapsed="0.000043"/>
</kw>
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<var>${message}</var>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Send command to karaf without affecting current SSH connection. Read, log and return response.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:07.334190" elapsed="0.000026"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:10:07.334263" 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-08-23T02:10:07.269254" elapsed="0.065117"/>
</kw>
<msg time="2026-08-23T02:10:07.334464" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:10:07.334508" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "D "a ...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:10:07.264440" elapsed="0.070106"/>
</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-08-23T02:10:07.334888" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:07.334621" elapsed="0.000323"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:07.334604" elapsed="0.000363"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:10:07.264302" elapsed="0.070689"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:10:07.264133" elapsed="0.070888"/>
</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-08-23T02:10:07.261800" elapsed="0.073275"/>
</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-08-23T02:10:07.256857" elapsed="0.078271"/>
</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-08-23T02:10:07.256419" elapsed="0.078754"/>
</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-08-23T02:10:07.253585" elapsed="0.081639"/>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.336481" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:07.336100" elapsed="0.000409"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.344181" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:07.343930" elapsed="0.000298"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.344623" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:07.344378" elapsed="0.000288"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:07.350475" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:07.350523" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:07.350622" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:10:07.346890" elapsed="0.004125">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:07.344732" elapsed="0.006366">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:07.351281" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:07.351132" elapsed="0.000214"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:07.344714" elapsed="0.006655">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:07.351733" elapsed="0.000025"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:07.351922" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:07.351884" elapsed="0.000081"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:07.351865" elapsed="0.000121"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:07.352126" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:07.352196" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:10:07.339498" elapsed="0.012802">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:07.352371" elapsed="0.000016"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:07.336726" elapsed="0.015741">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:10:07.352522" elapsed="0.000015"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:10:07.335811" elapsed="0.016803">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:07.352831" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:07.352685" elapsed="0.000219"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:07.353075" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:07.352932" elapsed="0.000197"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:07.353286" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:07.353152" elapsed="0.000188"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:07.352669" elapsed="0.000691"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Another Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:10:07.335429" elapsed="0.018007">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<doc>Get the device data and make sure it contains the created content.</doc>
<status status="FAIL" start="2026-08-23T02:10:07.253027" elapsed="0.100551">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</test>
<test id="s1-s4-s1-t18" name="Modify_Device_Data_Label_Via_Json" line="154">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-08-23T02:10:07.356960" elapsed="0.000212"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:10:07.356680" elapsed="0.000546"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:10:07.358195" elapsed="0.000025"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:07.358087" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:07.358069" elapsed="0.000206"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:10:07.363448" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:07.363341" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:07.363323" elapsed="0.000193"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.364506" 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-08-23T02:10:07.364124" elapsed="0.000409"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.365005" 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-08-23T02:10:07.364689" elapsed="0.000342"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:10:07.365077" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:10:07.365231" 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-08-23T02:10:07.363735" elapsed="0.001521"/>
</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-08-23T02:10:07.370740" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:07.370624" elapsed="0.000163"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:07.370605" 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-08-23T02:10:07.372104" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:07.371997" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:07.371978" elapsed="0.000194"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:10:07.372696" 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-08-23T02:10:07.372314" elapsed="0.000408"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:10:07.373158" 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-08-23T02:10:07.372896" elapsed="0.000288"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:10:07.401917" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:10:07.373731" elapsed="0.028394"/>
</kw>
<msg time="2026-08-23T02:10:07.402345" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:10:07.402395" 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 "n "e "t "c "o "n "f "...</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-08-23T02:10:07.373341" elapsed="0.029092"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:10:07.429196" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "M "o "d "i "f "y "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "L "a "b "e "l "_ "V "i "a "_ "J "s "o "n "[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-08-23T02:10:07.403125" elapsed="0.026266"/>
</kw>
<msg time="2026-08-23T02:10:07.429569" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:10:07.429615" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "M "o "d "i "f "y "_ "D "e "v "i "c "e "_ "D ...</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-08-23T02:10:07.402621" elapsed="0.027029"/>
</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-08-23T02:10:07.429991" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:07.429734" elapsed="0.000337"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:07.429711" elapsed="0.000387"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.430664" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "M "o "d "i "f "y "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "L "a "b "e "l "_ "V "i "a "_ "J "s "o "n "[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-08-23T02:10:07.430243" elapsed="0.000493"/>
</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-08-23T02:10:07.431042" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:07.430802" elapsed="0.000318"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:07.430784" elapsed="0.000361"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:10:07.431180" elapsed="0.000036"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-23T02:10:07.434591" elapsed="0.000155"/>
</kw>
<msg time="2026-08-23T02:10:07.434820" 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-08-23T02:10:07.433806" elapsed="0.001161"/>
</kw>
<kw name="Open 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-08-23T02:10:07.436270" elapsed="0.000042"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:07.437583" elapsed="0.000039"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:10:07.432101" elapsed="0.005605"/>
</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-08-23T02:10:07.431473" elapsed="0.006376"/>
</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-08-23T02:10:07.371662" elapsed="0.066290"/>
</kw>
<msg time="2026-08-23T02:10:07.438045" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:10:07.438090" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "M "o "d "i "f "y "_ "D "e "v "i "c "e "_ "D ...</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-08-23T02:10:07.371016" elapsed="0.067112"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:10:07.438314" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-23T02:10:07.438206" elapsed="0.000185"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:07.438187" elapsed="0.000229"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:07.438980" 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-08-23T02:10:07.439321" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:10:07.439392" 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-08-23T02:10:07.370285" elapsed="0.069216"/>
</kw>
<msg time="2026-08-23T02:10:07.439595" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:10:07.439639" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "M "o "d "i "f "y "_ "D "e "v "i "c "e "_ "D ...</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-08-23T02:10:07.365625" elapsed="0.074052"/>
</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-08-23T02:10:07.440022" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:07.439752" elapsed="0.000325"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:07.439735" elapsed="0.000365"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:10:07.365486" elapsed="0.074638"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:10:07.365309" elapsed="0.074849"/>
</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-08-23T02:10:07.362984" elapsed="0.077229"/>
</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-08-23T02:10:07.357786" elapsed="0.082484"/>
</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-08-23T02:10:07.357372" elapsed="0.082945"/>
</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-08-23T02:10:07.354533" elapsed="0.085837"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.441066" level="INFO">${mapping} = {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping}</var>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-23T02:10:07.440542" elapsed="0.000551"/>
</kw>
<kw name="Put_As_Json_Templated" owner="TemplatedRequests">
<kw name="Put_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-08-23T02:10:07.478233" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamodjson.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:07.477857" elapsed="0.000404"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T02:10:07.479103" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamodjson.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-23T02:10:07.478822" elapsed="0.000359">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamodjson.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-23T02:10:07.479276" 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-08-23T02:10:07.478479" elapsed="0.000821"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.479863" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamodjson/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-08-23T02:10:07.479464" elapsed="0.000428"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:10:07.480189" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamodjson/location.uri"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamodjson/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:10:07.480349" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount/test:cont
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:10:07.480053" elapsed="0.000321"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.480773" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount/test:cont
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:07.480529" 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-08-23T02:10:07.481776" level="INFO">mapping: {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:07.481523" elapsed="0.000297"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.482472" 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-08-23T02:10:07.482031" elapsed="0.000470"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.483187" level="INFO">${value} = netconf-test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:10:07.482879" elapsed="0.000335"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:10:07.484011" level="INFO">${encoded} = netconf-test-device</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-08-23T02:10:07.483719" elapsed="0.000321"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:10:07.484091" elapsed="0.000033"/>
</return>
<msg time="2026-08-23T02:10:07.484247" level="INFO">${encoded_value} = netconf-test-device</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-08-23T02:10:07.483400" elapsed="0.000873"/>
</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-08-23T02:10:07.484424" elapsed="0.000242"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:10:07.482728" elapsed="0.001979"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.485266" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:10:07.484967" elapsed="0.000325"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:10:07.486052" level="INFO">${encoded} = /rests</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-08-23T02:10:07.485787" elapsed="0.000291"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:10:07.486128" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:10:07.486279" level="INFO">${encoded_value} = /rests</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-08-23T02:10:07.485472" elapsed="0.000831"/>
</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-08-23T02:10:07.486487" elapsed="0.000227"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-23T02:10:07.484819" elapsed="0.001936"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-23T02:10:07.482553" elapsed="0.004237"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-23T02:10:07.486832" elapsed="0.000051"/>
</return>
<msg time="2026-08-23T02:10:07.487016" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-23T02:10:07.481200" elapsed="0.005842"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:07.480903" 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-08-23T02:10:07.487247" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:07.487101" elapsed="0.000201"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:07.480882" elapsed="0.006440"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.488066" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</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-08-23T02:10:07.487461" elapsed="0.000633"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T02:10:07.488143" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamodjson.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamodjson.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamodjson/${file_name}.</doc>
<status status="PASS" start="2026-08-23T02:10:07.477222" elapsed="0.011044"/>
</kw>
<msg time="2026-08-23T02:10:07.488318" 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-08-23T02:10:07.464606" elapsed="0.023760"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamodjson.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamodjson.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamodjson/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:07.500769" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamodjson.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamodjson.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamodjson/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:07.513106" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamodjson.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamodjson.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamodjson/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:07.525468" 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-08-23T02:10:07.525662" 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-08-23T02:10:07.525833" 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-08-23T02:10:07.526215" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:07.526070" elapsed="0.000202"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:07.526055" 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-08-23T02:10:07.526432" 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-08-23T02:10:07.526618" 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-08-23T02:10:07.526784" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T02:10:07.526028" elapsed="0.000822"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T02:10:07.525927" 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-08-23T02:10:07.527026" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:07.527103" elapsed="0.000015"/>
</return>
<msg time="2026-08-23T02:10:07.527221" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</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-08-23T02:10:07.460382" elapsed="0.066866"/>
</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-08-23T02:10:07.553731" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamodjson.vanadium/data.json</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-08-23T02:10:07.553357" elapsed="0.000403"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T02:10:07.554478" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamodjson.vanadium/data.json' 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-08-23T02:10:07.554266" elapsed="0.000278">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamodjson.vanadium/data.json' does not exist.</status>
</kw>
<msg time="2026-08-23T02:10:07.554658" 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-08-23T02:10:07.553934" elapsed="0.000749"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.555275" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamodjson/data.json</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-08-23T02:10:07.554862" elapsed="0.000440"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:10:07.555591" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamodjson/data.json"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamodjson/data.json&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:10:07.556109" level="INFO">${template} = {
  "test:cont": {
    "l":"Content Modified via JSON"
  }
}
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:10:07.555458" elapsed="0.000679"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.556534" level="INFO">{
  "test:cont": {
    "l":"Content Modified via JSON"
  }
}
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:07.556290" 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-08-23T02:10:07.556950" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:07.556644" elapsed="0.000398"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.557517" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</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-08-23T02:10:07.557219" elapsed="0.000326"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:07.557071" elapsed="0.000509"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:07.556625" elapsed="0.000977"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.558212" level="INFO">${final_text} = {
  "test:cont": {
    "l":"Content Modified via JSON"
  }
}</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-08-23T02:10:07.557747" elapsed="0.000493"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T02:10:07.558289" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamodjson.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamodjson.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamodjson/${file_name}.</doc>
<status status="PASS" start="2026-08-23T02:10:07.552702" elapsed="0.005712"/>
</kw>
<msg time="2026-08-23T02:10:07.558467" 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-08-23T02:10:07.540123" elapsed="0.018391"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamodjson.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamodjson.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamodjson/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:07.570875" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamodjson.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamodjson.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamodjson/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:07.583335" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamodjson.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamodjson.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamodjson/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:07.596267" 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-08-23T02:10:07.596468" 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-08-23T02:10:07.596643" 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-08-23T02:10:07.597039" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:07.596894" elapsed="0.000203"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:07.596877" 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-08-23T02:10:07.597257" 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-08-23T02:10:07.597420" 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-08-23T02:10:07.597580" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T02:10:07.596830" elapsed="0.000802"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T02:10:07.596723" elapsed="0.000937"/>
</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-08-23T02:10:07.597799" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:07.597898" elapsed="0.000021"/>
</return>
<msg time="2026-08-23T02:10:07.598048" level="INFO">${data} = {
  "test:cont": {
    "l":"Content Modified via JSON"
  }
}</msg>
<var>${data}</var>
<arg>folder=${folder}</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-08-23T02:10:07.537467" elapsed="0.060658"/>
</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-08-23T02:10:07.599507" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamodjson/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-08-23T02:10:07.599233" elapsed="0.000345">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamodjson/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-23T02:10:07.599670" 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-08-23T02:10:07.598820" elapsed="0.000875"/>
</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-08-23T02:10:07.600040" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:07.599765" elapsed="0.000332"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.600588" 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-08-23T02:10:07.600296" elapsed="0.000317"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:07.600122" elapsed="0.000526"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:07.599747" elapsed="0.000922"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.603115" 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-08-23T02:10:07.600819" elapsed="0.002323"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-23T02:10:07.603192" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T02:10:07.603348" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamodjson/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-23T02:10:07.598461" elapsed="0.004912"/>
</kw>
<kw name="Put_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.604759" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:07.604509" elapsed="0.000296"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.605248" level="INFO">{
  "test:cont": {
    "l":"Content Modified via JSON"
  }
}</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:07.604993" elapsed="0.000298"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.605676" 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-08-23T02:10:07.605436" elapsed="0.000283"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.606154" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:07.605884" elapsed="0.000313"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-08-23T02:10:07.607032" 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-08-23T02:10:07.606815" elapsed="0.000243"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-08-23T02:10:07.607379" 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-08-23T02:10:07.607207" 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-08-23T02:10:07.607548" elapsed="0.000197"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.608159" 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-08-23T02:10:07.607913" elapsed="0.000290"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-08-23T02:10:07.608243" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:10:07.608396" 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-08-23T02:10:07.606393" 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="PUT On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:07.614621" level="INFO">PUT Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Type': 'application/json', 'Content-Length': '60', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body={
  "test:cont": {
    "l":"Content Modified via JSON"
  }
} 
 </msg>
<msg time="2026-08-23T02:10:07.614669" level="INFO">PUT Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont 
 status=404, reason=Not Found 
 headers={'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:07.614818" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</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-08-23T02:10:07.610758" elapsed="0.004452">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:07.608489" elapsed="0.006806">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</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-08-23T02:10:07.615477" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:07.615329" elapsed="0.000215"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:07.608471" elapsed="0.007096">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</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-08-23T02:10:07.615959" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:07.616088" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:07.616051" elapsed="0.000078"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:07.616034" elapsed="0.000116"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:07.616291" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:07.616357" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>content_type=${content_type}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</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-08-23T02:10:07.603704" elapsed="0.012756">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:07.616534" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>extension=json</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>content_type=${HEADERS_YANG_JSON}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>endline=${\n}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve URI and data from folder, call Put_To_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:07.449310" elapsed="0.167318">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Json_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=response</arg>
<arg>mapping=${mapping}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected JSON data, should be equal to provided ${response}.
JSON normalization is used, endlines enabled for readability.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:07.616930" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:07.616735" elapsed="0.000262"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:07.616718" elapsed="0.000303"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:07.617053" elapsed="0.000015"/>
</return>
<arg>${directory_with_template_folders}${/}datamodjson</arg>
<arg>${mapping}</arg>
<doc>Add arguments sensible for JSON data, return Put_Templated response text.
Optionally, verification against response.json (no iteration) is called.
Only subset of JSON data is verified and returned if JMES path is specified in
file ${folder}/jmespath.expr.</doc>
<status status="FAIL" start="2026-08-23T02:10:07.445052" elapsed="0.172096">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</status>
</kw>
<doc>Send a JSON request to change the sample test data label and check that the request went OK.</doc>
<status status="FAIL" start="2026-08-23T02:10:07.353912" elapsed="0.263397">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</status>
</test>
<test id="s1-s4-s1-t19" name="Check_Device_Data_Label_Is_Modified_Via_Json" line="161">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-08-23T02:10:07.620824" elapsed="0.000228"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:10:07.620562" elapsed="0.000543"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:10:07.622081" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:07.621972" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:07.621953" elapsed="0.000196"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:10:07.627132" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:07.627011" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:07.626988" elapsed="0.000212"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.628264" 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-08-23T02:10:07.627793" elapsed="0.000498"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.628743" 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-08-23T02:10:07.628448" elapsed="0.000322"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:10:07.628814" elapsed="0.000045"/>
</return>
<msg time="2026-08-23T02:10:07.628989" 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-08-23T02:10:07.627421" elapsed="0.001594"/>
</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-08-23T02:10:07.634648" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:07.634541" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:07.634521" 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-08-23T02:10:07.636028" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:07.635920" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:07.635902" elapsed="0.000194"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:10:07.636630" 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-08-23T02:10:07.636239" elapsed="0.000418"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:10:07.637098" 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-08-23T02:10:07.636813" elapsed="0.000311"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:10:07.670337" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:10:07.637675" elapsed="0.032872"/>
</kw>
<msg time="2026-08-23T02:10:07.670761" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:10:07.670862" 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 "n "e "t "c "o "n "f "...</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-08-23T02:10:07.637280" elapsed="0.033630"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:10:07.700533" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "L "a "b "e "l "_ "I "s "_ "M "o "d "i "f "i "e "d "_ "V "i "a "_ "J "s "o "n "[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-08-23T02:10:07.671599" elapsed="0.029142"/>
</kw>
<msg time="2026-08-23T02:10:07.700951" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:10:07.700998" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "D "a ...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:10:07.671145" elapsed="0.029890"/>
</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-08-23T02:10:07.701364" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:07.701124" elapsed="0.000318"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:07.701098" elapsed="0.000372"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.702025" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "L "a "b "e "l "_ "I "s "_ "M "o "d "i "f "i "e "d "_ "V "i "a "_ "J "s "o "n "[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-08-23T02:10:07.701612" elapsed="0.000490"/>
</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-08-23T02:10:07.702380" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:07.702168" elapsed="0.000291"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:07.702150" elapsed="0.000334"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:10:07.702520" elapsed="0.000037"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-23T02:10:07.705953" elapsed="0.000150"/>
</kw>
<msg time="2026-08-23T02:10:07.706177" 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-08-23T02:10:07.705200" elapsed="0.001085"/>
</kw>
<kw name="Open 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-08-23T02:10:07.707394" elapsed="0.000040"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:07.708760" elapsed="0.000039"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:10:07.703454" elapsed="0.005445"/>
</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-08-23T02:10:07.702812" elapsed="0.006214"/>
</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-08-23T02:10:07.635595" elapsed="0.073532"/>
</kw>
<msg time="2026-08-23T02:10:07.709222" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:10:07.709268" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "D "a ...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:10:07.634892" elapsed="0.074414"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:10:07.709492" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:10:07.709384" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:07.709365" 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-08-23T02:10:07.710089" 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-08-23T02:10:07.710422" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:10:07.710494" 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-08-23T02:10:07.634202" elapsed="0.076399"/>
</kw>
<msg time="2026-08-23T02:10:07.710698" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:10:07.710743" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "D "a ...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:10:07.629374" elapsed="0.081407"/>
</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-08-23T02:10:07.711133" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:07.710874" elapsed="0.000313"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:07.710855" elapsed="0.000355"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:10:07.629236" elapsed="0.081998"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:10:07.629066" elapsed="0.082202"/>
</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-08-23T02:10:07.626605" elapsed="0.084720"/>
</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-08-23T02:10:07.621667" elapsed="0.089712"/>
</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-08-23T02:10:07.621252" elapsed="0.090171"/>
</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-08-23T02:10:07.618379" elapsed="0.093097"/>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.714929" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:07.712438" elapsed="0.002521"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.722530" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:07.722263" elapsed="0.000321"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.723026" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:07.722735" elapsed="0.000335"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:07.728952" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:07.729001" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:07.729142" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:10:07.725205" elapsed="0.004346">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:07.723136" elapsed="0.006498">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:07.729816" elapsed="0.000039"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:07.729667" elapsed="0.000233"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:07.723118" elapsed="0.006805">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:07.730301" elapsed="0.000025"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:07.730433" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:07.730396" elapsed="0.000078"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:07.730379" elapsed="0.000116"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:07.730634" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:07.730703" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:10:07.717537" elapsed="0.013271">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:07.730893" elapsed="0.000016"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:07.715173" elapsed="0.015845">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:10:07.731072" elapsed="0.000015"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:10:07.712176" elapsed="0.018987">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:07.731377" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:07.731233" elapsed="0.000199"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:07.731592" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:07.731455" elapsed="0.000190"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:07.731798" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:07.731668" elapsed="0.000201"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:07.731217" elapsed="0.000673"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Content Modified via JSON&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:10:07.711684" elapsed="0.020282">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<doc>Get the device data label as XML and make sure it matches the content posted as JSON in the previous case.</doc>
<status status="FAIL" start="2026-08-23T02:10:07.617675" elapsed="0.114437">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</test>
<test id="s1-s4-s1-t20" name="Create_Car_List" line="166">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-08-23T02:10:07.735474" elapsed="0.000212"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:10:07.735202" 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-08-23T02:10:07.736725" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:07.736617" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:07.736598" elapsed="0.000195"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:10:07.742123" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:07.741998" elapsed="0.000203"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:07.741975" elapsed="0.000251"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.743231" 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-08-23T02:10:07.742820" elapsed="0.000438"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.743710" 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-08-23T02:10:07.743416" elapsed="0.000320"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:10:07.743780" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:10:07.743953" 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-08-23T02:10:07.742448" elapsed="0.001531"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:10:07.749408" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:07.749302" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:07.749283" 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-08-23T02:10:07.750672" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:07.750567" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:07.750549" elapsed="0.000191"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:10:07.751300" 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-08-23T02:10:07.750902" elapsed="0.000424"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:10:07.751737" 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-08-23T02:10:07.751480" elapsed="0.000283"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:10:07.782765" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:10:07.752330" elapsed="0.030645"/>
</kw>
<msg time="2026-08-23T02:10:07.783205" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:10:07.783252" 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 "n "e "t "c "o "n "f "...</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-08-23T02:10:07.751936" elapsed="0.031352"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:10:07.799897" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "r "e "a "t "e "_ "C "a "r "_ "L "i "s "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-08-23T02:10:07.783874" elapsed="0.016211"/>
</kw>
<msg time="2026-08-23T02:10:07.800265" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:10:07.800311" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "r "e "a "t "e "_ "C "a "r "_ "L "i "s "t ...</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-08-23T02:10:07.783454" elapsed="0.016894"/>
</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-08-23T02:10:07.800643" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:07.800424" elapsed="0.000297"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:07.800404" elapsed="0.000342"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.801298" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "r "e "a "t "e "_ "C "a "r "_ "L "i "s "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-08-23T02:10:07.800906" elapsed="0.000457"/>
</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-08-23T02:10:07.801642" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:07.801430" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:07.801412" elapsed="0.000332"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:10:07.801777" 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-08-23T02:10:07.805034" elapsed="0.000146"/>
</kw>
<msg time="2026-08-23T02:10:07.805254" 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-08-23T02:10:07.804347" elapsed="0.001010"/>
</kw>
<kw name="Open 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-08-23T02:10:07.806503" elapsed="0.000039"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:07.807801" elapsed="0.000053"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:10:07.802639" elapsed="0.005299"/>
</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-08-23T02:10:07.802057" elapsed="0.006014"/>
</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-08-23T02:10:07.750266" elapsed="0.057903"/>
</kw>
<msg time="2026-08-23T02:10:07.808261" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:10:07.808306" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "r "e "a "t "e "_ "C "a "r "_ "L "i "s "t ...</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-08-23T02:10:07.749622" elapsed="0.058721"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:10:07.808685" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-23T02:10:07.808419" elapsed="0.000326"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:07.808400" elapsed="0.000371"/>
</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-08-23T02:10:07.809269" 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-08-23T02:10:07.809599" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:10:07.809671" 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-08-23T02:10:07.748969" elapsed="0.060809"/>
</kw>
<msg time="2026-08-23T02:10:07.809887" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:10:07.809933" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "r "e "a "t "e "_ "C "a "r "_ "L "i "s "t ...</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-08-23T02:10:07.744346" elapsed="0.065624"/>
</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-08-23T02:10:07.810287" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:07.810044" elapsed="0.000296"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:07.810026" elapsed="0.000337"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:10:07.744207" elapsed="0.066179"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:10:07.744034" elapsed="0.066382"/>
</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-08-23T02:10:07.741604" elapsed="0.068865"/>
</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-08-23T02:10:07.736333" elapsed="0.074189"/>
</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-08-23T02:10:07.735907" elapsed="0.074658"/>
</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-08-23T02:10:07.733058" elapsed="0.077557"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.811326" level="INFO">${mapping} = {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping}</var>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-23T02:10:07.810774" elapsed="0.000578"/>
</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-08-23T02:10:07.844849" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/cars.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:07.844455" elapsed="0.000424"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T02:10:07.845619" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/cars.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-23T02:10:07.845366" elapsed="0.000321">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/cars.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-23T02:10:07.845781" 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-08-23T02:10:07.845038" elapsed="0.000767"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.846410" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/cars/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-08-23T02:10:07.845986" elapsed="0.000451"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:10:07.846732" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/cars/location.uri"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/cars/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:10:07.846905" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:10:07.846595" elapsed="0.000336"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.847352" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:07.847083" 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-08-23T02:10:07.848362" level="INFO">mapping: {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:07.848098" elapsed="0.000308"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.848823" 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-08-23T02:10:07.848561" elapsed="0.000303"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.849508" level="INFO">${value} = netconf-test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:10:07.849212" elapsed="0.000322"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:10:07.850475" level="INFO">${encoded} = netconf-test-device</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-08-23T02:10:07.850223" elapsed="0.000279"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:10:07.850553" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T02:10:07.850706" level="INFO">${encoded_value} = netconf-test-device</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-08-23T02:10:07.849902" elapsed="0.000829"/>
</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-08-23T02:10:07.850905" elapsed="0.000256"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:10:07.849081" elapsed="0.002122"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.851744" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:10:07.851446" elapsed="0.000325"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:10:07.852524" level="INFO">${encoded} = /rests</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-08-23T02:10:07.852290" elapsed="0.000260"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:10:07.852599" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:10:07.852749" level="INFO">${encoded_value} = /rests</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-08-23T02:10:07.851974" 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-08-23T02:10:07.852943" elapsed="0.000223"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-23T02:10:07.851317" elapsed="0.001889"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-23T02:10:07.848913" elapsed="0.004328"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-23T02:10:07.853283" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:10:07.853439" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-23T02:10:07.847755" elapsed="0.005710"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:07.847463" elapsed="0.006034"/>
</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-08-23T02:10:07.853666" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:07.853523" elapsed="0.000197"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:07.847444" elapsed="0.006297"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.854472" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount</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-08-23T02:10:07.853900" elapsed="0.000600"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T02:10:07.854550" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/cars.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/cars.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/cars/${file_name}.</doc>
<status status="PASS" start="2026-08-23T02:10:07.843830" elapsed="0.010843"/>
</kw>
<msg time="2026-08-23T02:10:07.854760" 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-08-23T02:10:07.831237" elapsed="0.023573"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/cars.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/cars.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/cars/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:07.867494" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/cars.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/cars.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/cars/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:07.879918" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/cars.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/cars.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/cars/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:07.892289" 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-08-23T02:10:07.892485" 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-08-23T02:10:07.892657" 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-08-23T02:10:07.893050" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:07.892902" elapsed="0.000204"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:07.892885" 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-08-23T02:10:07.893271" 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-08-23T02:10:07.893433" 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-08-23T02:10:07.893591" elapsed="0.000019"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T02:10:07.892853" elapsed="0.000789"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T02:10:07.892736" elapsed="0.000931"/>
</for>
<kw name="Catenate" owner="BuiltIn">
<var>${final_text}</var>
<arg>SEPARATOR=</arg>
<arg>${prolog}</arg>
<arg>${endline}</arg>
<arg>@{items}</arg>
<arg>${endline}</arg>
<arg>${epilog}</arg>
<doc>Catenates the given items together and returns the resulted string.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:07.893807" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:07.893898" elapsed="0.000017"/>
</return>
<msg time="2026-08-23T02:10:07.894025" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount</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-08-23T02:10:07.826967" elapsed="0.067085"/>
</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-08-23T02:10:07.918972" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/cars.vanadium/post_data.xml</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:07.918572" elapsed="0.000430"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T02:10:07.919741" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/cars.vanadium/post_data.xml' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-23T02:10:07.919513" elapsed="0.000299">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/cars.vanadium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-08-23T02:10:07.919967" 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-08-23T02:10:07.919161" elapsed="0.000831"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.920539" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/cars/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-08-23T02:10:07.920153" elapsed="0.000413"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:10:07.920875" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/cars/post_data.xml"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/cars/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:10:07.921021" level="INFO">${template} = &lt;cars xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car"&gt;
  &lt;car-entry&gt;
    &lt;id&gt;KEEP&lt;/id&gt;
  &lt;/car-entry&gt;
&lt;/cars&gt;
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:10:07.920722" elapsed="0.000327"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.921449" level="INFO">&lt;cars xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car"&gt;
  &lt;car-entry&gt;
    &lt;id&gt;KEEP&lt;/id&gt;
  &lt;/car-entry&gt;
&lt;/cars&gt;
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:07.921203" 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-08-23T02:10:07.921868" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:07.921561" elapsed="0.000369"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.922399" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</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-08-23T02:10:07.922104" elapsed="0.000322"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:07.921957" elapsed="0.000504"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:07.921543" elapsed="0.000940"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.923089" level="INFO">${final_text} = &lt;cars xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car"&gt;
  &lt;car-entry&gt;
    &lt;id&gt;KEEP&lt;/id&gt;
  &lt;/car-entry&gt;
&lt;/cars&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-08-23T02:10:07.922625" elapsed="0.000494"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T02:10:07.923169" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/cars.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/cars.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/cars/${file_name}.</doc>
<status status="PASS" start="2026-08-23T02:10:07.917960" elapsed="0.005350"/>
</kw>
<msg time="2026-08-23T02:10:07.923364" 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-08-23T02:10:07.905113" elapsed="0.018300"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/cars.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/cars.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/cars/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:07.935862" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/cars.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/cars.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/cars/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:07.948246" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/cars.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/cars.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/cars/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:07.960645" 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-08-23T02:10:07.960847" 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-08-23T02:10:07.961057" 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-08-23T02:10:07.961453" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:07.961311" elapsed="0.000198"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:07.961295" 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-08-23T02:10:07.961671" 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-08-23T02:10:07.961849" 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-08-23T02:10:07.962014" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T02:10:07.961267" elapsed="0.000800"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T02:10:07.961132" 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-08-23T02:10:07.962234" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:07.962309" elapsed="0.000015"/>
</return>
<msg time="2026-08-23T02:10:07.962425" level="INFO">${data} = &lt;cars xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car"&gt;
  &lt;car-entry&gt;
    &lt;id&gt;KEEP&lt;/id&gt;
  &lt;/car-entry&gt;
&lt;/cars&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-08-23T02:10:07.904221" elapsed="0.058232"/>
</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-08-23T02:10:07.963782" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/cars/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-08-23T02:10:07.963479" elapsed="0.000384">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/cars/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-23T02:10:07.963964" 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-08-23T02:10:07.963131" elapsed="0.000858"/>
</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-08-23T02:10:07.964310" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:07.964064" elapsed="0.000302"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.964870" 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-08-23T02:10:07.964560" elapsed="0.000337"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:07.964391" elapsed="0.000541"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:07.964046" elapsed="0.000907"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.967503" 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-08-23T02:10:07.965109" elapsed="0.002421"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-23T02:10:07.967582" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:10:07.967737" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/cars/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-23T02:10:07.962788" elapsed="0.004974"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.969424" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:07.969174" elapsed="0.000296"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.969876" level="INFO">&lt;cars xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car"&gt;
  &lt;car-entry&gt;
    &lt;id&gt;KEEP&lt;/id&gt;
  &lt;/car-entry&gt;
&lt;/cars&gt;</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:07.969619" elapsed="0.000304"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.970320" 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-08-23T02:10:07.970072" elapsed="0.000291"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.970753" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:07.970511" elapsed="0.000285"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-08-23T02:10:07.971681" 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-08-23T02:10:07.971484" elapsed="0.000231"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-08-23T02:10:07.972059" 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-08-23T02:10:07.971882" 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-08-23T02:10:07.972229" elapsed="0.000205"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.972850" 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-08-23T02:10:07.972587" elapsed="0.000310"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-08-23T02:10:07.972939" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:10:07.973095" 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-08-23T02:10:07.971021" elapsed="0.002099"/>
</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-08-23T02:10:07.980964" level="INFO">POST Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Content-Length': '145', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;cars xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car"&gt;
  &lt;car-entry&gt;
    &lt;id&gt;KEEP&lt;/id&gt;
  &lt;/car-entry&gt;
&lt;/cars&gt; 
 </msg>
<msg time="2026-08-23T02:10:07.981017" level="INFO">POST Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:07.981109" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:10:07.975286" elapsed="0.006185">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:07.973189" elapsed="0.008367">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="POST On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:07.981739" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:07.981590" elapsed="0.000216"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:07.973172" elapsed="0.008658">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:07.982221" elapsed="0.000025"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:07.982356" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:07.982319" elapsed="0.000078"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:07.982302" elapsed="0.000117"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:07.982559" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:07.982627" elapsed="0.000014"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>content_type=${content_type}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>POST data to given URI, check status code and return response text.
${content_type} and ${accept} are mandatory Python objects with headers to use.
If ${normalize_json}, normalize text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:10:07.968106" elapsed="0.014634">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:07.982820" elapsed="0.000031"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>extension=xml</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>content_type=${HEADERS_XML}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>endline=${\n}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve URI and data from folder, call Post_To_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:07.815961" elapsed="0.166973">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=response</arg>
<arg>mapping=${mapping}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:07.983265" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:07.983086" elapsed="0.000248"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:07.983068" elapsed="0.000290"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:07.983423" elapsed="0.000016"/>
</return>
<arg>${directory_with_template_folders}${/}cars</arg>
<arg>${mapping}</arg>
<doc>Add arguments sensible for XML data, return Post_Templated response text.
Optionally, verification against response.xml (no iteration) is called.</doc>
<status status="FAIL" start="2026-08-23T02:10:07.811601" elapsed="0.171919">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount</status>
</kw>
<doc>Send a request to create a list of cars in the sample test data label and check that the request went OK.</doc>
<status status="FAIL" start="2026-08-23T02:10:07.732431" elapsed="0.251247">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount</status>
</test>
<test id="s1-s4-s1-t21" name="Check_Car_List_Created" line="171">
<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-08-23T02:10:07.987361" elapsed="0.000232"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:10:07.987099" elapsed="0.000551"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:10:07.988649" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:07.988537" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:07.988518" elapsed="0.000200"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:10:07.993739" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:07.993631" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:07.993613" elapsed="0.000195"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.994813" 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-08-23T02:10:07.994434" elapsed="0.000423"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:10:07.995309" 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-08-23T02:10:07.995015" elapsed="0.000320"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:10:07.995380" elapsed="0.000042"/>
</return>
<msg time="2026-08-23T02:10:07.995550" 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-08-23T02:10:07.994057" elapsed="0.001519"/>
</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-08-23T02:10:08.001031" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:08.000918" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:08.000899" elapsed="0.000200"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:10:08.002365" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:08.002258" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:08.002240" elapsed="0.000193"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:10:08.002982" 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-08-23T02:10:08.002575" elapsed="0.000434"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:10:08.003448" 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-08-23T02:10:08.003166" elapsed="0.000309"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:10:08.036710" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:10:08.004056" elapsed="0.032859"/>
</kw>
<msg time="2026-08-23T02:10:08.037102" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:10:08.037148" 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 "n "e "t "c "o "n "f "...</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-08-23T02:10:08.003631" elapsed="0.033555"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:10:08.055199" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "h "e "c "k "_ "C "a "r "_ "L "i "s "t "_ "C "r "e "a "t "e "d "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-08-23T02:10:08.037754" elapsed="0.017639"/>
</kw>
<msg time="2026-08-23T02:10:08.055647" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:10:08.055694" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "h "e "c "k "_ "C "a "r "_ "L "i "s "t "_ ...</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-08-23T02:10:08.037353" elapsed="0.018379"/>
</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-08-23T02:10:08.056065" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:08.055809" elapsed="0.000338"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:08.055790" elapsed="0.000382"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.056706" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "h "e "c "k "_ "C "a "r "_ "L "i "s "t "_ "C "r "e "a "t "e "d "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:08.056312" elapsed="0.000462"/>
</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-08-23T02:10:08.057077" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:08.056857" elapsed="0.000298"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:08.056823" elapsed="0.000357"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:10:08.057214" 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-08-23T02:10:08.060526" elapsed="0.000149"/>
</kw>
<msg time="2026-08-23T02:10:08.060750" 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-08-23T02:10:08.059820" elapsed="0.001076"/>
</kw>
<kw name="Open 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-08-23T02:10:08.061986" elapsed="0.000039"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.063114" elapsed="0.000039"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:10:08.058098" elapsed="0.005136"/>
</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-08-23T02:10:08.057481" elapsed="0.005879"/>
</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-08-23T02:10:08.001955" elapsed="0.061504"/>
</kw>
<msg time="2026-08-23T02:10:08.063578" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:10:08.063624" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "h "e "c "k "_ "C "a "r "_ "L "i "s "t "_ ...</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-08-23T02:10:08.001249" elapsed="0.062413"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:10:08.064229" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-23T02:10:08.063739" elapsed="0.000551"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:08.063720" elapsed="0.000594"/>
</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-08-23T02:10:08.064711" 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-08-23T02:10:08.065058" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:10:08.065131" 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-08-23T02:10:08.000568" elapsed="0.064671"/>
</kw>
<msg time="2026-08-23T02:10:08.065332" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:10:08.065376" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "h "e "c "k "_ "C "a "r "_ "L "i "s "t "_ ...</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-08-23T02:10:07.995955" elapsed="0.069458"/>
</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-08-23T02:10:08.065734" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:08.065486" elapsed="0.000303"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:08.065469" elapsed="0.000344"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:10:07.995797" elapsed="0.070055"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:10:07.995626" elapsed="0.070258"/>
</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-08-23T02:10:07.993267" elapsed="0.072671"/>
</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-08-23T02:10:07.988245" elapsed="0.077824"/>
</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-08-23T02:10:07.987802" elapsed="0.078316"/>
</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-08-23T02:10:07.984689" elapsed="0.081482"/>
</kw>
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.067003" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:08.066596" elapsed="0.000435"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.074520" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:08.074268" elapsed="0.000298"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.074983" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:08.074717" elapsed="0.000310"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:08.080977" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:08.081026" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:08.081119" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:10:08.077173" elapsed="0.004296">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:08.075094" elapsed="0.006456">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.081733" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:08.081583" elapsed="0.000215"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:08.075075" elapsed="0.006746">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.082200" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:08.082333" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:08.082296" elapsed="0.000078"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:08.082279" elapsed="0.000116"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.082534" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:08.082604" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:10:08.069621" elapsed="0.013086">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:08.082774" elapsed="0.000015"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:08.067242" elapsed="0.015644">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:10:08.082940" elapsed="0.000015"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:10:08.066328" elapsed="0.016708">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>&lt;id&gt;KEEP&lt;/id&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.083196" elapsed="0.000021"/>
</kw>
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>&lt;id&gt;SMALL&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.083403" elapsed="0.000022"/>
</kw>
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>&lt;model&gt;Isetta&lt;/model&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.083584" elapsed="0.000021"/>
</kw>
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>&lt;manufacturer&gt;BMW&lt;/manufacturer&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.083751" elapsed="0.000020"/>
</kw>
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>&lt;year&gt;1953&lt;/year&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.083927" elapsed="0.000021"/>
</kw>
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>&lt;category&gt;microcar&lt;/category&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.084091" elapsed="0.000020"/>
</kw>
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>&lt;id&gt;TOYOTA&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.084251" elapsed="0.000019"/>
</kw>
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>&lt;model&gt;Camry&lt;/model&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.084411" elapsed="0.000020"/>
</kw>
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>&lt;manufacturer&gt;Toyota&lt;/manufacturer&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.084568" elapsed="0.000020"/>
</kw>
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>&lt;year&gt;1982&lt;/year&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.084726" elapsed="0.000020"/>
</kw>
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>&lt;category&gt;sedan&lt;/category&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.084899" elapsed="0.000021"/>
</kw>
<doc>Get the device data label as XML and make sure it matches the content posted as JSON in the previous case.</doc>
<status status="FAIL" start="2026-08-23T02:10:07.984071" elapsed="0.100988">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</test>
<test id="s1-s4-s1-t22" name="Add_Device_Data_Item_1_Via_XML_Post" line="186">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-08-23T02:10:08.088381" elapsed="0.000211"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:10:08.088121" elapsed="0.000527"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:10:08.089626" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:08.089515" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:08.089496" 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-08-23T02:10:08.094807" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:08.094701" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:08.094682" elapsed="0.000210"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.095932" 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-08-23T02:10:08.095492" elapsed="0.000467"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.096414" 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-08-23T02:10:08.096119" elapsed="0.000321"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:10:08.096486" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:10:08.096640" 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-08-23T02:10:08.095118" elapsed="0.001547"/>
</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-08-23T02:10:08.102118" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:08.102009" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:08.101989" 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-08-23T02:10:08.103434" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:08.103324" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:08.103305" elapsed="0.000198"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:10:08.104073" 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-08-23T02:10:08.103671" elapsed="0.000429"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:10:08.104519" 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-08-23T02:10:08.104263" elapsed="0.000282"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:10:08.136119" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:10:08.105125" elapsed="0.031278"/>
</kw>
<msg time="2026-08-23T02:10:08.136589" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:10:08.136636" 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 "n "e "t "c "o "n "f "...</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-08-23T02:10:08.104701" elapsed="0.031972"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:10:08.158035" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "A "d "d "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "I "t "e "m "_ "1 "_ "V "i "a "_ "X "M "L "_ "P "o "s "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-08-23T02:10:08.137312" elapsed="0.020918"/>
</kw>
<msg time="2026-08-23T02:10:08.158410" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:10:08.158455" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "A "d "d "_ "D "e "v "i "c "e "_ "D "a "t "a ...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:10:08.136868" elapsed="0.021625"/>
</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-08-23T02:10:08.158790" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:08.158570" elapsed="0.000322"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:08.158550" elapsed="0.000368"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.159447" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "A "d "d "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "I "t "e "m "_ "1 "_ "V "i "a "_ "X "M "L "_ "P "o "s "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-08-23T02:10:08.159058" elapsed="0.000462"/>
</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-08-23T02:10:08.159830" elapsed="0.000042"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:08.159586" elapsed="0.000345"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:08.159568" elapsed="0.000388"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:10:08.159990" 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-08-23T02:10:08.163261" elapsed="0.000287"/>
</kw>
<msg time="2026-08-23T02:10:08.163625" 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-08-23T02:10:08.162553" elapsed="0.001190"/>
</kw>
<kw name="Open 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-08-23T02:10:08.164847" elapsed="0.000043"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.166221" elapsed="0.000039"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:10:08.160882" elapsed="0.005461"/>
</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-08-23T02:10:08.160270" elapsed="0.006203"/>
</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-08-23T02:10:08.103020" elapsed="0.063555"/>
</kw>
<msg time="2026-08-23T02:10:08.166666" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:10:08.166710" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "A "d "d "_ "D "e "v "i "c "e "_ "D "a "t "a ...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:10:08.102358" elapsed="0.064390"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:10:08.166949" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:10:08.166824" elapsed="0.000185"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:08.166805" elapsed="0.000228"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 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-08-23T02:10:08.167427" 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-08-23T02:10:08.167786" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:10:08.167909" 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-08-23T02:10:08.101648" elapsed="0.066370"/>
</kw>
<msg time="2026-08-23T02:10:08.168112" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:10:08.168156" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "A "d "d "_ "D "e "v "i "c "e "_ "D "a "t "a ...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:10:08.097043" elapsed="0.071149"/>
</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-08-23T02:10:08.168678" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:08.168425" elapsed="0.000307"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:08.168406" elapsed="0.000350"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:10:08.096904" elapsed="0.071875"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:10:08.096715" elapsed="0.072093"/>
</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-08-23T02:10:08.094339" elapsed="0.074539"/>
</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-08-23T02:10:08.089229" elapsed="0.079707"/>
</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-08-23T02:10:08.088793" elapsed="0.080188"/>
</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-08-23T02:10:08.085951" elapsed="0.083082"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.169627" level="INFO">${mapping} = {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping}</var>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-23T02:10:08.169196" elapsed="0.000457"/>
</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-08-23T02:10:08.203143" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item1.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:08.202754" elapsed="0.000417"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T02:10:08.203935" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/item1.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-23T02:10:08.203660" elapsed="0.000343">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/item1.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-23T02:10:08.204098" 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-08-23T02:10:08.203331" elapsed="0.000791"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.204675" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item1/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-08-23T02:10:08.204290" elapsed="0.000411"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:10:08.205014" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/item1/location.uri"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/item1/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:10:08.205163" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount/car:cars
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:10:08.204876" elapsed="0.000313"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.205583" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount/car:cars
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:08.205342" 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-08-23T02:10:08.206580" level="INFO">mapping: {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:08.206325" elapsed="0.000300"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.207254" 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-08-23T02:10:08.206780" elapsed="0.000500"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.207969" level="INFO">${value} = netconf-test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:10:08.207628" elapsed="0.000367"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:10:08.208758" level="INFO">${encoded} = netconf-test-device</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-08-23T02:10:08.208507" elapsed="0.000277"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:10:08.208859" elapsed="0.000032"/>
</return>
<msg time="2026-08-23T02:10:08.209023" level="INFO">${encoded_value} = netconf-test-device</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-08-23T02:10:08.208187" elapsed="0.000861"/>
</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-08-23T02:10:08.209198" elapsed="0.000278"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:10:08.207495" elapsed="0.002023"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.210080" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:10:08.209764" elapsed="0.000341"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:10:08.210860" level="INFO">${encoded} = /rests</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-08-23T02:10:08.210599" elapsed="0.000289"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:10:08.210939" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:10:08.211091" level="INFO">${encoded_value} = /rests</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-08-23T02:10:08.210286" elapsed="0.000829"/>
</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-08-23T02:10:08.211265" elapsed="0.000222"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-23T02:10:08.209633" elapsed="0.001895"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-23T02:10:08.207328" elapsed="0.004235"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-23T02:10:08.211606" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:10:08.211762" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-23T02:10:08.206002" elapsed="0.005799"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:08.205692" 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-08-23T02:10:08.212028" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:08.211876" elapsed="0.000207"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:08.205673" elapsed="0.006431"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.212853" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/car:cars</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-08-23T02:10:08.212244" elapsed="0.000640"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T02:10:08.212933" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item1.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item1.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item1/${file_name}.</doc>
<status status="PASS" start="2026-08-23T02:10:08.202144" elapsed="0.010914"/>
</kw>
<msg time="2026-08-23T02:10:08.213112" 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-08-23T02:10:08.189557" elapsed="0.023602"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item1.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item1.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item1/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.225532" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item1.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item1.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item1/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.237908" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item1.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item1.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item1/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.250222" 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-08-23T02:10:08.250417" 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-08-23T02:10:08.250587" elapsed="0.000055"/>
</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-08-23T02:10:08.251011" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:08.250863" elapsed="0.000205"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:08.250846" 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-08-23T02:10:08.251230" 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-08-23T02:10:08.251396" 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-08-23T02:10:08.251557" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T02:10:08.250804" elapsed="0.000805"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T02:10:08.250701" 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-08-23T02:10:08.251780" elapsed="0.000019"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:08.251885" elapsed="0.000017"/>
</return>
<msg time="2026-08-23T02:10:08.252007" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/car:cars</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-08-23T02:10:08.185305" elapsed="0.066729"/>
</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-08-23T02:10:08.278604" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item1.vanadium/post_data.xml</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:08.278227" elapsed="0.000406"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T02:10:08.279377" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/item1.vanadium/post_data.xml' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-23T02:10:08.279143" elapsed="0.000305">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/item1.vanadium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-08-23T02:10:08.279542" 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-08-23T02:10:08.278794" elapsed="0.000772"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.280157" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item1/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-08-23T02:10:08.279725" elapsed="0.000459"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:10:08.280479" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/item1/post_data.xml"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/item1/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:10:08.280730" level="INFO">${template} = &lt;car-entry xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car"&gt;
  &lt;id&gt;SMALL&lt;/id&gt;
  &lt;model&gt;Isetta&lt;/model&gt;
  &lt;manufacturer&gt;BMW&lt;/manufacturer&gt;
  &lt;year&gt;1953&lt;/year&gt;
  &lt;categ...</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:10:08.280344" elapsed="0.000415"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.281176" level="INFO">&lt;car-entry xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car"&gt;
  &lt;id&gt;SMALL&lt;/id&gt;
  &lt;model&gt;Isetta&lt;/model&gt;
  &lt;manufacturer&gt;BMW&lt;/manufacturer&gt;
  &lt;year&gt;1953&lt;/year&gt;
  &lt;category&gt;microcar&lt;/category&gt;
&lt;/car-entry&gt;
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:08.280931" 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-08-23T02:10:08.281586" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:08.281292" elapsed="0.000353"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.282137" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</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-08-23T02:10:08.281815" elapsed="0.000349"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:08.281671" elapsed="0.000529"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:08.281273" elapsed="0.000949"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.282808" level="INFO">${final_text} = &lt;car-entry xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car"&gt;
  &lt;id&gt;SMALL&lt;/id&gt;
  &lt;model&gt;Isetta&lt;/model&gt;
  &lt;manufacturer&gt;BMW&lt;/manufacturer&gt;
  &lt;year&gt;1953&lt;/year&gt;
  &lt;categ...</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-08-23T02:10:08.282365" elapsed="0.000531"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T02:10:08.282949" elapsed="0.000034"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item1.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item1.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item1/${file_name}.</doc>
<status status="PASS" start="2026-08-23T02:10:08.277597" elapsed="0.005483"/>
</kw>
<msg time="2026-08-23T02:10:08.283134" 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-08-23T02:10:08.264922" elapsed="0.018259"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item1.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item1.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item1/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.295977" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item1.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item1.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item1/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.308257" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item1.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item1.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item1/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.320719" 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-08-23T02:10:08.320931" 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-08-23T02:10:08.321105" 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-08-23T02:10:08.321469" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:08.321327" elapsed="0.000198"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:08.321313" 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-08-23T02:10:08.321686" 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-08-23T02:10:08.321866" 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-08-23T02:10:08.322031" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T02:10:08.321284" elapsed="0.000799"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T02:10:08.321182" 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-08-23T02:10:08.322251" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:08.322325" elapsed="0.000015"/>
</return>
<msg time="2026-08-23T02:10:08.322443" level="INFO">${data} = &lt;car-entry xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car"&gt;
  &lt;id&gt;SMALL&lt;/id&gt;
  &lt;model&gt;Isetta&lt;/model&gt;
  &lt;manufacturer&gt;BMW&lt;/manufacturer&gt;
  &lt;year&gt;1953&lt;/year&gt;
  &lt;categ...</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-08-23T02:10:08.264032" elapsed="0.058440"/>
</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-08-23T02:10:08.323785" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/item1/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-08-23T02:10:08.323537" elapsed="0.000330">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/item1/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-23T02:10:08.323961" 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-08-23T02:10:08.323198" elapsed="0.000801"/>
</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-08-23T02:10:08.324312" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:08.324070" elapsed="0.000298"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.324876" 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-08-23T02:10:08.324569" elapsed="0.000334"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:08.324393" elapsed="0.000546"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:08.324052" elapsed="0.000908"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.327272" 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-08-23T02:10:08.325108" elapsed="0.002190"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-23T02:10:08.327349" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:10:08.327503" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item1/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-23T02:10:08.322869" elapsed="0.004658"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.329087" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/car:cars</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:08.328821" elapsed="0.000312"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.329522" level="INFO">&lt;car-entry xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car"&gt;
  &lt;id&gt;SMALL&lt;/id&gt;
  &lt;model&gt;Isetta&lt;/model&gt;
  &lt;manufacturer&gt;BMW&lt;/manufacturer&gt;
  &lt;year&gt;1953&lt;/year&gt;
  &lt;category&gt;microcar&lt;/category&gt;
&lt;/car-entry&gt;</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:08.329283" elapsed="0.000287"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.329975" 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-08-23T02:10:08.329716" elapsed="0.000303"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.330404" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:08.330165" elapsed="0.000282"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-08-23T02:10:08.331254" 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-08-23T02:10:08.331059" elapsed="0.000220"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-08-23T02:10:08.331598" 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-08-23T02:10:08.331427" 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-08-23T02:10:08.331768" elapsed="0.000235"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.332409" 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-08-23T02:10:08.332157" elapsed="0.000296"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-08-23T02:10:08.332495" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:10:08.332650" 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-08-23T02:10:08.330642" elapsed="0.002034"/>
</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-08-23T02:10:08.339174" level="INFO">POST Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/car:cars 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/car:cars 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Content-Length': '236', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;car-entry xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car"&gt;
  &lt;id&gt;SMALL&lt;/id&gt;
  &lt;model&gt;Isetta&lt;/model&gt;
  &lt;manufacturer&gt;BMW&lt;/manufacturer&gt;
  &lt;year&gt;1953&lt;/year&gt;
  &lt;category&gt;microcar&lt;/category&gt;
&lt;/car-entry&gt; 
 </msg>
<msg time="2026-08-23T02:10:08.339229" level="INFO">POST Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/car:cars 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:08.339334" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/car:cars</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:10:08.334987" elapsed="0.004748">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/car:cars</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:08.332745" elapsed="0.007075">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/car:cars</status>
</branch>
<branch type="ELSE">
<kw name="POST On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.340035" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:08.339870" elapsed="0.000233"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:08.332728" elapsed="0.007399">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/car:cars</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.340489" elapsed="0.000025"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:08.340622" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:08.340586" elapsed="0.000076"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:08.340570" elapsed="0.000113"/>
</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-08-23T02:10:08.340822" elapsed="0.000036"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:08.340906" elapsed="0.000014"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>content_type=${content_type}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>POST data to given URI, check status code and return response text.
${content_type} and ${accept} are mandatory Python objects with headers to use.
If ${normalize_json}, normalize text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:10:08.327866" elapsed="0.013144">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/car:cars</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:08.341089" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>extension=xml</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>content_type=${HEADERS_XML}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>endline=${\n}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve URI and data from folder, call Post_To_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:08.174280" elapsed="0.166902">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/car:cars</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=response</arg>
<arg>mapping=${mapping}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.341467" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:08.341293" elapsed="0.000241"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:08.341277" elapsed="0.000280"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:08.341590" elapsed="0.000014"/>
</return>
<arg>${directory_with_template_folders}${/}item1</arg>
<arg>${mapping}</arg>
<doc>Add arguments sensible for XML data, return Post_Templated response text.
Optionally, verification against response.xml (no iteration) is called.</doc>
<status status="FAIL" start="2026-08-23T02:10:08.169940" elapsed="0.171742">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/car:cars</status>
</kw>
<doc>Send a request to create a data item in the test list and check that the request went OK.</doc>
<status status="FAIL" start="2026-08-23T02:10:08.085353" elapsed="0.256499">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/car:cars</status>
</test>
<test id="s1-s4-s1-t23" name="Check_Item1_Is_Created" line="191">
<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-08-23T02:10:08.345236" elapsed="0.000210"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:10:08.344970" elapsed="0.000530"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:10:08.346470" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:08.346362" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:08.346343" elapsed="0.000195"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:10:08.351489" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:08.351382" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:08.351364" elapsed="0.000192"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.352886" 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-08-23T02:10:08.352422" elapsed="0.000494"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.353374" 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-08-23T02:10:08.353077" elapsed="0.000323"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:10:08.353445" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:10:08.353599" 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-08-23T02:10:08.351774" elapsed="0.001850"/>
</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-08-23T02:10:08.359252" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:08.359144" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:08.359125" 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-08-23T02:10:08.360581" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:08.360474" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:08.360456" elapsed="0.000193"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:10:08.361201" 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-08-23T02:10:08.360790" elapsed="0.000437"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:10:08.361645" 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-08-23T02:10:08.361383" elapsed="0.000288"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:10:08.396121" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:10:08.362238" elapsed="0.034067"/>
</kw>
<msg time="2026-08-23T02:10:08.396498" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:10:08.396545" 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 "n "e "t "c "o "n "f "...</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-08-23T02:10:08.361827" elapsed="0.034756"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:10:08.414075" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "h "e "c "k "_ "I "t "e "m "1 "_ "I "s "_ "C "r "e "a "t "e "d "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-08-23T02:10:08.397187" elapsed="0.017076"/>
</kw>
<msg time="2026-08-23T02:10:08.414443" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:10:08.414489" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "h "e "c "k "_ "I "t "e "m "1 "_ "I "s "_ ...</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-08-23T02:10:08.396755" elapsed="0.017770"/>
</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-08-23T02:10:08.414827" elapsed="0.000041"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:08.414601" elapsed="0.000324"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:08.414582" elapsed="0.000369"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.415489" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "h "e "c "k "_ "I "t "e "m "1 "_ "I "s "_ "C "r "e "a "t "e "d "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:08.415094" elapsed="0.000463"/>
</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-08-23T02:10:08.415854" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:08.415624" elapsed="0.000309"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:08.415606" elapsed="0.000352"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:10:08.415991" 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-08-23T02:10:08.419312" elapsed="0.000145"/>
</kw>
<msg time="2026-08-23T02:10:08.419531" 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-08-23T02:10:08.418597" elapsed="0.001039"/>
</kw>
<kw name="Open 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-08-23T02:10:08.420745" elapsed="0.000038"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.421936" elapsed="0.000040"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:10:08.416900" elapsed="0.005158"/>
</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-08-23T02:10:08.416276" elapsed="0.005909"/>
</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-08-23T02:10:08.360173" elapsed="0.062111"/>
</kw>
<msg time="2026-08-23T02:10:08.422376" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:10:08.422421" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "h "e "c "k "_ "I "t "e "m "1 "_ "I "s "_ ...</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-08-23T02:10:08.359469" elapsed="0.062990"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:10:08.422642" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:10:08.422534" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:08.422516" 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-08-23T02:10:08.423374" 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-08-23T02:10:08.423706" elapsed="0.000026"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:10:08.423779" 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-08-23T02:10:08.358789" elapsed="0.065114"/>
</kw>
<msg time="2026-08-23T02:10:08.424003" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:10:08.424046" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "h "e "c "k "_ "I "t "e "m "1 "_ "I "s "_ ...</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-08-23T02:10:08.354012" elapsed="0.070071"/>
</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-08-23T02:10:08.424431" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:08.424180" elapsed="0.000306"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:08.424140" elapsed="0.000369"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:10:08.353867" elapsed="0.070665"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:10:08.353678" elapsed="0.070885"/>
</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-08-23T02:10:08.351023" elapsed="0.073595"/>
</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-08-23T02:10:08.346079" elapsed="0.078593"/>
</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-08-23T02:10:08.345645" elapsed="0.079070"/>
</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-08-23T02:10:08.342789" elapsed="0.081978"/>
</kw>
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.425717" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:08.425333" elapsed="0.000412"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.433215" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:08.432961" elapsed="0.000300"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.433656" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:08.433411" elapsed="0.000289"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:08.439741" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:08.439789" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:08.439903" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:10:08.435823" elapsed="0.004501">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:08.433765" elapsed="0.006640">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.440589" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:08.440439" elapsed="0.000214"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:08.433747" elapsed="0.006929">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.441135" elapsed="0.000046"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:08.441332" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:08.441281" elapsed="0.000109"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:08.441257" elapsed="0.000163"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.441614" elapsed="0.000029"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:08.441710" elapsed="0.000021"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:10:08.428564" elapsed="0.013312">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:08.441974" elapsed="0.000024"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:08.425971" elapsed="0.016136">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:10:08.442180" elapsed="0.000020"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:10:08.425058" elapsed="0.017245">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>&lt;id&gt;SMALL&lt;/id&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.442520" elapsed="0.000029"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>&lt;model&gt;Isetta&lt;/model&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.442748" elapsed="0.000028"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>&lt;manufacturer&gt;BMW&lt;/manufacturer&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.442994" elapsed="0.000029"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>&lt;year&gt;1953&lt;/year&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.443218" elapsed="0.000027"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>&lt;category&gt;microcar&lt;/category&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.443438" elapsed="0.000027"/>
</kw>
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>&lt;id&gt;TOYOTA&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.443658" elapsed="0.000028"/>
</kw>
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>&lt;model&gt;Camry&lt;/model&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.443898" elapsed="0.000028"/>
</kw>
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>&lt;manufacturer&gt;Toyota&lt;/manufacturer&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.444121" elapsed="0.000027"/>
</kw>
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>&lt;year&gt;1982&lt;/year&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.444358" elapsed="0.000027"/>
</kw>
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>&lt;category&gt;sedan&lt;/category&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.444580" elapsed="0.000027"/>
</kw>
<doc>Get the device data as XML and make sure it matches the content posted as JSON in the previous case.</doc>
<status status="FAIL" start="2026-08-23T02:10:08.342204" elapsed="0.102583">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</test>
<test id="s1-s4-s1-t24" name="Add_Device_Data_Item_2_Via_JSON_Post" line="205">
<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-08-23T02:10:08.449364" elapsed="0.000210"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:10:08.449088" 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-08-23T02:10:08.450647" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:08.450537" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:08.450518" 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-08-23T02:10:08.455849" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:08.455729" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:08.455710" elapsed="0.000209"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.456942" 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-08-23T02:10:08.456537" elapsed="0.000432"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.457420" 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-08-23T02:10:08.457127" elapsed="0.000319"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:10:08.457490" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T02:10:08.457645" 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-08-23T02:10:08.456139" elapsed="0.001531"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:10:08.463126" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:08.463017" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:08.462997" 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-08-23T02:10:08.464444" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:08.464337" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:08.464318" elapsed="0.000194"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:10:08.465057" 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-08-23T02:10:08.464654" elapsed="0.000430"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:10:08.465492" 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-08-23T02:10:08.465240" elapsed="0.000278"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:10:08.499012" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:10:08.466096" elapsed="0.033094"/>
</kw>
<msg time="2026-08-23T02:10:08.499370" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:10:08.499417" 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 "n "e "t "c "o "n "f "...</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-08-23T02:10:08.465674" elapsed="0.033779"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:10:08.519982" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "A "d "d "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "I "t "e "m "_ "2 "_ "V "i "a "_ "J "S "O "N "_ "P "o "s "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-08-23T02:10:08.500046" elapsed="0.020135"/>
</kw>
<msg time="2026-08-23T02:10:08.520393" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:10:08.520440" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "A "d "d "_ "D "e "v "i "c "e "_ "D "a "t "a ...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:10:08.499623" elapsed="0.020854"/>
</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-08-23T02:10:08.520785" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:08.520556" elapsed="0.000332"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:08.520535" elapsed="0.000380"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.521457" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "A "d "d "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "I "t "e "m "_ "2 "_ "V "i "a "_ "J "S "O "N "_ "P "o "s "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-08-23T02:10:08.521059" elapsed="0.000471"/>
</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-08-23T02:10:08.521808" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:08.521596" elapsed="0.000311"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:08.521578" elapsed="0.000354"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:10:08.521968" elapsed="0.000073"/>
</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-08-23T02:10:08.525386" elapsed="0.000150"/>
</kw>
<msg time="2026-08-23T02:10:08.525609" 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-08-23T02:10:08.524618" elapsed="0.001097"/>
</kw>
<kw name="Open 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-08-23T02:10:08.526811" elapsed="0.000059"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.528189" elapsed="0.000039"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:10:08.522917" elapsed="0.005393"/>
</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-08-23T02:10:08.522291" elapsed="0.006170"/>
</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-08-23T02:10:08.464003" elapsed="0.064560"/>
</kw>
<msg time="2026-08-23T02:10:08.528657" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:10:08.528703" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "A "d "d "_ "D "e "v "i "c "e "_ "D "a "t "a ...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:10:08.463343" elapsed="0.065398"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:10:08.529129" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-08-23T02:10:08.528817" elapsed="0.000376"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:08.528798" elapsed="0.000419"/>
</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-08-23T02:10:08.529620" 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-08-23T02:10:08.530081" elapsed="0.000026"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:10:08.530156" 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-08-23T02:10:08.462667" elapsed="0.067598"/>
</kw>
<msg time="2026-08-23T02:10:08.530356" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:10:08.530400" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "A "d "d "_ "D "e "v "i "c "e "_ "D "a "t "a ...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:10:08.458050" elapsed="0.072387"/>
</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-08-23T02:10:08.530757" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:08.530511" elapsed="0.000300"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:08.530494" elapsed="0.000357"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:10:08.457905" elapsed="0.072971"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:10:08.457721" elapsed="0.073188"/>
</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-08-23T02:10:08.455368" elapsed="0.075599"/>
</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-08-23T02:10:08.450250" elapsed="0.080775"/>
</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-08-23T02:10:08.449811" elapsed="0.081259"/>
</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-08-23T02:10:08.446029" elapsed="0.085093"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.531733" level="INFO">${mapping} = {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping}</var>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-23T02:10:08.531293" elapsed="0.000467"/>
</kw>
<kw name="Post_As_Json_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-08-23T02:10:08.582122" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item2.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:08.581720" elapsed="0.000431"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T02:10:08.582985" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/item2.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-23T02:10:08.582648" elapsed="0.000467">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/item2.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-23T02:10:08.583215" 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-08-23T02:10:08.582313" elapsed="0.000926"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.583791" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item2/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-08-23T02:10:08.583402" elapsed="0.000416"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:10:08.584139" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/item2/location.uri"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/item2/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:10:08.584292" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount/car:cars
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:10:08.583997" elapsed="0.000321"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.584735" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount/car:cars
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:08.584486" 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-08-23T02:10:08.585747" level="INFO">mapping: {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:08.585489" elapsed="0.000303"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.586228" 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-08-23T02:10:08.585965" elapsed="0.000288"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.586925" level="INFO">${value} = netconf-test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:10:08.586608" elapsed="0.000343"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:10:08.587919" level="INFO">${encoded} = netconf-test-device</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-08-23T02:10:08.587639" elapsed="0.000307"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:10:08.587998" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T02:10:08.588152" level="INFO">${encoded_value} = netconf-test-device</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-08-23T02:10:08.587316" elapsed="0.000861"/>
</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-08-23T02:10:08.588327" elapsed="0.000277"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:10:08.586474" elapsed="0.002172"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.589211" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:10:08.588909" elapsed="0.000328"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:10:08.590000" level="INFO">${encoded} = /rests</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-08-23T02:10:08.589736" elapsed="0.000290"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:10:08.590077" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:10:08.590228" level="INFO">${encoded_value} = /rests</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-08-23T02:10:08.589421" elapsed="0.000832"/>
</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-08-23T02:10:08.590401" elapsed="0.000225"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-23T02:10:08.588760" elapsed="0.001906"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-23T02:10:08.586305" elapsed="0.004397"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-23T02:10:08.590746" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:10:08.590950" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-23T02:10:08.585165" elapsed="0.005824"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:08.584867" elapsed="0.006170"/>
</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-08-23T02:10:08.591246" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:08.591077" elapsed="0.000229"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:08.584827" elapsed="0.006501"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.592172" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/car:cars</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-08-23T02:10:08.591536" elapsed="0.000664"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T02:10:08.592286" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item2.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item2.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item2/${file_name}.</doc>
<status status="PASS" start="2026-08-23T02:10:08.581103" elapsed="0.011314"/>
</kw>
<msg time="2026-08-23T02:10:08.592488" 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-08-23T02:10:08.568380" elapsed="0.024163"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item2.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item2.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item2/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.605051" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item2.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item2.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item2/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.617503" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item2.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item2.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item2/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.630004" 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-08-23T02:10:08.630198" 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-08-23T02:10:08.630371" 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-08-23T02:10:08.630735" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:08.630592" elapsed="0.000199"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:08.630577" 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-08-23T02:10:08.630969" 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-08-23T02:10:08.631134" 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-08-23T02:10:08.631295" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T02:10:08.630549" elapsed="0.000798"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T02:10:08.630448" 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-08-23T02:10:08.631516" elapsed="0.000019"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:08.631590" elapsed="0.000016"/>
</return>
<msg time="2026-08-23T02:10:08.631709" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/car:cars</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-08-23T02:10:08.564125" elapsed="0.067610"/>
</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-08-23T02:10:08.656630" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item2.vanadium/post_data.json</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-08-23T02:10:08.656169" elapsed="0.000490"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T02:10:08.657389" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/item2.vanadium/post_data.json' 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-08-23T02:10:08.657180" elapsed="0.000274">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/item2.vanadium/post_data.json' does not exist.</status>
</kw>
<msg time="2026-08-23T02:10:08.657547" 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-08-23T02:10:08.656820" elapsed="0.000752"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.658136" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item2/post_data.json</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-08-23T02:10:08.657731" elapsed="0.000433"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:10:08.658458" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/item2/post_data.json"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/item2/post_data.json&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:10:08.658587" level="INFO">${template} = {
  "car:car-entry": {
    "car:id":"TOYOTA",
    "car:model":"Camry",
    "car:manufacturer":"Toyota",
    "car:year":"1982",
    "car:category":"sedan"
  }
}
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:10:08.658323" elapsed="0.000290"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.659032" level="INFO">{
  "car:car-entry": {
    "car:id":"TOYOTA",
    "car:model":"Camry",
    "car:manufacturer":"Toyota",
    "car:year":"1982",
    "car:category":"sedan"
  }
}
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:08.658767" 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-08-23T02:10:08.659429" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:08.659144" elapsed="0.000345"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.659968" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</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-08-23T02:10:08.659656" elapsed="0.000339"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:08.659514" elapsed="0.000517"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:08.659125" elapsed="0.000927"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.660642" level="INFO">${final_text} = {
  "car:car-entry": {
    "car:id":"TOYOTA",
    "car:model":"Camry",
    "car:manufacturer":"Toyota",
    "car:year":"1982",
    "car:category":"sedan"
  }
}</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-08-23T02:10:08.660194" elapsed="0.000477"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T02:10:08.660720" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item2.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item2.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item2/${file_name}.</doc>
<status status="PASS" start="2026-08-23T02:10:08.655534" elapsed="0.005326"/>
</kw>
<msg time="2026-08-23T02:10:08.660914" 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-08-23T02:10:08.642670" elapsed="0.018292"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item2.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item2.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item2/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.673325" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item2.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item2.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item2/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.685874" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item2.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item2.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item2/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.698448" elapsed="0.000069"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.698685" 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-08-23T02:10:08.698876" 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-08-23T02:10:08.699238" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:08.699096" elapsed="0.000199"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:08.699081" 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-08-23T02:10:08.699456" 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-08-23T02:10:08.699620" 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-08-23T02:10:08.699783" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T02:10:08.699053" elapsed="0.000797"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T02:10:08.698953" 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-08-23T02:10:08.700021" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:08.700097" elapsed="0.000015"/>
</return>
<msg time="2026-08-23T02:10:08.700210" level="INFO">${data} = {
  "car:car-entry": {
    "car:id":"TOYOTA",
    "car:model":"Camry",
    "car:manufacturer":"Toyota",
    "car:year":"1982",
    "car:category":"sedan"
  }
}</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-08-23T02:10:08.641816" elapsed="0.058421"/>
</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-08-23T02:10:08.701513" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/item2/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-08-23T02:10:08.701268" elapsed="0.000310">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/item2/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-23T02:10:08.701672" 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-08-23T02:10:08.700922" 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-08-23T02:10:08.702027" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:08.701766" elapsed="0.000318"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.702567" 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-08-23T02:10:08.702275" elapsed="0.000318"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:08.702109" elapsed="0.000519"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:08.701748" elapsed="0.000901"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.705184" 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-08-23T02:10:08.702795" elapsed="0.002417"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-23T02:10:08.705265" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:10:08.705420" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item2/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-23T02:10:08.700567" elapsed="0.004878"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.706989" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/car:cars</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:08.706722" elapsed="0.000313"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.707426" level="INFO">{
  "car:car-entry": {
    "car:id":"TOYOTA",
    "car:model":"Camry",
    "car:manufacturer":"Toyota",
    "car:year":"1982",
    "car:category":"sedan"
  }
}</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:08.707185" elapsed="0.000323"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.707923" 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-08-23T02:10:08.707660" elapsed="0.000307"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.708356" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:08.708115" elapsed="0.000284"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-08-23T02:10:08.709228" 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-08-23T02:10:08.709035" elapsed="0.000219"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-08-23T02:10:08.709577" 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-08-23T02:10:08.709405" 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-08-23T02:10:08.709749" elapsed="0.000207"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.710358" 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-08-23T02:10:08.710110" elapsed="0.000291"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-08-23T02:10:08.710444" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:10:08.710600" 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-08-23T02:10:08.708599" 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-08-23T02:10:08.716967" level="INFO">POST Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/car:cars 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/car:cars 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Type': 'application/json', 'Content-Length': '159', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body={
  "car:car-entry": {
    "car:id":"TOYOTA",
    "car:model":"Camry",
    "car:manufacturer":"Toyota",
    "car:year":"1982",
    "car:category":"sedan"
  }
} 
 </msg>
<msg time="2026-08-23T02:10:08.717024" level="INFO">POST Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/car:cars 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '482'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/car:cars&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:10:08.717130" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/car:cars</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:10:08.712793" elapsed="0.004708">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/car:cars</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:08.710696" elapsed="0.006891">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/car:cars</status>
</branch>
<branch type="ELSE">
<kw name="POST On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.717769" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:08.717619" elapsed="0.000239"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:08.710677" elapsed="0.007206">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/car:cars</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.718253" elapsed="0.000025"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:08.718388" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:08.718351" elapsed="0.000079"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:08.718334" elapsed="0.000118"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.718592" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:08.718659" elapsed="0.000014"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>content_type=${content_type}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>POST data to given URI, check status code and return response text.
${content_type} and ${accept} are mandatory Python objects with headers to use.
If ${normalize_json}, normalize text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:10:08.705771" elapsed="0.012990">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/car:cars</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:08.718892" elapsed="0.000018"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>extension=json</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>content_type=${HEADERS_YANG_JSON}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>endline=${\n}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve URI and data from folder, call Post_To_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:08.550958" elapsed="0.168033">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/car:cars</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Json_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=response</arg>
<arg>mapping=${mapping}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected JSON data, should be equal to provided ${response}.
JSON normalization is used, endlines enabled for readability.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.719284" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:08.719106" elapsed="0.000245"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:08.719088" elapsed="0.000287"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:08.719409" elapsed="0.000014"/>
</return>
<arg>${directory_with_template_folders}${/}item2</arg>
<arg>${mapping}</arg>
<doc>Add arguments sensible for JSON data, return Post_Templated response text.
Optionally, verification against response.json (no iteration) is called.
Only subset of JSON data is verified and returned if JMES path is specified in
file ${folder}/jmespath.expr.
Response status code must be one of values from ${explicit_status_codes} if specified or one of set
created from all positive HTTP status codes together with ${additional_allowed_status_codes}.</doc>
<status status="FAIL" start="2026-08-23T02:10:08.543298" elapsed="0.176205">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/car:cars</status>
</kw>
<doc>Send a JSON request to change the sample test data and check that the request went OK.</doc>
<status status="FAIL" start="2026-08-23T02:10:08.445208" elapsed="0.274449">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/car:cars</status>
</test>
<test id="s1-s4-s1-t25" name="Check_Item2_Is_Created" line="210">
<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-08-23T02:10:08.724156" elapsed="0.000296"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:10:08.723769" elapsed="0.000760"/>
</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-08-23T02:10:08.725939" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:08.725763" elapsed="0.000246"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:08.725736" elapsed="0.000303"/>
</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-08-23T02:10:08.732030" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:08.731922" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:08.731904" elapsed="0.000193"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.733109" 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-08-23T02:10:08.732706" elapsed="0.000430"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.733588" 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-08-23T02:10:08.733293" elapsed="0.000321"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:10:08.733659" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:10:08.733813" 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-08-23T02:10:08.732318" elapsed="0.001534"/>
</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-08-23T02:10:08.739306" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:08.739198" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:08.739180" 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-08-23T02:10:08.740595" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:08.740489" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:08.740471" elapsed="0.000192"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:10:08.741227" 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-08-23T02:10:08.740818" elapsed="0.000436"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:10:08.741671" 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-08-23T02:10:08.741410" elapsed="0.000287"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:10:08.774153" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:10:08.742306" elapsed="0.032030"/>
</kw>
<msg time="2026-08-23T02:10:08.774523" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:10:08.774572" 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 "n "e "t "c "o "n "f "...</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-08-23T02:10:08.741907" elapsed="0.032702"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:10:08.794314" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "h "e "c "k "_ "I "t "e "m "2 "_ "I "s "_ "C "r "e "a "t "e "d "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-08-23T02:10:08.775209" elapsed="0.019298"/>
</kw>
<msg time="2026-08-23T02:10:08.794688" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:10:08.794735" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "h "e "c "k "_ "I "t "e "m "2 "_ "I "s "_ ...</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-08-23T02:10:08.774780" elapsed="0.019992"/>
</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-08-23T02:10:08.795104" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:08.794872" elapsed="0.000312"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:08.794830" elapsed="0.000379"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.795750" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "h "e "c "k "_ "I "t "e "m "2 "_ "I "s "_ "C "r "e "a "t "e "d "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:08.795351" elapsed="0.000467"/>
</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-08-23T02:10:08.796164" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:08.795907" elapsed="0.000340"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:08.795886" elapsed="0.000387"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:10:08.796307" 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-08-23T02:10:08.799912" elapsed="0.000156"/>
</kw>
<msg time="2026-08-23T02:10:08.800146" 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-08-23T02:10:08.799011" elapsed="0.001242"/>
</kw>
<kw name="Open 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-08-23T02:10:08.801376" elapsed="0.000041"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.802507" elapsed="0.000040"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:10:08.797258" elapsed="0.005370"/>
</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-08-23T02:10:08.796570" elapsed="0.006186"/>
</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-08-23T02:10:08.740189" elapsed="0.062716"/>
</kw>
<msg time="2026-08-23T02:10:08.803004" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:10:08.803048" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "h "e "c "k "_ "I "t "e "m "2 "_ "I "s "_ ...</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-08-23T02:10:08.739525" elapsed="0.063561"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:10:08.803269" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:10:08.803161" elapsed="0.000170"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:08.803142" elapsed="0.000224"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.803780" 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-08-23T02:10:08.804444" elapsed="0.000026"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:10:08.804517" 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-08-23T02:10:08.738856" elapsed="0.065770"/>
</kw>
<msg time="2026-08-23T02:10:08.804719" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:10:08.804829" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "h "e "c "k "_ "I "t "e "m "2 "_ "I "s "_ ...</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-08-23T02:10:08.734215" elapsed="0.070675"/>
</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-08-23T02:10:08.805224" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:08.804970" elapsed="0.000309"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:08.804951" elapsed="0.000352"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:10:08.734076" elapsed="0.071250"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:10:08.733906" elapsed="0.071450"/>
</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-08-23T02:10:08.731548" elapsed="0.073860"/>
</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-08-23T02:10:08.725364" elapsed="0.080099"/>
</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-08-23T02:10:08.724754" elapsed="0.080754"/>
</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-08-23T02:10:08.720596" elapsed="0.084964"/>
</kw>
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.806389" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:08.806004" elapsed="0.000412"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.815382" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:08.815130" elapsed="0.000298"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.815825" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:08.815579" elapsed="0.000306"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:08.821467" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:08.821515" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:08.821616" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:10:08.818018" elapsed="0.003974">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:08.815951" elapsed="0.006121">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.822255" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:08.822105" elapsed="0.000214"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:08.815933" elapsed="0.006409">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.822697" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:08.822827" elapsed="0.000030"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:08.822791" elapsed="0.000095"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:08.822774" elapsed="0.000133"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.823046" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:08.823115" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:10:08.808995" elapsed="0.014220">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:08.823317" elapsed="0.000016"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:08.806626" elapsed="0.016785">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:10:08.823463" elapsed="0.000015"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:10:08.805714" elapsed="0.017837">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>&lt;id&gt;SMALL&lt;/id&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.823706" elapsed="0.000021"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>&lt;model&gt;Isetta&lt;/model&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.823887" elapsed="0.000021"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>&lt;manufacturer&gt;BMW&lt;/manufacturer&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.824056" elapsed="0.000020"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>&lt;year&gt;1953&lt;/year&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.824218" elapsed="0.000019"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>&lt;category&gt;microcar&lt;/category&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.824377" elapsed="0.000020"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>&lt;id&gt;TOYOTA&lt;/id&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.824536" elapsed="0.000020"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>&lt;model&gt;Camry&lt;/model&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.824694" elapsed="0.000020"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>&lt;manufacturer&gt;Toyota&lt;/manufacturer&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.824892" elapsed="0.000022"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>&lt;year&gt;1982&lt;/year&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.825058" elapsed="0.000020"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>&lt;category&gt;sedan&lt;/category&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.825218" elapsed="0.000019"/>
</kw>
<doc>Get the device data as XML and make sure it matches the content posted as JSON in the previous case.</doc>
<status status="FAIL" start="2026-08-23T02:10:08.720009" elapsed="0.105362">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</test>
<test id="s1-s4-s1-t26" name="Delete_Device_Data" line="224">
<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-08-23T02:10:08.828630" elapsed="0.000249"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:10:08.828372" elapsed="0.000564"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:10:08.829913" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:08.829786" elapsed="0.000173"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:08.829767" elapsed="0.000214"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:10:08.835136" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:08.835029" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:08.835010" elapsed="0.000193"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.836196" 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-08-23T02:10:08.835796" elapsed="0.000427"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.836676" 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-08-23T02:10:08.836379" elapsed="0.000323"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:10:08.836746" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:10:08.836933" 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-08-23T02:10:08.835423" elapsed="0.001536"/>
</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-08-23T02:10:08.842405" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:08.842295" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:08.842277" 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-08-23T02:10:08.843727" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:08.843620" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:08.843602" elapsed="0.000194"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:10:08.844340" 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-08-23T02:10:08.843959" elapsed="0.000407"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:10:08.844775" 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-08-23T02:10:08.844521" elapsed="0.000281"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:10:08.883123" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:10:08.845397" elapsed="0.037910"/>
</kw>
<msg time="2026-08-23T02:10:08.883492" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:10:08.883539" 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 "n "e "t "c "o "n "f "...</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-08-23T02:10:08.844989" elapsed="0.038587"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:10:08.905145" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "D "e "l "e "t "e "_ "D "e "v "i "c "e "_ "D "a "t "a "[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-08-23T02:10:08.884170" elapsed="0.021164"/>
</kw>
<msg time="2026-08-23T02:10:08.905513" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:10:08.905559" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "D "e "l "e "t "e "_ "D "e "v "i "c "e "_ "D ...</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-08-23T02:10:08.883749" elapsed="0.021847"/>
</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-08-23T02:10:08.905917" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:08.905673" elapsed="0.000324"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:08.905653" elapsed="0.000369"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.906551" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "D "e "l "e "t "e "_ "D "e "v "i "c "e "_ "D "a "t "a "[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-08-23T02:10:08.906163" elapsed="0.000454"/>
</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-08-23T02:10:08.906913" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:08.906683" elapsed="0.000309"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:08.906665" elapsed="0.000351"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:10:08.907050" 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-08-23T02:10:08.910321" elapsed="0.000149"/>
</kw>
<msg time="2026-08-23T02:10:08.910544" 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-08-23T02:10:08.909620" elapsed="0.001028"/>
</kw>
<kw name="Open 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-08-23T02:10:08.911737" elapsed="0.000039"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.913111" elapsed="0.000043"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:10:08.907923" elapsed="0.005313"/>
</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-08-23T02:10:08.907311" elapsed="0.006049"/>
</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-08-23T02:10:08.843317" elapsed="0.070142"/>
</kw>
<msg time="2026-08-23T02:10:08.913552" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:10:08.913596" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "D "e "l "e "t "e "_ "D "e "v "i "c "e "_ "D ...</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-08-23T02:10:08.842623" elapsed="0.071011"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:10:08.914002" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-08-23T02:10:08.913710" elapsed="0.000355"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:08.913691" elapsed="0.000399"/>
</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-08-23T02:10:08.914483" 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-08-23T02:10:08.914972" elapsed="0.000027"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:10:08.915048" 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-08-23T02:10:08.841953" elapsed="0.073204"/>
</kw>
<msg time="2026-08-23T02:10:08.915249" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:10:08.915292" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "D "e "l "e "t "e "_ "D "e "v "i "c "e "_ "D ...</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-08-23T02:10:08.837324" elapsed="0.078005"/>
</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-08-23T02:10:08.915796" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:08.915403" elapsed="0.000467"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:08.915386" elapsed="0.000509"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:10:08.837185" elapsed="0.078733"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:10:08.837015" elapsed="0.078934"/>
</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-08-23T02:10:08.834653" elapsed="0.081355"/>
</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-08-23T02:10:08.829499" elapsed="0.086563"/>
</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-08-23T02:10:08.829084" elapsed="0.087022"/>
</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-08-23T02:10:08.826240" elapsed="0.089916"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.916743" level="INFO">${mapping} = {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping}</var>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-23T02:10:08.916317" elapsed="0.000452"/>
</kw>
<kw name="Delete_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-08-23T02:10:08.959386" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:08.959010" elapsed="0.000404"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T02:10:08.960156" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamod1.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-23T02:10:08.959918" elapsed="0.000308">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamod1.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-23T02:10:08.960319" 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-08-23T02:10:08.959575" elapsed="0.000769"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.960901" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1/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-08-23T02:10:08.960504" elapsed="0.000425"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:10:08.961476" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamod1/location.uri"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamod1/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:10:08.961619" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount/test:cont
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:10:08.961321" elapsed="0.000324"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.962061" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount/test:cont
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:08.961800" 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-08-23T02:10:08.963055" level="INFO">mapping: {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:08.962782" elapsed="0.000317"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.963513" 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-08-23T02:10:08.963253" elapsed="0.000285"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.964207" level="INFO">${value} = netconf-test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:10:08.963906" elapsed="0.000365"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:10:08.965222" level="INFO">${encoded} = netconf-test-device</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-08-23T02:10:08.964779" elapsed="0.000470"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:10:08.965302" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T02:10:08.965457" level="INFO">${encoded_value} = netconf-test-device</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-08-23T02:10:08.964461" elapsed="0.001021"/>
</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-08-23T02:10:08.965635" elapsed="0.000257"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:10:08.963758" elapsed="0.002176"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.966480" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:10:08.966181" elapsed="0.000324"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:10:08.967241" level="INFO">${encoded} = /rests</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-08-23T02:10:08.967028" elapsed="0.000238"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:10:08.967316" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:10:08.967466" level="INFO">${encoded_value} = /rests</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-08-23T02:10:08.966690" elapsed="0.000801"/>
</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-08-23T02:10:08.967640" elapsed="0.000239"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-23T02:10:08.966049" elapsed="0.001871"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-23T02:10:08.963590" elapsed="0.004366"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-23T02:10:08.967999" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:10:08.968156" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-23T02:10:08.962463" elapsed="0.005719"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:08.962174" elapsed="0.006039"/>
</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-08-23T02:10:08.968384" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:08.968239" elapsed="0.000200"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:08.962154" elapsed="0.006306"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:10:08.969228" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</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-08-23T02:10:08.968600" elapsed="0.000657"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T02:10:08.969306" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1/${file_name}.</doc>
<status status="PASS" start="2026-08-23T02:10:08.958383" elapsed="0.011046"/>
</kw>
<msg time="2026-08-23T02:10:08.969482" 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-08-23T02:10:08.945644" elapsed="0.023885"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.981971" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:08.994541" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:09.007033" 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-08-23T02:10:09.007227" 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-08-23T02:10:09.007398" 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-08-23T02:10:09.007759" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:09.007617" elapsed="0.000198"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:09.007601" 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-08-23T02:10:09.007995" 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-08-23T02:10:09.008160" 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-08-23T02:10:09.008322" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T02:10:09.007573" elapsed="0.000802"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T02:10:09.007474" 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-08-23T02:10:09.008542" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:09.008617" elapsed="0.000015"/>
</return>
<msg time="2026-08-23T02:10:09.008736" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=${location}</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-23T02:10:08.941324" elapsed="0.067438"/>
</kw>
<kw name="Delete_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:09.009877" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:09.009614" elapsed="0.000309"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:09.017330" level="INFO">DELETE Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Length': '0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:09.017377" level="INFO">DELETE Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont 
 status=404, reason=Not Found 
 headers={'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:09.017469" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:10:09.012080" elapsed="0.005747">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:09.009989" elapsed="0.007940">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</status>
</branch>
<branch type="ELSE">
<kw name="DELETE On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:09.018117" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:09.017963" elapsed="0.000215"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:09.009971" elapsed="0.008230">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:09.018563" elapsed="0.000025"/>
</kw>
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:09.018671" elapsed="0.000017"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>session=${session}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>DELETE resource at URI, check status_code and return response text..</doc>
<status status="FAIL" start="2026-08-23T02:10:09.009036" elapsed="0.009742">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:09.018855" elapsed="0.000017"/>
</return>
<arg>${directory_with_template_folders}${/}datamod1</arg>
<arg>${mapping}</arg>
<doc>Resolve URI from folder, issue DELETE request.</doc>
<status status="FAIL" start="2026-08-23T02:10:08.917028" elapsed="0.101923">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</status>
</kw>
<kw name="Delete_Templated" owner="TemplatedRequests">
<arg>${directory_with_template_folders}${/}item1</arg>
<arg>${mapping}</arg>
<doc>Resolve URI from folder, issue DELETE request.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:09.019173" elapsed="0.000024"/>
</kw>
<doc>Send a request to delete the sample test data on the device and check that the request went OK.</doc>
<status status="FAIL" start="2026-08-23T02:10:08.825667" elapsed="0.193666">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</status>
</test>
<test id="s1-s4-s1-t27" name="Check_Device_Data_Is_Deleted" line="230">
<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-08-23T02:10:09.023184" elapsed="0.000295"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:10:09.022790" elapsed="0.000766"/>
</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-08-23T02:10:09.024947" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:09.024771" elapsed="0.000241"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:09.024744" elapsed="0.000299"/>
</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-08-23T02:10:09.031497" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:09.031389" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:09.031371" elapsed="0.000193"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:10:09.032551" 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-08-23T02:10:09.032174" elapsed="0.000404"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:10:09.033050" 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-08-23T02:10:09.032732" elapsed="0.000344"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:10:09.033120" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:10:09.033286" 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-08-23T02:10:09.031784" elapsed="0.001527"/>
</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-08-23T02:10:09.038753" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:09.038647" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:09.038627" elapsed="0.000194"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:10:09.040071" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:09.039964" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:09.039946" elapsed="0.000194"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:10:09.040664" 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-08-23T02:10:09.040282" elapsed="0.000408"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:10:09.041120" 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-08-23T02:10:09.040860" elapsed="0.000287"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:10:09.070667" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:10:09.041710" elapsed="0.029154"/>
</kw>
<msg time="2026-08-23T02:10:09.071050" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:10:09.071097" 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 "n "e "t "c "o "n "f "...</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-08-23T02:10:09.041317" elapsed="0.029817"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:10:09.093228" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "I "s "_ "D "e "l "e "t "e "d "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-08-23T02:10:09.071701" elapsed="0.022364"/>
</kw>
<msg time="2026-08-23T02:10:09.094599" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:10:09.094716" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "D "a ...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:10:09.071303" elapsed="0.023507"/>
</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-08-23T02:10:09.095753" elapsed="0.000063"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:09.095089" elapsed="0.000905"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:09.095017" elapsed="0.001050"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:09.097596" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "I "s "_ "D "e "l "e "t "e "d "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:09.096416" elapsed="0.001355"/>
</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-08-23T02:10:09.098210" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:09.097979" elapsed="0.000308"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:09.097933" elapsed="0.000380"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:10:09.098354" elapsed="0.000044"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-23T02:10:09.101907" elapsed="0.000156"/>
</kw>
<msg time="2026-08-23T02:10:09.102139" 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-08-23T02:10:09.101151" elapsed="0.001104"/>
</kw>
<kw name="Open 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-08-23T02:10:09.103400" elapsed="0.000040"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:09.104686" elapsed="0.000039"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:10:09.099363" elapsed="0.005446"/>
</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-08-23T02:10:09.098686" elapsed="0.006269"/>
</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-08-23T02:10:09.039638" elapsed="0.065419"/>
</kw>
<msg time="2026-08-23T02:10:09.105156" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:10:09.105202" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "D "a ...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:10:09.038988" elapsed="0.066255"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:10:09.105455" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-08-23T02:10:09.105344" elapsed="0.000170"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:09.105323" elapsed="0.000216"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 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-08-23T02:10:09.106063" 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-08-23T02:10:09.106414" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:10:09.106486" 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-08-23T02:10:09.038309" elapsed="0.068290"/>
</kw>
<msg time="2026-08-23T02:10:09.106697" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:10:09.106742" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "D "a ...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:10:09.033666" elapsed="0.073116"/>
</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-08-23T02:10:09.107135" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:09.106877" elapsed="0.000312"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:09.106858" elapsed="0.000355"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:10:09.033528" elapsed="0.073709"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:10:09.033363" elapsed="0.073912"/>
</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-08-23T02:10:09.031027" elapsed="0.076311"/>
</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-08-23T02:10:09.024371" elapsed="0.083124"/>
</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-08-23T02:10:09.023763" elapsed="0.083782"/>
</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-08-23T02:10:09.020092" elapsed="0.087512"/>
</kw>
<kw name="Regexp Escape" owner="BuiltIn">
<msg time="2026-08-23T02:10:09.108229" level="INFO">${escaped} = urn:ietf:params:xml:ns:netconf:base:1\.0</msg>
<var>${escaped}</var>
<arg>${ODL_NETCONF_NAMESPACE}</arg>
<doc>Returns each argument escaped for use as a regular expression.</doc>
<status status="PASS" start="2026-08-23T02:10:09.107774" elapsed="0.000482"/>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:09.109594" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:09.109197" elapsed="0.000424"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:09.117169" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:09.116916" elapsed="0.000300"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:09.117628" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:09.117378" elapsed="0.000293"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:09.123536" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:09.123587" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:09.123692" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:10:09.119807" elapsed="0.004323">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:09.117738" elapsed="0.006480">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:09.124407" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:09.124252" elapsed="0.000220"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:09.117720" elapsed="0.006775">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:09.124893" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:09.125032" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:09.124990" elapsed="0.000084"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:09.124972" elapsed="0.000124"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:09.125238" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:09.125307" elapsed="0.000027"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:10:09.112537" elapsed="0.012891">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:09.125497" elapsed="0.000015"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:09.109846" elapsed="0.015744">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:10:09.125647" elapsed="0.000015"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:10:09.108924" elapsed="0.016813">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:09.126025" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:09.125867" elapsed="0.000214"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:09.126247" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:09.126105" elapsed="0.000196"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:09.126460" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:09.126324" elapsed="0.000189"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:09.125848" elapsed="0.000686"/>
</if>
<arg>&lt;data xmlns\="${escaped}"(\/&gt;|&gt;&lt;\/data&gt;)</arg>
<arg>${True}</arg>
<status status="FAIL" start="2026-08-23T02:10:09.108467" elapsed="0.018144">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<doc>Get the device data and make sure it is empty again.</doc>
<status status="FAIL" start="2026-08-23T02:10:09.019599" elapsed="0.107165">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</test>
<test id="s1-s4-s1-t28" name="Deconfigure_Device_From_Netconf" line="235">
<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-08-23T02:10:09.130196" elapsed="0.000297"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:10:09.129864" elapsed="0.000704"/>
</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-08-23T02:10:09.131969" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:09.131788" elapsed="0.000247"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:09.131761" elapsed="0.000305"/>
</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-08-23T02:10:09.138950" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:09.138825" elapsed="0.000173"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:09.138807" elapsed="0.000218"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:10:09.140034" 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-08-23T02:10:09.139630" elapsed="0.000431"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:10:09.140517" 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-08-23T02:10:09.140221" elapsed="0.000322"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:10:09.140587" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:10:09.140743" 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-08-23T02:10:09.139250" elapsed="0.001518"/>
</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-08-23T02:10:09.146282" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:09.146173" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:09.146154" elapsed="0.000197"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:10:09.147572" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:09.147463" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:09.147444" elapsed="0.000197"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:10:09.148197" 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-08-23T02:10:09.147782" elapsed="0.000442"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:10:09.148639" 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-08-23T02:10:09.148381" elapsed="0.000285"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:10:09.179106" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:10:09.149234" elapsed="0.030047"/>
</kw>
<msg time="2026-08-23T02:10:09.179461" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:10:09.179508" 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 "n "e "t "c "o "n "f "...</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-08-23T02:10:09.148821" elapsed="0.030724"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:10:09.200108" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "D "e "c "o "n "f "i "g "u "r "e "_ "D "e "v "i "c "e "_ "F "r "o "m "_ "N "e "t "c "o "n "f "[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-08-23T02:10:09.180132" elapsed="0.020219"/>
</kw>
<msg time="2026-08-23T02:10:09.200532" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:10:09.200578" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "D "e "c "o "n "f "i "g "u "r "e "_ "D "e "v ...</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-08-23T02:10:09.179713" elapsed="0.020902"/>
</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-08-23T02:10:09.200933" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:09.200691" elapsed="0.000327"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:09.200672" elapsed="0.000371"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:09.201602" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "D "e "c "o "n "f "i "g "u "r "e "_ "D "e "v "i "c "e "_ "F "r "o "m "_ "N "e "t "c "o "n "f "[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-08-23T02:10:09.201183" elapsed="0.000492"/>
</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-08-23T02:10:09.201975" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:09.201741" elapsed="0.000316"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:09.201723" elapsed="0.000358"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:10:09.202115" elapsed="0.000031"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-23T02:10:09.205412" elapsed="0.000160"/>
</kw>
<msg time="2026-08-23T02:10:09.205647" 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-08-23T02:10:09.204697" elapsed="0.001056"/>
</kw>
<kw name="Open 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-08-23T02:10:09.206878" elapsed="0.000040"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:09.208242" elapsed="0.000196"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:10:09.203004" elapsed="0.005522"/>
</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-08-23T02:10:09.202390" elapsed="0.006267"/>
</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-08-23T02:10:09.147161" elapsed="0.061596"/>
</kw>
<msg time="2026-08-23T02:10:09.208864" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:10:09.208910" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "D "e "c "o "n "f "i "g "u "r "e "_ "D "e "v ...</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-08-23T02:10:09.146500" elapsed="0.062448"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:10:09.209134" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:10:09.209026" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:09.209006" 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-08-23T02:10:09.209648" 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-08-23T02:10:09.210029" elapsed="0.000026"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:10:09.210102" 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-08-23T02:10:09.145824" elapsed="0.064386"/>
</kw>
<msg time="2026-08-23T02:10:09.210304" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:10:09.210349" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "D "e "c "o "n "f "i "g "u "r "e "_ "D "e "v ...</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-08-23T02:10:09.141166" elapsed="0.069220"/>
</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-08-23T02:10:09.210710" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:09.210461" elapsed="0.000303"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:09.210443" elapsed="0.000345"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:10:09.141024" elapsed="0.069787"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:10:09.140827" elapsed="0.070219"/>
</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-08-23T02:10:09.138462" elapsed="0.072650"/>
</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-08-23T02:10:09.131391" elapsed="0.079777"/>
</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-08-23T02:10:09.130776" elapsed="0.080439"/>
</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-08-23T02:10:09.127684" elapsed="0.083586"/>
</kw>
<kw name="Configure_Device_In_Netconf" owner="NetconfKeywords">
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T02:10:09.230421" elapsed="0.000434"/>
</kw>
<msg time="2026-08-23T02:10:09.230909" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:10:09.230064" elapsed="0.000895"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return scandium if vanadium is at least ${lower_bound},
return calcium otherwise.</doc>
<status status="PASS" start="2026-08-23T02:10:09.229666" elapsed="0.001367"/>
</kw>
<msg time="2026-08-23T02:10:09.231076" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:10:09.221090" elapsed="0.010029"/>
</kw>
<msg time="2026-08-23T02:10:09.231220" level="INFO">${version} = scandium</msg>
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-08-23T02:10:09.220747" elapsed="0.010496"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:10:09.232144" level="INFO">${mapping} = {'DEVICE_IP': '10.30.170.120', 'DEVICE_NAME': 'netconf-test-device', 'DEVICE_PORT': '17830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'topsecret', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/t...</msg>
<var>${mapping}</var>
<arg>DEVICE_IP=${device_address}</arg>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>DEVICE_PORT=${device_port}</arg>
<arg>DEVICE_USER=${device_user}</arg>
<arg>DEVICE_PASSWORD=${device_password}</arg>
<arg>DEVICE_KEY=${device_key}</arg>
<arg>SCHEMA_DIRECTORY=${schema_directory}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-23T02:10:09.231409" elapsed="0.000763"/>
</kw>
<if>
<branch type="IF" condition="'${http_method}'=='post'">
<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-08-23T02:10:09.264420" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:09.264037" elapsed="0.000412"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T02:10:09.265225" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/rpc-delete-device.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-23T02:10:09.264959" elapsed="0.000348">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/rpc-delete-device.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-23T02:10:09.265401" 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-08-23T02:10:09.264613" elapsed="0.000812"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:10:09.266083" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device/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-08-23T02:10:09.265654" elapsed="0.000457"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:10:09.266418" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/rpc-delete-device/location.uri"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/rpc-delete-device/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:10:09.266605" level="INFO">${template} = $RESTCONF_ROOT/operations/netconf-node-topology:delete-device
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:10:09.266276" elapsed="0.000354"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:09.267062" level="INFO">$RESTCONF_ROOT/operations/netconf-node-topology:delete-device
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:09.266788" elapsed="0.000319"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:09.268093" level="INFO">mapping: {'DEVICE_IP': '10.30.170.120', 'DEVICE_NAME': 'netconf-test-device', 'DEVICE_PORT': '17830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'topsecret', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:09.267810" elapsed="0.000379"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:10:09.268628" 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-08-23T02:10:09.268351" elapsed="0.000303"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:10:09.269667" level="INFO">${value} = 10.30.170.120</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:10:09.269061" elapsed="0.000634"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:10:09.270960" level="INFO">${encoded} = 10.30.170.120</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-08-23T02:10:09.270382" elapsed="0.000623"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:10:09.271138" elapsed="0.000036"/>
</return>
<msg time="2026-08-23T02:10:09.271388" level="INFO">${encoded_value} = 10.30.170.120</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-08-23T02:10:09.269910" elapsed="0.001505"/>
</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-08-23T02:10:09.271568" elapsed="0.000583"/>
</kw>
<var name="${key}">DEVICE_IP</var>
<var name="${value}">10.30.170.120</var>
<status status="PASS" start="2026-08-23T02:10:09.268921" elapsed="0.003274"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:10:09.273035" level="INFO">${value} = netconf-test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:10:09.272444" elapsed="0.000618"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:10:09.274678" level="INFO">${encoded} = netconf-test-device</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-08-23T02:10:09.273735" elapsed="0.001046"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:10:09.275450" elapsed="0.000076"/>
</return>
<msg time="2026-08-23T02:10:09.276057" level="INFO">${encoded_value} = netconf-test-device</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-08-23T02:10:09.273251" elapsed="0.002868"/>
</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-08-23T02:10:09.276476" elapsed="0.001579"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:10:09.272311" elapsed="0.005834"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:10:09.279109" level="INFO">${value} = 17830</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:10:09.278396" elapsed="0.000739"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:10:09.280340" level="INFO">${encoded} = 17830</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-08-23T02:10:09.279774" elapsed="0.000608"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:10:09.280510" elapsed="0.000039"/>
</return>
<msg time="2026-08-23T02:10:09.280760" level="INFO">${encoded_value} = 17830</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-08-23T02:10:09.279320" elapsed="0.001466"/>
</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-08-23T02:10:09.280954" elapsed="0.000531"/>
</kw>
<var name="${key}">DEVICE_PORT</var>
<var name="${value}">17830</var>
<status status="PASS" start="2026-08-23T02:10:09.278265" elapsed="0.003263"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:10:09.282345" level="INFO">${value} = admin</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:10:09.281786" elapsed="0.000586"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:10:09.283552" level="INFO">${encoded} = admin</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-08-23T02:10:09.283026" elapsed="0.000568"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:10:09.283720" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T02:10:09.284118" level="INFO">${encoded_value} = admin</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-08-23T02:10:09.282555" elapsed="0.001589"/>
</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-08-23T02:10:09.284292" elapsed="0.000516"/>
</kw>
<var name="${key}">DEVICE_USER</var>
<var name="${value}">admin</var>
<status status="PASS" start="2026-08-23T02:10:09.281656" elapsed="0.003210"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:10:09.285667" level="INFO">${value} = topsecret</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:10:09.285111" elapsed="0.000582"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:10:09.286938" level="INFO">${encoded} = topsecret</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-08-23T02:10:09.286401" elapsed="0.000579"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:10:09.287105" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T02:10:09.287342" level="INFO">${encoded_value} = topsecret</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-08-23T02:10:09.285947" elapsed="0.001420"/>
</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-08-23T02:10:09.287551" elapsed="0.000603"/>
</kw>
<var name="${key}">DEVICE_PASSWORD</var>
<var name="${value}">topsecret</var>
<status status="PASS" start="2026-08-23T02:10:09.284981" elapsed="0.003215"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:10:09.288986" level="INFO">${value} = device-key</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:10:09.288439" elapsed="0.000573"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:10:09.290351" level="INFO">${encoded} = device-key</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-08-23T02:10:09.289682" elapsed="0.000712"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:10:09.290527" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T02:10:09.290767" level="INFO">${encoded_value} = device-key</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-08-23T02:10:09.289195" elapsed="0.001598"/>
</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-08-23T02:10:09.290956" elapsed="0.000531"/>
</kw>
<var name="${key}">DEVICE_KEY</var>
<var name="${value}">device-key</var>
<status status="PASS" start="2026-08-23T02:10:09.288308" elapsed="0.003222"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:10:09.292393" level="INFO">${value} = /tmp/schema</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:10:09.291771" elapsed="0.000648"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:10:09.293631" level="INFO">${encoded} = /tmp/schema</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-08-23T02:10:09.293074" elapsed="0.000602"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:10:09.293803" elapsed="0.000117"/>
</return>
<msg time="2026-08-23T02:10:09.294145" level="INFO">${encoded_value} = /tmp/schema</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-08-23T02:10:09.292601" elapsed="0.001570"/>
</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-08-23T02:10:09.294319" elapsed="0.000546"/>
</kw>
<var name="${key}">SCHEMA_DIRECTORY</var>
<var name="${value}">/tmp/schema</var>
<status status="PASS" start="2026-08-23T02:10:09.291642" elapsed="0.003268"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:10:09.295808" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:10:09.295154" elapsed="0.000776"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:10:09.297307" level="INFO">${encoded} = /rests</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-08-23T02:10:09.296746" elapsed="0.000604"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:10:09.297474" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T02:10:09.297723" level="INFO">${encoded_value} = /rests</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-08-23T02:10:09.296119" elapsed="0.001629"/>
</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-08-23T02:10:09.297981" elapsed="0.000518"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-23T02:10:09.295023" elapsed="0.003518"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-23T02:10:09.268711" elapsed="0.029864"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-23T02:10:09.298619" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:10:09.298778" level="INFO">${mapping_to_use} = {'DEVICE_IP': '10.30.170.120', 'DEVICE_NAME': 'netconf-test-device', 'DEVICE_PORT': '17830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'topsecret', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/t...</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-23T02:10:09.267488" elapsed="0.031315"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:09.267180" elapsed="0.031670"/>
</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-08-23T02:10:09.299022" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:09.298878" elapsed="0.000199"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:09.267159" elapsed="0.031938"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:10:09.300012" level="INFO">${final_text} = /rests/operations/netconf-node-topology:delete-device</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-08-23T02:10:09.299234" elapsed="0.000805"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T02:10:09.300089" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device/${file_name}.</doc>
<status status="PASS" start="2026-08-23T02:10:09.263410" elapsed="0.036807"/>
</kw>
<msg time="2026-08-23T02:10:09.300270" 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-08-23T02:10:09.250757" elapsed="0.049623"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:09.312764" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:09.325304" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:09.337553" 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-08-23T02:10:09.337764" 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-08-23T02:10:09.337952" 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-08-23T02:10:09.338317" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:09.338176" elapsed="0.000197"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:09.338161" 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-08-23T02:10:09.338530" 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-08-23T02:10:09.338690" 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-08-23T02:10:09.338863" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T02:10:09.338133" elapsed="0.000785"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T02:10:09.338032" 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-08-23T02:10:09.339085" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:09.339160" elapsed="0.000015"/>
</return>
<msg time="2026-08-23T02:10:09.339271" level="INFO">${uri} = /rests/operations/netconf-node-topology:delete-device</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-08-23T02:10:09.246494" elapsed="0.092802"/>
</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-08-23T02:10:09.363885" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device.vanadium/post_data.xml</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:09.363472" elapsed="0.000448"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T02:10:09.364649" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/rpc-delete-device.vanadium/post_data.xml' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-23T02:10:09.364419" elapsed="0.000300">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/rpc-delete-device.vanadium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-08-23T02:10:09.364869" 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-08-23T02:10:09.364083" elapsed="0.000813"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:10:09.365458" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device/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-08-23T02:10:09.365068" elapsed="0.000417"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:10:09.365810" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/rpc-delete-device/post_data.xml"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/rpc-delete-device/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:10:09.365975" level="INFO">${template} = &lt;input xmlns="urn:opendaylight:netconf-node-topology"&gt;
   &lt;node-id&gt;$DEVICE_NAME&lt;/node-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-08-23T02:10:09.365643" elapsed="0.000361"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:09.366410" level="INFO">&lt;input xmlns="urn:opendaylight:netconf-node-topology"&gt;
   &lt;node-id&gt;$DEVICE_NAME&lt;/node-id&gt;
 &lt;/input&gt;
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:09.366160" 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-08-23T02:10:09.366815" elapsed="0.000042"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:09.366525" elapsed="0.000368"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:09.369616" level="INFO">${mapping_to_use} = {'DEVICE_IP': '10.30.170.120', 'DEVICE_NAME': 'netconf-test-device', 'DEVICE_PORT': '17830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'topsecret', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/t...</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-08-23T02:10:09.367097" elapsed="0.002549"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:09.366919" elapsed="0.002764"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:09.366506" elapsed="0.003201"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:10:09.370585" level="INFO">${final_text} = &lt;input xmlns="urn:opendaylight:netconf-node-topology"&gt;
   &lt;node-id&gt;netconf-test-device&lt;/node-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-08-23T02:10:09.369891" elapsed="0.000724"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T02:10:09.370667" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device/${file_name}.</doc>
<status status="PASS" start="2026-08-23T02:10:09.362828" elapsed="0.007967"/>
</kw>
<msg time="2026-08-23T02:10:09.370866" 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-08-23T02:10:09.350185" elapsed="0.020732"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:09.383525" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:09.396168" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:09.408901" 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-08-23T02:10:09.409098" 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-08-23T02:10:09.409309" 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-08-23T02:10:09.409686" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:09.409535" elapsed="0.000211"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:09.409520" 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-08-23T02:10:09.409945" 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-08-23T02:10:09.410114" 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-08-23T02:10:09.410278" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T02:10:09.409491" elapsed="0.000841"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T02:10:09.409387" 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-08-23T02:10:09.410501" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:09.410576" elapsed="0.000015"/>
</return>
<msg time="2026-08-23T02:10:09.410704" level="INFO">${data} = &lt;input xmlns="urn:opendaylight:netconf-node-topology"&gt;
   &lt;node-id&gt;netconf-test-device&lt;/node-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-08-23T02:10:09.349299" elapsed="0.061433"/>
</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-08-23T02:10:09.412027" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/rpc-delete-device/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-08-23T02:10:09.411761" elapsed="0.000341">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/rpc-delete-device/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-23T02:10:09.412196" 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-08-23T02:10:09.411408" elapsed="0.000812"/>
</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-08-23T02:10:09.412536" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:09.412291" elapsed="0.000303"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:09.413124" 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-08-23T02:10:09.412804" elapsed="0.000346"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:09.412618" elapsed="0.000567"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:09.412272" elapsed="0.000935"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:10:09.415593" 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-08-23T02:10:09.413357" elapsed="0.002263"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-23T02:10:09.415673" elapsed="0.000035"/>
</return>
<msg time="2026-08-23T02:10:09.415856" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-23T02:10:09.411085" elapsed="0.004799"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:09.417427" level="INFO">/rests/operations/netconf-node-topology:delete-device</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:09.417176" elapsed="0.000297"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:09.417908" level="INFO">&lt;input xmlns="urn:opendaylight:netconf-node-topology"&gt;
   &lt;node-id&gt;netconf-test-device&lt;/node-id&gt;
 &lt;/input&gt;</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:09.417622" elapsed="0.000334"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:09.418355" 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-08-23T02:10:09.418109" elapsed="0.000291"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:09.418800" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:09.418548" elapsed="0.000313"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-08-23T02:10:09.419671" 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-08-23T02:10:09.419474" elapsed="0.000267"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-08-23T02:10:09.420116" 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-08-23T02:10:09.419927" 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-08-23T02:10:09.420291" elapsed="0.000203"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:09.420931" 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-08-23T02:10:09.420652" elapsed="0.000325"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-08-23T02:10:09.421021" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:10:09.421179" 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-08-23T02:10:09.419069" elapsed="0.002135"/>
</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">
<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="NOT RUN" start="2026-08-23T02:10:09.464737" elapsed="0.000069"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:09.421275" elapsed="0.043696"/>
</branch>
<branch type="ELSE">
<kw name="POST On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:09.478638" level="INFO">POST Request : url=http://10.30.170.114:8181/rests/operations/netconf-node-topology:delete-device 
 path_url=/rests/operations/netconf-node-topology:delete-device 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Content-Length': '106', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="urn:opendaylight:netconf-node-topology"&gt;
   &lt;node-id&gt;netconf-test-device&lt;/node-id&gt;
 &lt;/input&gt; 
 </msg>
<msg time="2026-08-23T02:10:09.478765" level="INFO">POST Response : url=http://10.30.170.114:8181/rests/operations/netconf-node-topology:delete-device 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:09.479087" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-node-topology:delete-device</msg>
<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="FAIL" start="2026-08-23T02:10:09.473085" elapsed="0.006940">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-node-topology:delete-device</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:09.465041" elapsed="0.015196">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-node-topology:delete-device</status>
</branch>
<status status="FAIL" start="2026-08-23T02:10:09.421257" elapsed="0.059057">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-node-topology:delete-device</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:09.481272" elapsed="0.000066"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:09.481612" elapsed="0.000035"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:09.481517" elapsed="0.000198"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:09.481475" elapsed="0.000292"/>
</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-08-23T02:10:09.482237" elapsed="0.000043"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:09.482348" elapsed="0.000021"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>content_type=${content_type}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>POST data to given URI, check status code and return response text.
${content_type} and ${accept} are mandatory Python objects with headers to use.
If ${normalize_json}, normalize text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:10:09.416218" elapsed="0.066283">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-node-topology:delete-device</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:09.482615" elapsed="0.000021"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>extension=xml</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>content_type=${HEADERS_XML}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>endline=${\n}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve URI and data from folder, call Post_To_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:09.235286" elapsed="0.247461">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-node-topology:delete-device</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=response</arg>
<arg>mapping=${mapping}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:09.483270" elapsed="0.000045"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:09.482954" elapsed="0.000440"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:09.482925" elapsed="0.000514"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:09.483584" elapsed="0.000028"/>
</return>
<arg>folder=${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Add arguments sensible for XML data, return Post_Templated response text.
Optionally, verification against response.xml (no iteration) is called.</doc>
<status status="FAIL" start="2026-08-23T02:10:09.232569" elapsed="0.251196">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-node-topology:delete-device</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:09.232260" elapsed="0.251652">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-node-topology:delete-device</status>
</branch>
<branch type="ELSE">
<kw name="Put_As_Xml_Templated" owner="TemplatedRequests">
<arg>folder=${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Add arguments sensible for XML data, return Put_Templated response text.
Optionally, verification against response.xml (no iteration) is called.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:09.484347" elapsed="0.000038"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:09.483968" elapsed="0.000478"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:09.232241" elapsed="0.252238">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-node-topology:delete-device</status>
</if>
<kw name="Set To Dictionary" owner="Collections">
<arg>${NetconfKeywords__mounted_device_types}</arg>
<arg>${device_name}</arg>
<arg>${device_type}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:09.484693" elapsed="0.000030"/>
</kw>
<arg>${device_name}</arg>
<arg>device_type=${device_type_rpc_delete}</arg>
<arg>http_timeout=2</arg>
<arg>http_method=post</arg>
<doc>Tell Netconf about the specified device so it can add it into its configuration.</doc>
<status status="FAIL" start="2026-08-23T02:10:09.211545" elapsed="0.273330">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-node-topology:delete-device</status>
</kw>
<doc>Make request to deconfigure the testtool device on Netconf connector.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-08-23T02:10:09.127101" elapsed="0.358005">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-node-topology:delete-device</status>
</test>
<test id="s1-s4-s1-t29" name="Check_Device_Going_To_Be_Gone_After_Deconfiguring" line="245">
<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-08-23T02:10:09.490855" elapsed="0.000337"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:10:09.490472" elapsed="0.000776"/>
</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-08-23T02:10:09.492278" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:09.492159" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:09.492139" elapsed="0.000207"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:10:09.497451" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:09.497343" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:09.497325" elapsed="0.000195"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:10:09.498560" 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-08-23T02:10:09.498160" elapsed="0.000427"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:10:09.499063" 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-08-23T02:10:09.498746" elapsed="0.000344"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:10:09.499135" elapsed="0.000032"/>
</return>
<msg time="2026-08-23T02:10:09.499294" 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-08-23T02:10:09.497741" 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-08-23T02:10:09.504773" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:09.504665" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:09.504646" elapsed="0.000211"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:10:09.506279" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:09.506171" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:09.506151" elapsed="0.000196"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:10:09.506910" 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-08-23T02:10:09.506491" elapsed="0.000446"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:10:09.507359" 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-08-23T02:10:09.507094" elapsed="0.000291"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:10:09.541790" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:10:09.507958" elapsed="0.034407"/>
</kw>
<msg time="2026-08-23T02:10:09.542782" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:10:09.543011" 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 "n "e "t "c "o "n "f "...</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-08-23T02:10:09.507543" elapsed="0.035557"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:10:09.566104" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "G "o "i "n "g "_ "T "o "_ "B "e "_ "G "o "n "e "_ "A "f "t "e "r "_ "D "e "c "o "n "f "i "g "u "r "i "n "g "[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-08-23T02:10:09.544441" elapsed="0.021863"/>
</kw>
<msg time="2026-08-23T02:10:09.566484" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:10:09.566530" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "G "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-08-23T02:10:09.543478" elapsed="0.023088"/>
</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-08-23T02:10:09.566885" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:09.566642" elapsed="0.000324"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:09.566623" elapsed="0.000367"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:09.567519" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "G "o "i "n "g "_ "T "o "_ "B "e "_ "G "o "n "e "_ "A "f "t "e "r "_ "D "e "c "o "n "f "i "g "u "r "i "n "g "[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-08-23T02:10:09.567132" elapsed="0.000465"/>
</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-08-23T02:10:09.567894" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:09.567663" elapsed="0.000310"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:09.567645" elapsed="0.000352"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:10:09.568031" 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-08-23T02:10:09.571405" elapsed="0.000273"/>
</kw>
<msg time="2026-08-23T02:10:09.571756" 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-08-23T02:10:09.570703" elapsed="0.001196"/>
</kw>
<kw name="Open 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-08-23T02:10:09.573037" elapsed="0.000042"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:09.574178" elapsed="0.000039"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:10:09.568914" elapsed="0.005384"/>
</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-08-23T02:10:09.568301" elapsed="0.006125"/>
</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-08-23T02:10:09.505690" elapsed="0.068835"/>
</kw>
<msg time="2026-08-23T02:10:09.574617" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:10:09.574661" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "G "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-08-23T02:10:09.505008" elapsed="0.069691"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:10:09.575115" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:10:09.574775" elapsed="0.000400"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:09.574756" elapsed="0.000443"/>
</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-08-23T02:10:09.575592" 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-08-23T02:10:09.575943" elapsed="0.000026"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:10:09.576017" 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-08-23T02:10:09.504329" elapsed="0.071794"/>
</kw>
<msg time="2026-08-23T02:10:09.576216" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:10:09.576260" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D "- "R "P "C ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "G "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-08-23T02:10:09.499697" elapsed="0.076599"/>
</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-08-23T02:10:09.576693" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:09.576444" elapsed="0.000303"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:09.576424" elapsed="0.000347"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:10:09.499555" elapsed="0.077239"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:10:09.499376" elapsed="0.077451"/>
</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-08-23T02:10:09.496980" elapsed="0.080047"/>
</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-08-23T02:10:09.491859" elapsed="0.085223"/>
</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-08-23T02:10:09.491402" elapsed="0.085724"/>
</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-08-23T02:10:09.487433" elapsed="0.089745"/>
</kw>
<kw name="Wait_Device_Fully_Removed" owner="NetconfKeywords">
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Completely_Gone" owner="NetconfKeywords">
<kw name="Check_Device_Has_No_Netconf_Connector" owner="NetconfKeywords">
<kw name="Count_Netconf_Connectors_For_Device" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:09.590033" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:09.587794" elapsed="0.002267"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:09.590397" elapsed="0.000022"/>
</kw>
<var name="${nv}"/>
<status status="NOT RUN" start="2026-08-23T02:10:09.590245" elapsed="0.000211"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="NOT RUN" start="2026-08-23T02:10:09.590127" elapsed="0.000355"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:09.590783" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:09.590544" elapsed="0.000312"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:09.591584" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:09.591113" elapsed="0.000498"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:09.590881" elapsed="0.000766"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:09.591849" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:09.591672" elapsed="0.000235"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:09.590527" elapsed="0.001400"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:09.591961" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:10:09.592110" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:10:09.587344" elapsed="0.004792"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:09.592181" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:10:09.592321" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:10:09.586867" elapsed="0.005480"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:09.599559" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:09.599310" elapsed="0.000295"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:09.600014" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:09.599754" elapsed="0.000304"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:09.605807" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:09.605883" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '407'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:10:09.606024" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:10:09.602190" elapsed="0.004299">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:09.600124" elapsed="0.006449">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:09.606757" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:09.606607" elapsed="0.000215"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:09.600105" elapsed="0.006759">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:09.607235" elapsed="0.000025"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:09.607367" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:09.607331" elapsed="0.000078"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:09.607313" elapsed="0.000117"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:09.607567" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:09.607637" elapsed="0.000014"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:10:09.594994" elapsed="0.012749">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:09.607813" elapsed="0.000015"/>
</return>
<var>${mounts}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:09.592558" elapsed="0.015378">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${mounts}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:09.608105" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${actual_count}</var>
<arg>len('''${mounts}'''.split('"node-id": "${device_name}"'))-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:09.608269" elapsed="0.000021"/>
</kw>
<return>
<value>${actual_count}</value>
<status status="NOT RUN" start="2026-08-23T02:10:09.608331" elapsed="0.000015"/>
</return>
<var>${count}</var>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Count all instances of the specified device in the Netconf topology (usually 0 or 1).</doc>
<status status="FAIL" start="2026-08-23T02:10:09.579375" elapsed="0.029054">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${count}</arg>
<arg>0</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:09.608589" elapsed="0.000021"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Check that there are no instances of the specified device in the Netconf topology.</doc>
<status status="FAIL" start="2026-08-23T02:10:09.578926" elapsed="0.029770">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Generate URI" owner="Restconf">
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>config</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="NOT RUN" start="2026-08-23T02:10:09.616076" elapsed="0.000028"/>
</kw>
<kw name="No Content From URI" owner="Utils">
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Issue a Get On Session and return on error 404 (No content) or will fail and log the content.
Issues a Get On Session for ${uri} in default using headers from
{'Content-Type': 'application/json'}. If the request returns a HTTP error, fails. Otherwise
returns the data obtained by the request.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:09.619647" elapsed="0.000027"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device has no Netconf connectors nor associated data.</doc>
<status status="FAIL" start="2026-08-23T02:10:09.578410" elapsed="0.041362">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Check_Device_Completely_Gone" owner="NetconfKeywords">
<kw name="Check_Device_Has_No_Netconf_Connector" owner="NetconfKeywords">
<kw name="Count_Netconf_Connectors_For_Device" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:10.636587" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:10.634406" elapsed="0.002214"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:10.636998" elapsed="0.000023"/>
</kw>
<var name="${nv}"/>
<status status="NOT RUN" start="2026-08-23T02:10:10.636827" elapsed="0.000231"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="NOT RUN" start="2026-08-23T02:10:10.636693" elapsed="0.000394"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:10.637520" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:10.637251" elapsed="0.000327"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:10.638362" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:10.637848" elapsed="0.000542"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:10.637603" elapsed="0.000823"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:10.638616" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:10.638451" elapsed="0.000222"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:10.637229" elapsed="0.001465"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:10.638732" elapsed="0.000037"/>
</return>
<msg time="2026-08-23T02:10:10.638919" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:10:10.633926" elapsed="0.005019"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:10.638995" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:10:10.639141" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:10:10.633405" elapsed="0.005762"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:10.646559" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:10.646299" elapsed="0.000308"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:10.647024" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:10.646760" elapsed="0.000308"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:10.653569" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:10.653627" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '407'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:10:10.653743" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:10:10.649234" elapsed="0.004926">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:10.647134" elapsed="0.007110">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:10.654429" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:10.654278" elapsed="0.000216"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:10.647116" elapsed="0.007401">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:10.654908" elapsed="0.000027"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:10.655043" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:10.655005" elapsed="0.000080"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:10.654988" elapsed="0.000119"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:10.655247" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:10.655317" elapsed="0.000016"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:10:10.641815" elapsed="0.013609">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:10.655532" elapsed="0.000017"/>
</return>
<var>${mounts}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:10.639386" elapsed="0.016247">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${mounts}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:10.655857" elapsed="0.000023"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${actual_count}</var>
<arg>len('''${mounts}'''.split('"node-id": "${device_name}"'))-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:10.656027" elapsed="0.000021"/>
</kw>
<return>
<value>${actual_count}</value>
<status status="NOT RUN" start="2026-08-23T02:10:10.656090" elapsed="0.000016"/>
</return>
<var>${count}</var>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Count all instances of the specified device in the Netconf topology (usually 0 or 1).</doc>
<status status="FAIL" start="2026-08-23T02:10:10.623022" elapsed="0.033169">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${count}</arg>
<arg>0</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:10.656352" elapsed="0.000021"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Check that there are no instances of the specified device in the Netconf topology.</doc>
<status status="FAIL" start="2026-08-23T02:10:10.621963" elapsed="0.034519">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Generate URI" owner="Restconf">
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>config</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="NOT RUN" start="2026-08-23T02:10:10.666047" elapsed="0.000027"/>
</kw>
<kw name="No Content From URI" owner="Utils">
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Issue a Get On Session and return on error 404 (No content) or will fail and log the content.
Issues a Get On Session for ${uri} in default using headers from
{'Content-Type': 'application/json'}. If the request returns a HTTP error, fails. Otherwise
returns the data obtained by the request.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:10.669618" elapsed="0.000027"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device has no Netconf connectors nor associated data.</doc>
<status status="FAIL" start="2026-08-23T02:10:10.620563" elapsed="0.049179">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Check_Device_Completely_Gone" owner="NetconfKeywords">
<kw name="Check_Device_Has_No_Netconf_Connector" owner="NetconfKeywords">
<kw name="Count_Netconf_Connectors_For_Device" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:11.687009" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:11.684812" elapsed="0.002229"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:11.687398" elapsed="0.000022"/>
</kw>
<var name="${nv}"/>
<status status="NOT RUN" start="2026-08-23T02:10:11.687244" elapsed="0.000211"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="NOT RUN" start="2026-08-23T02:10:11.687113" elapsed="0.000370"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:11.687816" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:11.687554" elapsed="0.000336"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:11.688621" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:11.688144" elapsed="0.000504"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:11.687914" elapsed="0.000770"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:11.688885" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:11.688709" elapsed="0.000233"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:11.687534" elapsed="0.001429"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:11.689000" elapsed="0.000035"/>
</return>
<msg time="2026-08-23T02:10:11.689190" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:10:11.684333" elapsed="0.004884"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:11.689265" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:10:11.689411" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:10:11.683822" elapsed="0.005615"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:11.696641" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:11.696384" elapsed="0.000304"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:11.697115" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:11.696851" elapsed="0.000382"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:11.703379" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:11.703436" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '407'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:10:11.703547" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:10:11.699396" elapsed="0.004558">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:11.697302" elapsed="0.006735">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:11.704220" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:11.704071" elapsed="0.000216"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:11.697283" elapsed="0.007027">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:11.704676" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:11.704809" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:11.704772" elapsed="0.000097"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:11.704754" elapsed="0.000137"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:11.705031" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:11.705144" elapsed="0.000016"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:10:11.692067" elapsed="0.013185">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:11.705322" elapsed="0.000016"/>
</return>
<var>${mounts}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:11.689653" elapsed="0.015766">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${mounts}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:11.705584" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${actual_count}</var>
<arg>len('''${mounts}'''.split('"node-id": "${device_name}"'))-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:11.705749" elapsed="0.000021"/>
</kw>
<return>
<value>${actual_count}</value>
<status status="NOT RUN" start="2026-08-23T02:10:11.705813" elapsed="0.000015"/>
</return>
<var>${count}</var>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Count all instances of the specified device in the Netconf topology (usually 0 or 1).</doc>
<status status="FAIL" start="2026-08-23T02:10:11.673001" elapsed="0.032935">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${count}</arg>
<arg>0</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:11.706113" elapsed="0.000027"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Check that there are no instances of the specified device in the Netconf topology.</doc>
<status status="FAIL" start="2026-08-23T02:10:11.671949" elapsed="0.034331">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Generate URI" owner="Restconf">
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>config</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="NOT RUN" start="2026-08-23T02:10:11.716107" elapsed="0.000029"/>
</kw>
<kw name="No Content From URI" owner="Utils">
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Issue a Get On Session and return on error 404 (No content) or will fail and log the content.
Issues a Get On Session for ${uri} in default using headers from
{'Content-Type': 'application/json'}. If the request returns a HTTP error, fails. Otherwise
returns the data obtained by the request.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:11.719667" elapsed="0.000026"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device has no Netconf connectors nor associated data.</doc>
<status status="FAIL" start="2026-08-23T02:10:11.670547" elapsed="0.049277">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Check_Device_Completely_Gone" owner="NetconfKeywords">
<kw name="Check_Device_Has_No_Netconf_Connector" owner="NetconfKeywords">
<kw name="Count_Netconf_Connectors_For_Device" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:12.738210" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:12.736037" elapsed="0.002206"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:12.738632" elapsed="0.000022"/>
</kw>
<var name="${nv}"/>
<status status="NOT RUN" start="2026-08-23T02:10:12.738475" elapsed="0.000216"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="NOT RUN" start="2026-08-23T02:10:12.738316" elapsed="0.000405"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:12.739082" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:12.738795" elapsed="0.000346"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:12.739891" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:12.739397" elapsed="0.000522"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:12.739167" elapsed="0.000788"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:12.740149" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:12.739980" elapsed="0.000225"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:12.738775" elapsed="0.001451"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:12.740266" elapsed="0.000038"/>
</return>
<msg time="2026-08-23T02:10:12.740430" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:10:12.735545" elapsed="0.004912"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:12.740505" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:10:12.740648" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:10:12.735050" elapsed="0.005624"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:12.748105" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:12.747828" elapsed="0.000323"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:12.748550" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:12.748304" elapsed="0.000290"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:12.754997" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:12.755053" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '407'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:10:12.755195" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:10:12.750722" elapsed="0.005006">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:12.748659" elapsed="0.007206">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:12.756126" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:12.755919" elapsed="0.000299"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:12.748640" elapsed="0.007610">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:12.756762" elapsed="0.000128"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:12.757049" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:12.756997" elapsed="0.000112"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:12.756971" elapsed="0.000168"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:12.757337" elapsed="0.000030"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:12.757435" elapsed="0.000021"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:10:12.743323" elapsed="0.014262">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:12.757684" elapsed="0.000022"/>
</return>
<var>${mounts}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:12.740905" elapsed="0.016917">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${mounts}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:12.758088" elapsed="0.000030"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${actual_count}</var>
<arg>len('''${mounts}'''.split('"node-id": "${device_name}"'))-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:12.758318" elapsed="0.000029"/>
</kw>
<return>
<value>${actual_count}</value>
<status status="NOT RUN" start="2026-08-23T02:10:12.758424" elapsed="0.000022"/>
</return>
<var>${count}</var>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Count all instances of the specified device in the Netconf topology (usually 0 or 1).</doc>
<status status="FAIL" start="2026-08-23T02:10:12.723109" elapsed="0.035460">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${count}</arg>
<arg>0</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:12.758793" elapsed="0.000030"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Check that there are no instances of the specified device in the Netconf topology.</doc>
<status status="FAIL" start="2026-08-23T02:10:12.722017" elapsed="0.036951">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Generate URI" owner="Restconf">
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>config</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="NOT RUN" start="2026-08-23T02:10:12.768503" elapsed="0.000027"/>
</kw>
<kw name="No Content From URI" owner="Utils">
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Issue a Get On Session and return on error 404 (No content) or will fail and log the content.
Issues a Get On Session for ${uri} in default using headers from
{'Content-Type': 'application/json'}. If the request returns a HTTP error, fails. Otherwise
returns the data obtained by the request.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:12.772052" elapsed="0.000026"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device has no Netconf connectors nor associated data.</doc>
<status status="FAIL" start="2026-08-23T02:10:12.720629" elapsed="0.051550">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Check_Device_Completely_Gone" owner="NetconfKeywords">
<kw name="Check_Device_Has_No_Netconf_Connector" owner="NetconfKeywords">
<kw name="Count_Netconf_Connectors_For_Device" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:13.790112" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:13.787974" elapsed="0.002171"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:13.790503" elapsed="0.000022"/>
</kw>
<var name="${nv}"/>
<status status="NOT RUN" start="2026-08-23T02:10:13.790349" elapsed="0.000212"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="NOT RUN" start="2026-08-23T02:10:13.790217" elapsed="0.000372"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:13.790938" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:13.790661" elapsed="0.000336"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:13.791755" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:13.791250" elapsed="0.000532"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:13.791022" elapsed="0.000796"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:13.792022" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:13.791859" elapsed="0.000219"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:13.790641" elapsed="0.001457"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:13.792211" elapsed="0.000040"/>
</return>
<msg time="2026-08-23T02:10:13.792378" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:10:13.787459" elapsed="0.004945"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:13.792452" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:10:13.792593" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:10:13.786768" elapsed="0.005850"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:13.799886" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:13.799592" elapsed="0.000342"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:13.800327" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:13.800084" elapsed="0.000287"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:13.806865" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:13.806922" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '407'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:10:13.807035" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:10:13.802504" elapsed="0.004919">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:13.800436" elapsed="0.007071">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:13.807716" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:13.807540" elapsed="0.000244"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:13.800418" elapsed="0.007389">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:13.808201" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:13.808375" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:13.808320" elapsed="0.000116"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:13.808292" elapsed="0.000174"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:13.808659" elapsed="0.000031"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:13.808756" elapsed="0.000021"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:10:13.795257" elapsed="0.013681">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:13.809039" elapsed="0.000022"/>
</return>
<var>${mounts}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:13.792853" elapsed="0.016323">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${mounts}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:13.809407" elapsed="0.000030"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${actual_count}</var>
<arg>len('''${mounts}'''.split('"node-id": "${device_name}"'))-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:13.809636" elapsed="0.000028"/>
</kw>
<return>
<value>${actual_count}</value>
<status status="NOT RUN" start="2026-08-23T02:10:13.809723" elapsed="0.000020"/>
</return>
<var>${count}</var>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Count all instances of the specified device in the Netconf topology (usually 0 or 1).</doc>
<status status="FAIL" start="2026-08-23T02:10:13.775394" elapsed="0.034493">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${count}</arg>
<arg>0</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:13.810170" elapsed="0.000030"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Check that there are no instances of the specified device in the Netconf topology.</doc>
<status status="FAIL" start="2026-08-23T02:10:13.774367" elapsed="0.035957">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Generate URI" owner="Restconf">
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>config</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="NOT RUN" start="2026-08-23T02:10:13.819472" elapsed="0.000028"/>
</kw>
<kw name="No Content From URI" owner="Utils">
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Issue a Get On Session and return on error 404 (No content) or will fail and log the content.
Issues a Get On Session for ${uri} in default using headers from
{'Content-Type': 'application/json'}. If the request returns a HTTP error, fails. Otherwise
returns the data obtained by the request.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:13.823017" elapsed="0.000026"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device has no Netconf connectors nor associated data.</doc>
<status status="FAIL" start="2026-08-23T02:10:13.773032" elapsed="0.050112">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Check_Device_Completely_Gone" owner="NetconfKeywords">
<kw name="Check_Device_Has_No_Netconf_Connector" owner="NetconfKeywords">
<kw name="Count_Netconf_Connectors_For_Device" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:14.841021" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:14.838821" elapsed="0.002235"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:14.841428" elapsed="0.000022"/>
</kw>
<var name="${nv}"/>
<status status="NOT RUN" start="2026-08-23T02:10:14.841272" elapsed="0.000215"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="NOT RUN" start="2026-08-23T02:10:14.841135" elapsed="0.000383"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:14.841871" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:14.841594" elapsed="0.000337"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:14.842657" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:14.842186" elapsed="0.000498"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:14.841957" elapsed="0.000762"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:14.842927" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:14.842744" elapsed="0.000239"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:14.841573" elapsed="0.001431"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:14.843044" elapsed="0.000039"/>
</return>
<msg time="2026-08-23T02:10:14.843209" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:10:14.838343" elapsed="0.004891"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:14.843281" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:10:14.843423" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:10:14.837823" elapsed="0.005624"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:14.850850" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:14.850575" elapsed="0.000324"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:14.851297" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:14.851052" elapsed="0.000288"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:14.857858" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:14.857917" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '407'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:10:14.858088" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:10:14.853476" elapsed="0.005003">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:14.851405" elapsed="0.007156">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:14.858752" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:14.858595" elapsed="0.000222"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:14.851387" elapsed="0.007475">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:14.859235" elapsed="0.000027"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:14.859368" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:14.859331" elapsed="0.000080"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:14.859314" elapsed="0.000118"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:14.859571" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:14.859641" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:10:14.846110" elapsed="0.013639">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:14.859820" elapsed="0.000039"/>
</return>
<var>${mounts}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:14.843660" elapsed="0.016285">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${mounts}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:14.860111" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${actual_count}</var>
<arg>len('''${mounts}'''.split('"node-id": "${device_name}"'))-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:14.860281" elapsed="0.000020"/>
</kw>
<return>
<value>${actual_count}</value>
<status status="NOT RUN" start="2026-08-23T02:10:14.860344" elapsed="0.000015"/>
</return>
<var>${count}</var>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Count all instances of the specified device in the Netconf topology (usually 0 or 1).</doc>
<status status="FAIL" start="2026-08-23T02:10:14.826578" elapsed="0.033863">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${count}</arg>
<arg>0</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:14.860602" elapsed="0.000021"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Check that there are no instances of the specified device in the Netconf topology.</doc>
<status status="FAIL" start="2026-08-23T02:10:14.825502" elapsed="0.035208">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Generate URI" owner="Restconf">
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>config</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="NOT RUN" start="2026-08-23T02:10:14.870327" elapsed="0.000027"/>
</kw>
<kw name="No Content From URI" owner="Utils">
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Issue a Get On Session and return on error 404 (No content) or will fail and log the content.
Issues a Get On Session for ${uri} in default using headers from
{'Content-Type': 'application/json'}. If the request returns a HTTP error, fails. Otherwise
returns the data obtained by the request.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:14.873875" elapsed="0.000027"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device has no Netconf connectors nor associated data.</doc>
<status status="FAIL" start="2026-08-23T02:10:14.823998" elapsed="0.050000">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Check_Device_Completely_Gone" owner="NetconfKeywords">
<kw name="Check_Device_Has_No_Netconf_Connector" owner="NetconfKeywords">
<kw name="Count_Netconf_Connectors_For_Device" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:15.894375" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:15.892151" elapsed="0.002257"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:15.894761" elapsed="0.000022"/>
</kw>
<var name="${nv}"/>
<status status="NOT RUN" start="2026-08-23T02:10:15.894605" elapsed="0.000215"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="NOT RUN" start="2026-08-23T02:10:15.894477" elapsed="0.000376"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:15.895280" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:15.895016" elapsed="0.000321"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:15.896091" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:15.895593" elapsed="0.000526"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:15.895362" elapsed="0.000793"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:15.896342" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:15.896180" elapsed="0.000218"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:15.894993" elapsed="0.001426"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:15.896455" elapsed="0.000038"/>
</return>
<msg time="2026-08-23T02:10:15.896671" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:10:15.891642" elapsed="0.005056"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:15.896746" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:10:15.896912" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:10:15.891118" elapsed="0.005820"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:15.904355" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:15.904096" elapsed="0.000307"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:15.904827" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:15.904556" elapsed="0.000333"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:15.911081" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:15.911139" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '407'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:10:15.911258" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:10:15.907010" elapsed="0.004633">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:15.904957" elapsed="0.006769">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:15.911935" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:15.911761" elapsed="0.000239"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:15.904939" elapsed="0.007085">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:15.912395" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:15.912528" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:15.912491" elapsed="0.000079"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:15.912473" elapsed="0.000118"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:15.912728" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:15.912800" elapsed="0.000016"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:10:15.899748" elapsed="0.013188">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:15.913076" elapsed="0.000017"/>
</return>
<var>${mounts}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:15.897158" elapsed="0.016019">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${mounts}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:15.913400" elapsed="0.000037"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${actual_count}</var>
<arg>len('''${mounts}'''.split('"node-id": "${device_name}"'))-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:15.913641" elapsed="0.000028"/>
</kw>
<return>
<value>${actual_count}</value>
<status status="NOT RUN" start="2026-08-23T02:10:15.913727" elapsed="0.000021"/>
</return>
<var>${count}</var>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Count all instances of the specified device in the Netconf topology (usually 0 or 1).</doc>
<status status="FAIL" start="2026-08-23T02:10:15.877326" elapsed="0.036567">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${count}</arg>
<arg>0</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:15.914118" elapsed="0.000029"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Check that there are no instances of the specified device in the Netconf topology.</doc>
<status status="FAIL" start="2026-08-23T02:10:15.876274" elapsed="0.037994">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Generate URI" owner="Restconf">
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>config</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="NOT RUN" start="2026-08-23T02:10:15.924090" elapsed="0.000030"/>
</kw>
<kw name="No Content From URI" owner="Utils">
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Issue a Get On Session and return on error 404 (No content) or will fail and log the content.
Issues a Get On Session for ${uri} in default using headers from
{'Content-Type': 'application/json'}. If the request returns a HTTP error, fails. Otherwise
returns the data obtained by the request.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:15.927618" elapsed="0.000027"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device has no Netconf connectors nor associated data.</doc>
<status status="FAIL" start="2026-08-23T02:10:15.874802" elapsed="0.052941">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Check_Device_Completely_Gone" owner="NetconfKeywords">
<kw name="Check_Device_Has_No_Netconf_Connector" owner="NetconfKeywords">
<kw name="Count_Netconf_Connectors_For_Device" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:16.949238" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:16.946277" elapsed="0.002995"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:16.949648" elapsed="0.000022"/>
</kw>
<var name="${nv}"/>
<status status="NOT RUN" start="2026-08-23T02:10:16.949491" elapsed="0.000215"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="NOT RUN" start="2026-08-23T02:10:16.949352" elapsed="0.000387"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:16.950097" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:16.949814" elapsed="0.000340"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:16.950908" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:16.950409" elapsed="0.000527"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:16.950180" elapsed="0.000791"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:16.951161" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:16.950996" elapsed="0.000220"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:16.949794" elapsed="0.001443"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:16.951277" elapsed="0.000040"/>
</return>
<msg time="2026-08-23T02:10:16.951442" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:10:16.945588" elapsed="0.005879"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:16.951514" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:10:16.951671" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:10:16.944694" elapsed="0.007003"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:16.959157" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:16.958888" elapsed="0.000319"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:16.959613" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:16.959365" elapsed="0.000366"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:16.966254" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:16.966312" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '407'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:10:16.966428" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:10:16.961895" elapsed="0.004931">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:16.959799" elapsed="0.007134">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:16.967116" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:16.966967" elapsed="0.000213"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:16.959780" elapsed="0.007424">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:16.967574" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:16.967707" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:16.967670" elapsed="0.000079"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:16.967653" elapsed="0.000117"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:16.967928" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:16.968000" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:10:16.954373" elapsed="0.013734">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:16.968176" elapsed="0.000015"/>
</return>
<var>${mounts}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:16.951935" elapsed="0.016337">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${mounts}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:16.968436" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${actual_count}</var>
<arg>len('''${mounts}'''.split('"node-id": "${device_name}"'))-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:16.968599" elapsed="0.000020"/>
</kw>
<return>
<value>${actual_count}</value>
<status status="NOT RUN" start="2026-08-23T02:10:16.968676" elapsed="0.000015"/>
</return>
<var>${count}</var>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Count all instances of the specified device in the Netconf topology (usually 0 or 1).</doc>
<status status="FAIL" start="2026-08-23T02:10:16.931442" elapsed="0.037332">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${count}</arg>
<arg>0</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:16.968953" elapsed="0.000022"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Check that there are no instances of the specified device in the Netconf topology.</doc>
<status status="FAIL" start="2026-08-23T02:10:16.930241" elapsed="0.038821">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Generate URI" owner="Restconf">
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>config</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="NOT RUN" start="2026-08-23T02:10:16.976238" elapsed="0.000027"/>
</kw>
<kw name="No Content From URI" owner="Utils">
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Issue a Get On Session and return on error 404 (No content) or will fail and log the content.
Issues a Get On Session for ${uri} in default using headers from
{'Content-Type': 'application/json'}. If the request returns a HTTP error, fails. Otherwise
returns the data obtained by the request.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:16.979800" elapsed="0.000027"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device has no Netconf connectors nor associated data.</doc>
<status status="FAIL" start="2026-08-23T02:10:16.928762" elapsed="0.051213">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Check_Device_Completely_Gone" owner="NetconfKeywords">
<kw name="Check_Device_Has_No_Netconf_Connector" owner="NetconfKeywords">
<kw name="Count_Netconf_Connectors_For_Device" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:17.997470" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:17.995300" elapsed="0.002203"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:17.997880" elapsed="0.000024"/>
</kw>
<var name="${nv}"/>
<status status="NOT RUN" start="2026-08-23T02:10:17.997709" elapsed="0.000232"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="NOT RUN" start="2026-08-23T02:10:17.997576" elapsed="0.000396"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:17.998315" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:17.998046" elapsed="0.000327"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:17.999126" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:17.998628" elapsed="0.000525"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:17.998400" elapsed="0.000790"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:17.999378" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:17.999215" elapsed="0.000218"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:17.998025" elapsed="0.001428"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:17.999493" elapsed="0.000042"/>
</return>
<msg time="2026-08-23T02:10:17.999660" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:10:17.994808" elapsed="0.004879"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:17.999733" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:10:17.999891" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:10:17.994316" elapsed="0.005602"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:18.007219" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:18.006956" elapsed="0.000312"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:18.007669" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:18.007423" elapsed="0.000290"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:18.014056" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:18.014112" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '407'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:10:18.014226" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:10:18.009930" elapsed="0.004837">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:18.007779" elapsed="0.007134">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:18.015171" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:18.014962" elapsed="0.000300"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:18.007761" elapsed="0.007534">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:18.015805" elapsed="0.000135"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:18.016099" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:18.016046" elapsed="0.000113"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:18.016020" elapsed="0.000170"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:18.016387" elapsed="0.000030"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:18.016486" elapsed="0.000022"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:10:18.002559" elapsed="0.014082">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:18.016760" elapsed="0.000023"/>
</return>
<var>${mounts}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:18.000135" elapsed="0.016794">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${mounts}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:18.017165" elapsed="0.000030"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${actual_count}</var>
<arg>len('''${mounts}'''.split('"node-id": "${device_name}"'))-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:18.017394" elapsed="0.000028"/>
</kw>
<return>
<value>${actual_count}</value>
<status status="NOT RUN" start="2026-08-23T02:10:18.017483" elapsed="0.000022"/>
</return>
<var>${count}</var>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Count all instances of the specified device in the Netconf topology (usually 0 or 1).</doc>
<status status="FAIL" start="2026-08-23T02:10:17.983190" elapsed="0.034431">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${count}</arg>
<arg>0</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:18.017850" elapsed="0.000048"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Check that there are no instances of the specified device in the Netconf topology.</doc>
<status status="FAIL" start="2026-08-23T02:10:17.982147" elapsed="0.035875">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Generate URI" owner="Restconf">
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>config</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="NOT RUN" start="2026-08-23T02:10:18.027561" elapsed="0.000027"/>
</kw>
<kw name="No Content From URI" owner="Utils">
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Issue a Get On Session and return on error 404 (No content) or will fail and log the content.
Issues a Get On Session for ${uri} in default using headers from
{'Content-Type': 'application/json'}. If the request returns a HTTP error, fails. Otherwise
returns the data obtained by the request.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:18.031159" elapsed="0.000027"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device has no Netconf connectors nor associated data.</doc>
<status status="FAIL" start="2026-08-23T02:10:17.980783" elapsed="0.050501">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Check_Device_Completely_Gone" owner="NetconfKeywords">
<kw name="Check_Device_Has_No_Netconf_Connector" owner="NetconfKeywords">
<kw name="Count_Netconf_Connectors_For_Device" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:19.049616" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:19.047424" elapsed="0.002226"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:19.050030" elapsed="0.000022"/>
</kw>
<var name="${nv}"/>
<status status="NOT RUN" start="2026-08-23T02:10:19.049872" elapsed="0.000217"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="NOT RUN" start="2026-08-23T02:10:19.049723" elapsed="0.000396"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:19.050459" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:19.050193" elapsed="0.000327"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:19.051289" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:19.050789" elapsed="0.000531"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:19.050559" elapsed="0.000796"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:19.051543" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:19.051380" elapsed="0.000219"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:19.050172" elapsed="0.001448"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:19.051779" elapsed="0.000040"/>
</return>
<msg time="2026-08-23T02:10:19.051970" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:10:19.046934" elapsed="0.005062"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:19.052044" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:10:19.052187" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:10:19.046396" elapsed="0.005817"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:19.059648" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:19.059384" elapsed="0.000311"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:19.060114" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:19.059851" elapsed="0.000306"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:19.067171" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:19.067292" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '407'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:10:19.067520" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:10:19.062304" elapsed="0.006029">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:19.060224" elapsed="0.008290">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:19.068972" elapsed="0.000052"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:19.068589" elapsed="0.000532"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:19.060205" elapsed="0.008968">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:19.070069" elapsed="0.000057"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:19.070363" elapsed="0.000031"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:19.070279" elapsed="0.000179"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:19.070241" 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>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:19.070817" elapsed="0.000079"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:19.071006" elapsed="0.000034"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:10:19.054899" elapsed="0.016342">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:19.071423" elapsed="0.000040"/>
</return>
<var>${mounts}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:19.052441" elapsed="0.019205">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${mounts}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:19.072048" elapsed="0.000048"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${actual_count}</var>
<arg>len('''${mounts}'''.split('"node-id": "${device_name}"'))-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:19.072431" elapsed="0.000050"/>
</kw>
<return>
<value>${actual_count}</value>
<status status="NOT RUN" start="2026-08-23T02:10:19.072582" elapsed="0.000033"/>
</return>
<var>${count}</var>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Count all instances of the specified device in the Netconf topology (usually 0 or 1).</doc>
<status status="FAIL" start="2026-08-23T02:10:19.034664" elapsed="0.038144">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${count}</arg>
<arg>0</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:19.073353" elapsed="0.000059"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Check that there are no instances of the specified device in the Netconf topology.</doc>
<status status="FAIL" start="2026-08-23T02:10:19.033596" elapsed="0.040025">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Generate URI" owner="Restconf">
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>config</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="NOT RUN" start="2026-08-23T02:10:19.083798" elapsed="0.000028"/>
</kw>
<kw name="No Content From URI" owner="Utils">
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Issue a Get On Session and return on error 404 (No content) or will fail and log the content.
Issues a Get On Session for ${uri} in default using headers from
{'Content-Type': 'application/json'}. If the request returns a HTTP error, fails. Otherwise
returns the data obtained by the request.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:19.087382" elapsed="0.000027"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device has no Netconf connectors nor associated data.</doc>
<status status="FAIL" start="2026-08-23T02:10:19.032179" elapsed="0.055327">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Check_Device_Completely_Gone" owner="NetconfKeywords">
<kw name="Check_Device_Has_No_Netconf_Connector" owner="NetconfKeywords">
<kw name="Count_Netconf_Connectors_For_Device" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:20.111044" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:20.108771" elapsed="0.002312"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:20.111499" elapsed="0.000023"/>
</kw>
<var name="${nv}"/>
<status status="NOT RUN" start="2026-08-23T02:10:20.111340" elapsed="0.000219"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="NOT RUN" start="2026-08-23T02:10:20.111179" elapsed="0.000416"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:20.111981" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:20.111683" elapsed="0.000384"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:20.112842" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:20.112347" elapsed="0.000538"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:20.112096" elapsed="0.000826"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:20.113118" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:20.112948" elapsed="0.000226"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:20.111659" elapsed="0.001536"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:20.113240" elapsed="0.000048"/>
</return>
<msg time="2026-08-23T02:10:20.113424" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:10:20.108256" elapsed="0.005195"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:20.113500" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:10:20.113643" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:10:20.107534" elapsed="0.006135"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:20.121038" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:20.120752" elapsed="0.000333"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:20.121656" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:20.121406" elapsed="0.000293"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:20.128145" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:20.128202" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '407'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:10:20.128429" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:10:20.123817" elapsed="0.005060">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:20.121765" elapsed="0.007202">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:20.129152" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:20.129001" elapsed="0.000217"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:20.121746" elapsed="0.007496">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:20.129788" elapsed="0.000035"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:20.130009" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:20.129958" elapsed="0.000110"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:20.129932" elapsed="0.000166"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:20.130294" elapsed="0.000031"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:20.130396" elapsed="0.000021"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:10:20.116387" elapsed="0.014164">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:20.130647" elapsed="0.000022"/>
</return>
<var>${mounts}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:20.113909" elapsed="0.016873">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${mounts}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:20.131044" elapsed="0.000031"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${actual_count}</var>
<arg>len('''${mounts}'''.split('"node-id": "${device_name}"'))-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:20.131275" elapsed="0.000028"/>
</kw>
<return>
<value>${actual_count}</value>
<status status="NOT RUN" start="2026-08-23T02:10:20.131361" elapsed="0.000020"/>
</return>
<var>${count}</var>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Count all instances of the specified device in the Netconf topology (usually 0 or 1).</doc>
<status status="FAIL" start="2026-08-23T02:10:20.091613" elapsed="0.039885">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${count}</arg>
<arg>0</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:20.131722" elapsed="0.000029"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Check that there are no instances of the specified device in the Netconf topology.</doc>
<status status="FAIL" start="2026-08-23T02:10:20.090479" elapsed="0.041426">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Generate URI" owner="Restconf">
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>config</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="NOT RUN" start="2026-08-23T02:10:20.140943" elapsed="0.000029"/>
</kw>
<kw name="No Content From URI" owner="Utils">
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Issue a Get On Session and return on error 404 (No content) or will fail and log the content.
Issues a Get On Session for ${uri} in default using headers from
{'Content-Type': 'application/json'}. If the request returns a HTTP error, fails. Otherwise
returns the data obtained by the request.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:20.144501" elapsed="0.000027"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device has no Netconf connectors nor associated data.</doc>
<status status="FAIL" start="2026-08-23T02:10:20.088752" elapsed="0.055905">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<msg time="2026-08-23T02:10:20.144771" level="FAIL">Keyword 'Check_Device_Completely_Gone' failed after retrying for 10 seconds. The last error was: HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${timeout}</arg>
<arg>${period}</arg>
<arg>Check_Device_Completely_Gone</arg>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-08-23T02:10:09.577783" elapsed="10.567102">Keyword 'Check_Device_Completely_Gone' failed after retrying for 10 seconds. The last error was: HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<arg>${device_name}</arg>
<doc>Wait until all netconf connectors for the device with the given name disappear.
Call of Remove_Device_From_Netconf returns before netconf gets
around deleting the device's connector. To ensure the device is
really gone from netconf, use this keyword to make sure all
connectors disappear. If a call to Remove_Device_From_Netconf
is not made before using this keyword, the wait will fail.
Using this keyword is more readable than putting the WUKS below
into a test case.</doc>
<status status="FAIL" start="2026-08-23T02:10:09.577383" elapsed="10.567623">Keyword 'Check_Device_Completely_Gone' failed after retrying for 10 seconds. The last error was: HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<doc>Check that the device is really going to be gone. Fail
if found after one minute. This is an expected behavior as the
delete request is sent to the config subsystem which then triggers
asynchronous destruction of the netconf connector referring to the
device and the device's data. This test makes sure this
asynchronous operation does not take unreasonable amount of time
by making sure that both the netconf connector and the device's
data is gone before reporting success.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-08-23T02:10:09.485591" elapsed="10.659633">Keyword 'Check_Device_Completely_Gone' failed after retrying for 10 seconds. The last error was: HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</test>
<kw name="Teardown_Everything" type="TEARDOWN">
<kw name="Delete All Sessions" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:20.146273" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects</doc>
<status status="PASS" start="2026-08-23T02:10:20.146198" elapsed="0.000183"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Stop_Testtool" owner="NetconfKeywords">
<kw name="Write_Bare_Ctrl_C" owner="RemoteBash">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:10:20.147757" 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-08-23T02:10:20.147442" elapsed="0.000343"/>
</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-08-23T02:10:20.147953" elapsed="0.000284"/>
</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-08-23T02:10:20.147232" elapsed="0.001064"/>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-08-23T02:10:20.486393" level="INFO">[?2004l^C[?2004h[jenkins@releng-19126-54-1-docker-0 ~]&gt;</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="PASS" start="2026-08-23T02:10:20.148451" elapsed="0.338115"/>
</kw>
<kw name="Get File" owner="SSHLibrary">
<msg time="2026-08-23T02:10:20.497863" level="INFO">'testtool--netconf-gate-userfeatures-txt-CRUD-CRUD-RPC.1787450872.25.log' -&gt; '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/testtool--netconf-gate-userfeatures-txt-CRUD-CRUD-RPC.1787450872.25.log'</msg>
<arg>${testtool_log}</arg>
<doc>Downloads file(s) from the remote machine to the local machine.</doc>
<status status="PASS" start="2026-08-23T02:10:20.486893" elapsed="0.011063"/>
</kw>
<doc>Stop testtool and download its log.</doc>
<status status="PASS" start="2026-08-23T02:10:20.146975" elapsed="0.351091"/>
</kw>
<arg>NetconfKeywords.Stop_Testtool</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:10:20.146542" elapsed="0.351595"/>
</kw>
<doc>Teardown the test infrastructure, perform cleanup and release all resources.</doc>
<status status="PASS" start="2026-08-23T02:10:20.145976" elapsed="0.352243"/>
</kw>
<doc>netconf-connector CRUD test suite.

Copyright (c) 2017 Lumina Networks, 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


Perform basic operations (Create, Read, Update and Delete or CRUD) on device
data mounted onto a netconf connector using RPC for node addition and see if
they work.

FIXME: Replace the BuiltIn.Should_[Not_]Contain instances in the test cases
that check the car list related data with calls to keywords of a Resource
aimed at getting interesting pieces of data from the XML files and checking
them against expected data sets. See MDSAL/northbound.robot suite for
additional information.</doc>
<status status="FAIL" start="2026-08-23T02:07:49.160433" elapsed="151.337853"/>
</suite>
<suite id="s1-s4-s2" name="CRUD" source="/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/CRUD.robot">
<kw name="Setup_Everything" 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-08-23T02:10:20.586675" 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-08-23T02:10:20.582334" elapsed="0.004393"/>
</kw>
<doc>Set suite to not fail fast.</doc>
<status status="PASS" start="2026-08-23T02:10:20.582096" elapsed="0.004703"/>
</kw>
<kw name="Setup_Karaf_Keywords" owner="KarafKeywords">
<kw name="ClusterManagement_Setup" owner="ClusterManagement">
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-08-23T02:10:20.591658" 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-08-23T02:10:20.587973" elapsed="0.003713"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-08-23T02:10:20.591947" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:20.591796" elapsed="0.000209"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:20.591753" elapsed="0.000277"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:20.592548" 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-08-23T02:10:20.592185" elapsed="0.000405"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-08-23T02:10:20.593081" 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-08-23T02:10:20.592750" elapsed="0.000357"/>
</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-08-23T02:10:20.593620" elapsed="0.000305"/>
</kw>
<msg time="2026-08-23T02:10:20.594026" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:10:20.594072" 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-08-23T02:10:20.593271" elapsed="0.000824"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:10:20.594640" 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-08-23T02:10:20.594265" elapsed="0.000402"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:10:20.595735" level="INFO">@{member_index_list} = [ ]</msg>
<var>@{member_index_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-08-23T02:10:20.595469" elapsed="0.000293"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:10:20.596210" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-08-23T02:10:20.595950" elapsed="0.000286"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:10:20.596685" 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-08-23T02:10:20.596393" elapsed="0.000318"/>
</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-08-23T02:10:20.599829" elapsed="0.000257"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:20.600576" level="INFO">${member_ip} = 10.30.170.114</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-08-23T02:10:20.600249" elapsed="0.000354"/>
</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-08-23T02:10:20.600758" elapsed="0.000261"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:20.601808" 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-08-23T02:10:20.601515" elapsed="0.000325"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-08-23T02:10:20.601903" elapsed="0.000044"/>
</return>
<msg time="2026-08-23T02:10:20.602075" 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-08-23T02:10:20.601215" elapsed="0.000886"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:20.602882" level="INFO">Creating Session using : alias=ClusterManagement__session_1, url=http://10.30.170.114:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x72b0efb88b90&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-08-23T02:10:20.602259" elapsed="0.000780"/>
</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-08-23T02:10:20.603201" elapsed="0.000254"/>
</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-08-23T02:10:20.599270" elapsed="0.004248"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:10:20.599072" elapsed="0.004490"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="PASS" start="2026-08-23T02:10:20.596780" elapsed="0.006818"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:20.604218" 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-08-23T02:10:20.603762" elapsed="0.000500"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:20.604824" level="INFO">${ClusterManagement__index_to_ip_mapping} = {1: '10.30.170.114'}</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-08-23T02:10:20.604425" elapsed="0.000461"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:20.605429" 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-08-23T02:10:20.605046" elapsed="0.000425"/>
</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-08-23T02:10:20.594955" elapsed="0.010573"/>
</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-08-23T02:10:20.587585" elapsed="0.017999"/>
</kw>
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:10:20.605764" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:20.605650" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:20.605630" elapsed="0.000206"/>
</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-08-23T02:10:20.608921" 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-08-23T02:10:20.608521" elapsed="0.000427"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:10:20.609395" 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-08-23T02:10:20.609103" elapsed="0.000318"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:10:20.609465" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:10:20.609618" 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-08-23T02:10:20.608193" elapsed="0.001450"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:10:20.610686" level="INFO">${member_ip} = 10.30.170.114</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-08-23T02:10:20.610419" elapsed="0.000293"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:10:20.611448" level="INFO">index=8
host=10.30.170.120
alias=None
port=22
timeout=10 seconds
newline=

prompt=&gt;
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-08-23T02:10:20.611550" level="INFO">${current_connection} = index=8
host=10.30.170.120
alias=None
port=22
timeout=10 seconds
newline=

prompt=&gt;
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-08-23T02:10:20.611305" elapsed="0.000272"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:20.615358" elapsed="0.000054"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:20.614601" elapsed="0.000875"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:20.614552" elapsed="0.001003"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:10:20.616268" level="INFO">index=8
host=10.30.170.120
alias=None
port=22
timeout=10 seconds
newline=

prompt=&gt;
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-08-23T02:10:20.616574" level="INFO">${current_ssh_connection} = index=8
host=10.30.170.120
alias=None
port=22
timeout=10 seconds
newline=

prompt=&gt;
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-08-23T02:10:20.615871" elapsed="0.000817"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:20.617709" level="INFO">Attempting to execute command "iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save" on remote system "10.30.170.114" 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-08-23T02:10:20.617049" elapsed="0.001029"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:10:20.619229" level="INFO">${conn_id} = 10</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-08-23T02:10:20.618383" elapsed="0.000962"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-08-23T02:10:20.620909" level="INFO">Length is 0.</msg>
<msg time="2026-08-23T02:10:20.620988" 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-08-23T02:10:20.620615" elapsed="0.000397"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:10:20.621219" elapsed="0.002232"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-08-23T02:10:20.624472" level="INFO">Logging into '10.30.170.114:22' as 'jenkins'.</msg>
<msg time="2026-08-23T02:10:21.228019" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-186-generic x86_64)

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

 System information as of Sun Aug 23 02:10:20 UTC 2026

  System load:  0.04               Processes:             130
  Usage of /:   13.8% of 77.35GB   Users logged in:       1
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.114
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

41 updates can be applied immediately.
35 of these updates are standard security updates.
To see these additional updates run: apt list --upgradable

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

New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sun Aug 23 02:07:51 2026 from 10.30.171.240
[?2004h[jenkins@releng-19126-54-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-08-23T02:10:20.624126" elapsed="0.604104"/>
</kw>
<msg time="2026-08-23T02:10:21.228325" 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-08-23T02:10:20.623677" elapsed="0.604758"/>
</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-08-23T02:10:20.619736" elapsed="0.608973"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-23T02:10:21.229714" level="INFO">Executing command 'iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save'.</msg>
<msg time="2026-08-23T02:10:21.242435" level="INFO">Command exited with return code 4.</msg>
<msg time="2026-08-23T02:10:21.243019" level="INFO">${stdout} = </msg>
<msg time="2026-08-23T02:10:21.243380" 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-08-23T02:10:21.229175" elapsed="0.014459"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-08-23T02:10:21.244333" elapsed="0.001319"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:21.248759" 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-08-23T02:10:21.247221" elapsed="0.002125"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-08-23T02:10:21.250546" elapsed="0.000073"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:21.249753" elapsed="0.000976"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:21.249635" elapsed="0.001310"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-08-23T02:10:21.252095" elapsed="0.000153"/>
</return>
<status status="PASS" start="2026-08-23T02:10:21.251277" elapsed="0.001092"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:21.251180" elapsed="0.001360"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-08-23T02:10:21.252764" elapsed="0.000038"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<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-08-23T02:10:21.257998" elapsed="0.000154"/>
</kw>
<msg time="2026-08-23T02:10:21.258195" 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-08-23T02:10:21.257279" elapsed="0.001018"/>
</kw>
<kw name="Open 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-08-23T02:10:21.258567" elapsed="0.000039"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:21.258872" elapsed="0.000039"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:10:21.254305" elapsed="0.004733"/>
</kw>
<arg>${system}</arg>
<arg>${cmd}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>prompt=${prompt}</arg>
<doc>Reduces the common work of running a command on a remote system to a single higher level
robot keyword, taking care to log in with a public key and. The command given is written and the return value
depends on the passed argument values of return_stdout (default: True) and return_stderr (default: False).
At least one should be True, or the keyword will exit and FAIL. If both are True, the resulting return value
will be a two element list containing both. Otherwise the resulting return value is a string.
No test conditions are checked.</doc>
<status status="PASS" start="2026-08-23T02:10:20.613455" elapsed="0.645867"/>
</kw>
<msg time="2026-08-23T02:10:21.259441" 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-08-23T02:10:20.612749" elapsed="0.646745"/>
</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-08-23T02:10:20.612273" elapsed="0.647303"/>
</kw>
<msg time="2026-08-23T02:10:21.259617" 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-08-23T02:10:20.611728" elapsed="0.647936"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-23T02:10:21.263568" elapsed="0.000175"/>
</kw>
<msg time="2026-08-23T02:10:21.263789" 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-08-23T02:10:21.262998" elapsed="0.000876"/>
</kw>
<kw name="Open 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-08-23T02:10:21.264035" elapsed="0.000023"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:21.264196" elapsed="0.000021"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:10:21.259989" elapsed="0.004288"/>
</kw>
<msg time="2026-08-23T02:10:21.264374" 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-08-23T02:10:20.610947" elapsed="0.653452"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:21.264858" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:21.264589" elapsed="0.000315"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-23T02:10:21.264948" elapsed="0.000030"/>
</return>
<arg>command=${command}</arg>
<arg>member_index=${index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-08-23T02:10:20.610061" elapsed="0.655015"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:10:20.609882" elapsed="0.655232"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:10:20.609733" elapsed="0.655421"/>
</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-08-23T02:10:20.606067" elapsed="0.659144"/>
</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-08-23T02:10:21.265382" elapsed="0.000256"/>
</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-08-23T02:10:21.279622" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:21.279506" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:21.279485" elapsed="0.000210"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:10:21.279992" level="INFO">index=8
host=10.30.170.120
alias=None
port=22
timeout=10 seconds
newline=

prompt=&gt;
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-08-23T02:10:21.280158" level="INFO">${current_ssh_connection_object} = index=8
host=10.30.170.120
alias=None
port=22
timeout=10 seconds
newline=

prompt=&gt;
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-08-23T02:10:21.279870" elapsed="0.000316"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:21.280603" level="INFO">{}</msg>
<arg>${connection_index_dict}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:21.280339" elapsed="0.000308"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:21.281063" level="INFO">1</msg>
<arg>${member_index}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:21.280797" elapsed="0.000310"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:10:21.281917" 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-08-23T02:10:21.281658" elapsed="0.000387">Dictionary does not contain key '1'.</status>
</kw>
<msg time="2026-08-23T02:10:21.282156" level="INFO">${status} = FAIL</msg>
<msg time="2026-08-23T02:10:21.282202" 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-08-23T02:10:21.281265" elapsed="0.000960"/>
</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-08-23T02:10:21.282566" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:21.282312" elapsed="0.000330"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:21.282289" elapsed="0.000378"/>
</if>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:10:21.283787" level="INFO">${ip_address} = 10.30.170.114</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-08-23T02:10:21.283502" elapsed="0.000312"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-08-23T02:10:21.283884" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T02:10:21.284039" level="INFO">${odl_ip} = 10.30.170.114</msg>
<var>${odl_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-08-23T02:10:21.282884" elapsed="0.001180"/>
</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-08-23T02:10:21.284218" elapsed="0.000469"/>
</kw>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:10:21.284985" level="INFO">index=11
host=10.30.170.114
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-08-23T02:10:21.285084" level="INFO">${karaf_connection_object} = index=11
host=10.30.170.114
alias=None
port=8101
timeout=10 seconds
newline=

prompt=opendaylight-user
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_err...</msg>
<var>${karaf_connection_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-08-23T02:10:21.284877" elapsed="0.000234"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${connection_index_dict}</arg>
<arg>${member_index}</arg>
<arg>${karaf_connection_object.index}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-23T02:10:21.285260" elapsed="0.002508"/>
</kw>
<kw name="Login" owner="SSHLibrary">
<msg time="2026-08-23T02:10:21.288226" level="INFO">Logging into '10.30.170.114:8101' as 'karaf'.</msg>
<msg time="2026-08-23T02:10:21.446422" 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-08-23T02:10:21.287955" elapsed="0.158642"/>
</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">
<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-08-23T02:10:21.450976" elapsed="0.000230"/>
</kw>
<msg time="2026-08-23T02:10:21.451360" 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-08-23T02:10:21.450280" elapsed="0.001160"/>
</kw>
<kw name="Open 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-08-23T02:10:21.451603" elapsed="0.000022"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:21.451764" elapsed="0.000020"/>
</kw>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:10:21.447823" elapsed="0.004042"/>
</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-08-23T02:10:21.447073" elapsed="0.004842"/>
</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-08-23T02:10:21.279216" elapsed="0.172837"/>
</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-08-23T02:10:21.266417" elapsed="0.185685"/>
</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-08-23T02:10:21.266024" elapsed="0.186132"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:10:21.265880" elapsed="0.186319"/>
</iter>
<var>${index}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="PASS" start="2026-08-23T02:10:21.265703" elapsed="0.186536"/>
</for>
<arg>http_timeout=${http_timeout}</arg>
<doc>Initialize ClusterManagement. Open ssh karaf connections to each ODL.</doc>
<status status="PASS" start="2026-08-23T02:10:20.587138" elapsed="0.865181"/>
</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-08-23T02:10:21.454992" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:21.454871" elapsed="0.000171"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:21.454827" elapsed="0.000238"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:10:21.460059" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:21.459950" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:21.459931" elapsed="0.000198"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:10:21.461400" 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-08-23T02:10:21.460976" elapsed="0.000458"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:10:21.461914" 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-08-23T02:10:21.461599" elapsed="0.000341"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:10:21.461987" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:10:21.462141" 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-08-23T02:10:21.460359" elapsed="0.001807"/>
</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-08-23T02:10:21.467472" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:21.467365" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:21.467347" elapsed="0.000194"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:10:21.468865" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:21.468666" elapsed="0.000316"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:21.468647" elapsed="0.000361"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:10:21.469612" level="INFO">${karaf_connection_index} = 11</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-08-23T02:10:21.469153" elapsed="0.000499"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:10:21.470143" 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-08-23T02:10:21.469904" elapsed="0.000279"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:10:21.505201" 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 "/ "n "e "t "[78Cc "[A[78Co</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:10:21.471751" elapsed="0.033591"/>
</kw>
<msg time="2026-08-23T02:10:21.505498" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:10:21.505570" 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-08-23T02:10:21.470406" elapsed="0.035215"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:10:21.570095" level="INFO">"n "f "- "c "s "i "t "- "1 "n "o "d "e "- "g "a "t "e "- "u "s "e "r "f "e "a "t "u "r "e "s "- "a "l "l "- "v "a "n "a "d "i "u "m "/ "t "e "s "t "/ "c "s "i "t "/ "s "u "i "t "e "s "/ "n "e "t "c "o "n "f "/ "C "R "U "D "/ "C "R "U "[78CD "[A[78C.
 "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-08-23T02:10:21.507262" elapsed="0.063009"/>
</kw>
<msg time="2026-08-23T02:10:21.570434" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:10:21.570507" level="INFO">${message_wait} =  "n "f "- "c "s "i "t "- "1 "n "o "d "e "- "g "a "t "e "- "u "s "e "r "f "e "a "t "u "r "e "s "- "a "l "l "- "v "a "n "a ...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:10:21.505896" elapsed="0.064661"/>
</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-08-23T02:10:21.571188" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:21.570809" elapsed="0.000529"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:21.570782" elapsed="0.000586"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:21.572115" level="INFO"> "n "f "- "c "s "i "t "- "1 "n "o "d "e "- "g "a "t "e "- "u "s "e "r "f "e "a "t "u "r "e "s "- "a "l "l "- "v "a "n "a "d "i "u "m "/ "t "e "s "t "/ "c "s "i "t "/ "s "u "i "t "e "s "/ "n "e "t "c "o "n "f "/ "C "R "U "D "/ "C "R "U "[78CD "[A[78C.
 "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-08-23T02:10:21.571513" elapsed="0.000724"/>
</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-08-23T02:10:21.572685" elapsed="0.000047"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:21.572364" elapsed="0.000472"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:21.572344" elapsed="0.000539"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:10:21.572924" 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-08-23T02:10:21.575428" elapsed="0.000149"/>
</kw>
<msg time="2026-08-23T02:10:21.575621" 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-08-23T02:10:21.574945" elapsed="0.000745"/>
</kw>
<kw name="Open 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-08-23T02:10:21.575943" elapsed="0.000024"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:21.576150" elapsed="0.000022"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:10:21.574232" elapsed="0.002086"/>
</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-08-23T02:10:21.573244" elapsed="0.003171"/>
</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-08-23T02:10:21.468301" elapsed="0.108215"/>
</kw>
<msg time="2026-08-23T02:10:21.576613" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:10:21.576657" level="INFO">${message} =  "n "f "- "c "s "i "t "- "1 "n "o "d "e "- "g "a "t "e "- "u "s "e "r "f "e "a "t "u "r "e "s "- "a "l "l "- "v "a "n "a ...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:10:21.467689" elapsed="0.109006"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:10:21.577277" elapsed="0.000029"/>
</return>
<status status="PASS" start="2026-08-23T02:10:21.576772" elapsed="0.000570"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:21.576754" elapsed="0.000613"/>
</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-08-23T02:10:21.577810" elapsed="0.000031"/>
</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-08-23T02:10:21.578242" elapsed="0.000026"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:10:21.578316" 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-08-23T02:10:21.467077" elapsed="0.111349"/>
</kw>
<msg time="2026-08-23T02:10:21.578519" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:10:21.578564" level="INFO">${output} =  "n "f "- "c "s "i "t "- "1 "n "o "d "e "- "g "a "t "e "- "u "s "e "r "f "e "a "t "u "r "e "s "- "a "l "l "- "v "a "n "a ...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:10:21.462543" elapsed="0.116057"/>
</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-08-23T02:10:21.578960" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:21.578674" elapsed="0.000342"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:21.578657" elapsed="0.000383"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:10:21.462403" elapsed="0.116661"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:10:21.462222" elapsed="0.116874"/>
</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-08-23T02:10:21.459639" elapsed="0.119513"/>
</kw>
<doc>Log suite name to karaf log, useful in suite setup.</doc>
<status status="PASS" start="2026-08-23T02:10:21.452938" elapsed="0.126269"/>
</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-08-23T02:10:21.452476" elapsed="0.126774"/>
</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-08-23T02:10:20.581762" elapsed="0.997578"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:21.579793" level="INFO">Creating Session using : alias=operational, url=http://10.30.170.114:8181/rests/data, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x72b0ed20f1d0&gt;, timeout=None, proxies=None, verify=False,                     debug=0 </msg>
<arg>operational</arg>
<arg>http://${ODL_SYSTEM_IP}:${RESTCONFPORT}${REST_API}</arg>
<arg>auth=${AUTH}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="PASS" start="2026-08-23T02:10:21.579491" elapsed="0.000508"/>
</kw>
<kw name="Setup_NetconfKeywords" owner="NetconfKeywords">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:10:21.580792" level="INFO">${tmp} = {}</msg>
<var>${tmp}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-23T02:10:21.580513" elapsed="0.000305"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:21.584864" level="INFO">${NetconfKeywords__mounted_device_types} = {}</msg>
<arg>${NetconfKeywords__mounted_device_types}</arg>
<arg>${tmp}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-23T02:10:21.581000" elapsed="0.003910"/>
</kw>
<if>
<branch type="IF" condition="${create_session_for_templated_requests}">
<kw name="Create_Default_Session" owner="TemplatedRequests">
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:21.589367" level="INFO">Creating Session using : alias=default, url=http://10.30.170.114:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x72b0ed05cc90&gt;, timeout=2, proxies=None, verify=False,                     debug=0 </msg>
<arg>default</arg>
<arg>url=${url}</arg>
<arg>auth=${auth}</arg>
<arg>timeout=${timeout}</arg>
<arg>max_retries=${max_retries}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="PASS" start="2026-08-23T02:10:21.588980" elapsed="0.000494"/>
</kw>
<arg>timeout=2</arg>
<doc>Create "default" session to ${url} with authentication and connection parameters.
This Keyword is in this Resource only so that user do not need to call RequestsLibrary directly.</doc>
<status status="PASS" start="2026-08-23T02:10:21.588355" elapsed="0.001189"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:21.584981" elapsed="0.004594"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:21.584962" elapsed="0.004639"/>
</if>
<kw name="Initialize_Artifact_Deployment_And_Usage" owner="NexusKeywords">
<kw name="Open_Connection_To_ODL_System" owner="SSHKeywords">
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:10:21.594872" level="INFO">${odl_connection} = 12</msg>
<var>${odl_connection}</var>
<arg>${ip_address}</arg>
<arg>prompt=${ODL_SYSTEM_PROMPT}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-08-23T02:10:21.594453" elapsed="0.000448"/>
</kw>
<kw name="Flexible_Controller_Login" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-08-23T02:10:21.596579" level="INFO">Length is 0.</msg>
<msg time="2026-08-23T02:10:21.596656" 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-08-23T02:10:21.596260" elapsed="0.000420"/>
</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-08-23T02:10:21.596839" elapsed="0.000334"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-08-23T02:10:21.598065" level="INFO">Logging into '10.30.170.114:22' as 'jenkins'.</msg>
<msg time="2026-08-23T02:10:21.917174" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-186-generic x86_64)

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

 System information as of Sun Aug 23 02:10:20 UTC 2026

  System load:  0.04               Processes:             130
  Usage of /:   13.8% of 77.35GB   Users logged in:       1
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.114
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

41 updates can be applied immediately.
35 of these updates are standard security updates.
To see these additional updates run: apt list --upgradable

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

New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sun Aug 23 02:10:21 2026 from 10.30.171.240
[?2004h[jenkins@releng-19126-54-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-08-23T02:10:21.597731" elapsed="0.319647"/>
</kw>
<msg time="2026-08-23T02:10:21.917494" 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-08-23T02:10:21.597352" elapsed="0.320250"/>
</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-08-23T02:10:21.595810" elapsed="0.321944"/>
</kw>
<msg time="2026-08-23T02:10:21.917822" 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-08-23T02:10:21.595421" elapsed="0.322484"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-08-23T02:10:21.595085" elapsed="0.322924"/>
</kw>
<return>
<value>${odl_connection}</value>
<status status="PASS" start="2026-08-23T02:10:21.918077" elapsed="0.000058"/>
</return>
<msg time="2026-08-23T02:10:21.918334" level="INFO">${odl} = 12</msg>
<var>${odl}</var>
<doc>Open a connection to the ODL system at ${ip_address} and return its identifier.</doc>
<status status="PASS" start="2026-08-23T02:10:21.594130" elapsed="0.324232"/>
</kw>
<kw name="Put File" owner="SSHLibrary">
<msg time="2026-08-23T02:10:21.929525" level="INFO">[chan 1] Opened sftp connection (server version 3)</msg>
<msg time="2026-08-23T02:10:21.936876" level="INFO">'/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../../tools/deployment/search.sh' -&gt; '/home/jenkins//search.sh'</msg>
<arg>/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../../tools/deployment/search.sh</arg>
<doc>Uploads file(s) from the local machine to the remote machine.</doc>
<status status="PASS" start="2026-08-23T02:10:21.918586" elapsed="0.018380"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-08-23T02:10:21.937315" elapsed="0.000456"/>
</kw>
<if>
<branch type="IF" condition="not (${tools_system_connect})">
<return>
<status status="NOT RUN" start="2026-08-23T02:10:21.938209" elapsed="0.000030"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:21.937948" elapsed="0.000343"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:21.937902" elapsed="0.000432"/>
</if>
<kw name="Open_Connection_To_Tools_System" owner="SSHKeywords">
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:10:21.946014" level="INFO">${tools_connection} = 13</msg>
<var>${tools_connection}</var>
<arg>${ip_address}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-08-23T02:10:21.945282" elapsed="0.000780"/>
</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-08-23T02:10:21.949290" level="INFO">Length is 0.</msg>
<msg time="2026-08-23T02:10:21.949434" 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-08-23T02:10:21.948760" elapsed="0.000719"/>
</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-08-23T02:10:21.949780" elapsed="0.000643"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-08-23T02:10:21.951788" level="INFO">Logging into '10.30.170.120:22' as 'jenkins'.</msg>
<msg time="2026-08-23T02:10:22.502051" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-186-generic x86_64)

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

 System information as of Sun Aug 23 02:10:22 UTC 2026

  System load:  0.03               Processes:             112
  Usage of /:   21.4% of 38.58GB   Users logged in:       1
  Memory usage: 5%                 IPv4 address for ens3: 10.30.170.120
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

42 updates can be applied immediately.
35 of these updates are standard security updates.
To see these additional updates run: apt list --upgradable

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

New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sun Aug 23 02:07:50 2026 from 10.30.171.240
[?2004h[jenkins@releng-19126-54-1-docker-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-08-23T02:10:21.951450" elapsed="0.550750"/>
</kw>
<msg time="2026-08-23T02:10:22.502288" 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-08-23T02:10:21.950735" elapsed="0.551638"/>
</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-08-23T02:10:21.947958" elapsed="0.554534"/>
</kw>
<msg time="2026-08-23T02:10:22.502544" 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-08-23T02:10:21.947076" elapsed="0.555516"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-08-23T02:10:21.946406" elapsed="0.556262"/>
</kw>
<return>
<value>${tools_connection}</value>
<status status="PASS" start="2026-08-23T02:10:22.502726" elapsed="0.000047"/>
</return>
<doc>Open a connection to the tools system at ${ip_address} and return its identifier.</doc>
<status status="PASS" start="2026-08-23T02:10:21.944659" elapsed="0.558273"/>
</kw>
<doc>Places search utility to ODL system, which will be needed for version detection.
By default also initialize a SSH connection to Tools system,
as following Keywords assume a working connection towards target system.</doc>
<status status="PASS" start="2026-08-23T02:10:21.589867" elapsed="0.913122"/>
</kw>
<doc>Setup the environment for the other keywords of this Resource to work properly.</doc>
<status status="PASS" start="2026-08-23T02:10:21.580257" elapsed="0.922786"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:10:22.504134" level="INFO">${device_type} = full-uri-device</msg>
<var>${device_type}</var>
<arg>"""${USE_NETCONF_CONNECTOR}""" == """True"""</arg>
<arg>default</arg>
<arg>${device_type}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T02:10:22.503289" elapsed="0.000873"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:22.504661" level="INFO">${device_type} = full-uri-device</msg>
<arg>${device_type}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-23T02:10:22.504337" elapsed="0.000366"/>
</kw>
<doc>Initialize SetupUtils. Setup everything needed for the test cases.</doc>
<status status="PASS" start="2026-08-23T02:10:20.581406" elapsed="1.923355"/>
</kw>
<test id="s1-s4-s2-t1" name="Start_Testtool" line="45">
<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-08-23T02:10:22.507974" elapsed="0.000218"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:10:22.507678" elapsed="0.000569"/>
</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-08-23T02:10:22.509272" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:22.509156" elapsed="0.000163"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:22.509135" elapsed="0.000208"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:10:22.514301" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:22.514192" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:22.514174" elapsed="0.000194"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:10:22.515370" 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-08-23T02:10:22.514988" elapsed="0.000409"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:10:22.515936" 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-08-23T02:10:22.515620" elapsed="0.000342"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:10:22.516007" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:10:22.516319" 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-08-23T02:10:22.514593" elapsed="0.001752"/>
</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-08-23T02:10:22.521813" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:22.521705" elapsed="0.000172"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:22.521686" elapsed="0.000213"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:10:22.523202" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:22.523096" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:22.523077" elapsed="0.000192"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:10:22.523819" level="INFO">${karaf_connection_index} = 11</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-08-23T02:10:22.523416" elapsed="0.000449"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:10:22.524298" level="INFO">${current_connection_index} = 13</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-08-23T02:10:22.524024" elapsed="0.000300"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:10:22.552399" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:10:22.524899" elapsed="0.027699"/>
</kw>
<msg time="2026-08-23T02:10:22.552785" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:10:22.552835" 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 "n "e "t "c "o "n "f "...</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-08-23T02:10:22.524480" elapsed="0.028411"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:10:22.567193" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "S "t "a "r "t "_ "T "e "s "t "t "o "o "l "[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-08-23T02:10:22.553465" elapsed="0.014041"/>
</kw>
<msg time="2026-08-23T02:10:22.567723" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:10:22.567769" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "S "t "a "r "t "_ "T "e "s "t "t "o "o "l "[K"
[?1l&gt;[?2004l...</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-08-23T02:10:22.553062" elapsed="0.014745"/>
</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-08-23T02:10:22.568141" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:22.567907" elapsed="0.000316"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:22.567886" elapsed="0.000363"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:22.568805" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "S "t "a "r "t "_ "T "e "s "t "t "o "o "l "[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-08-23T02:10:22.568393" elapsed="0.000499"/>
</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-08-23T02:10:22.569175" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:22.568960" elapsed="0.000295"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:22.568942" elapsed="0.000338"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:10:22.569313" 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-08-23T02:10:22.572771" elapsed="0.000212"/>
</kw>
<msg time="2026-08-23T02:10:22.573061" 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-08-23T02:10:22.572014" elapsed="0.001152"/>
</kw>
<kw name="Open 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-08-23T02:10:22.574611" elapsed="0.000043"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:22.575801" elapsed="0.000128"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:10:22.570213" elapsed="0.005805"/>
</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-08-23T02:10:22.569591" elapsed="0.006620"/>
</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-08-23T02:10:22.522772" elapsed="0.053544"/>
</kw>
<msg time="2026-08-23T02:10:22.576408" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:10:22.576452" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "S "t "a "r "t "_ "T "e "s "t "t "o "o "l "[K"
[?1l&gt;[?2004l...</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-08-23T02:10:22.522048" elapsed="0.054442"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:10:22.576674" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:10:22.576566" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:22.576548" 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-08-23T02:10:22.577170" 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-08-23T02:10:22.577509" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:10:22.577581" 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-08-23T02:10:22.521369" elapsed="0.056318"/>
</kw>
<msg time="2026-08-23T02:10:22.577780" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:10:22.577823" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "S "t "a "r "t "_ "T "e "s "t "t "o "o "l "[K"
[?1l&gt;[?2004l...</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-08-23T02:10:22.516724" elapsed="0.061298"/>
</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-08-23T02:10:22.578348" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:22.578101" elapsed="0.000302"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:22.578084" elapsed="0.000341"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:10:22.516582" elapsed="0.061866"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:10:22.516404" elapsed="0.062076"/>
</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-08-23T02:10:22.513789" elapsed="0.064745"/>
</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-08-23T02:10:22.508855" elapsed="0.069732"/>
</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-08-23T02:10:22.508398" elapsed="0.070233"/>
</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-08-23T02:10:22.505494" elapsed="0.073188"/>
</kw>
<kw name="Install_And_Start_Testtool" owner="NetconfKeywords">
<kw name="Deploy_Test_Tool" owner="NexusKeywords">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:22.599813" level="INFO">${name_prefix} = netconf-testtool-</msg>
<var>${name_prefix}</var>
<arg>${artifact}-</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:22.599484" elapsed="0.000374"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:10:22.600395" level="INFO">${extension} = jar</msg>
<var>${extension}</var>
<arg>'${component}'=='odl-micro'</arg>
<arg>tar</arg>
<arg>jar</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T02:10:22.600043" elapsed="0.000378"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:10:22.600994" level="INFO">${name_suffix} = -executable.jar</msg>
<var>${name_suffix}</var>
<arg>"${suffix}" != ""</arg>
<arg>-${suffix}.${extension}</arg>
<arg>.${extension}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T02:10:22.600587" elapsed="0.000433"/>
</kw>
<kw name="Deploy_Artifact" owner="NexusKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_url}""" != ""</arg>
<arg>Deploy_From_Url</arg>
<arg>${explicit_url}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:10:22.602324" elapsed="0.000305"/>
</kw>
<kw name="Fetch From Left" owner="String">
<msg time="2026-08-23T02:10:22.603020" level="INFO">${urlbase} = https://nexus.opendaylight.org/content/repositories/opendaylight.snapshot</msg>
<var>${urlbase}</var>
<arg>${BUNDLE_URL}</arg>
<arg>/org/opendaylight</arg>
<doc>Returns contents of the ``string`` before the first occurrence of ``marker``.</doc>
<status status="PASS" start="2026-08-23T02:10:22.602790" elapsed="0.000256"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:10:22.603613" level="INFO">${urlbase} = https://nexus.opendaylight.org/content/repositories/opendaylight.snapshot</msg>
<var>${urlbase}</var>
<arg>'${urlbase}' != '${BUNDLE_URL}'</arg>
<arg>${urlbase}</arg>
<arg>${fallback_url}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T02:10:22.603222" elapsed="0.000417"/>
</kw>
<kw name="Run_Keyword_If_At_Most_Magnesium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Most" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &lt;= ${Stream_dict}[${upper_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:10:22.622167" elapsed="0.000405"/>
</kw>
<arg>magnesium</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${upper_bound} to vanadium and in case vanadium is at most ${upper_bound},
run Collections.Remove_Values_From_List [['mdsal', 'odlparent', 'yangtools', 'carpeople', 'netconf', 'bgpcep'], 'carpeople'] {} and return its value.</doc>
<status status="PASS" start="2026-08-23T02:10:22.621693" elapsed="0.001068"/>
</kw>
<msg time="2026-08-23T02:10:22.622810" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Most</arg>
<arg>magnesium</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:10:22.613097" elapsed="0.009782"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${RELEASE_INTEGRATED_COMPONENTS}</arg>
<arg>carpeople</arg>
<doc>Compare magnesium to vanadium and in case vanadium is at most magnesium,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-08-23T02:10:22.612687" elapsed="0.010271"/>
</kw>
<kw name="Run_Keyword_If_At_Most_Aluminium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Most" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &lt;= ${Stream_dict}[${upper_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:10:22.641553" elapsed="0.000415"/>
</kw>
<arg>aluminium</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${upper_bound} to vanadium and in case vanadium is at most ${upper_bound},
run Collections.Remove_Values_From_List [['mdsal', 'odlparent', 'yangtools', 'carpeople', 'netconf', 'bgpcep'], 'netconf'] {} and return its value.</doc>
<status status="PASS" start="2026-08-23T02:10:22.641097" elapsed="0.000940"/>
</kw>
<msg time="2026-08-23T02:10:22.642083" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Most</arg>
<arg>aluminium</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:10:22.632483" elapsed="0.009650"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${RELEASE_INTEGRATED_COMPONENTS}</arg>
<arg>netconf</arg>
<doc>Compare aluminium to vanadium and in case vanadium is at most aluminium,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-08-23T02:10:22.632094" elapsed="0.010113"/>
</kw>
<kw name="Run_Keyword_If_At_Most_Silicon" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Most" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &lt;= ${Stream_dict}[${upper_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:10:22.660644" elapsed="0.000417"/>
</kw>
<arg>silicon</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${upper_bound} to vanadium and in case vanadium is at most ${upper_bound},
run Collections.Remove_Values_From_List [['mdsal', 'odlparent', 'yangtools', 'carpeople', 'netconf', 'bgpcep'], 'bgpcep'] {} and return its value.</doc>
<status status="PASS" start="2026-08-23T02:10:22.660192" elapsed="0.000939"/>
</kw>
<msg time="2026-08-23T02:10:22.661177" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Most</arg>
<arg>silicon</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:10:22.651670" elapsed="0.009555"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${RELEASE_INTEGRATED_COMPONENTS}</arg>
<arg>bgpcep</arg>
<doc>Compare silicon to vanadium and in case vanadium is at most silicon,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-08-23T02:10:22.651283" elapsed="0.010016"/>
</kw>
<if>
<branch type="IF" condition="'${build_version}'=='${EMPTY}'">
<kw name="NexusKeywords__Detect_Version_To_Pull" owner="NexusKeywords">
<kw name="NexusKeywords__Get_Items_To_Look_At" owner="NexusKeywords">
<kw name="Dictionary Should Contain Key" owner="Collections">
<arg>${COMPONENT_MAPPING}</arg>
<arg>${component}</arg>
<arg>Component not supported by NexusKeywords version detection: ${component}</arg>
<doc>Fails if ``key`` is not found from ``dictionary``.</doc>
<status status="PASS" start="2026-08-23T02:10:22.664507" elapsed="0.000288"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Get From Dictionary" owner="Collections">
<arg>${COMPONENT_MAPPING}</arg>
<arg>${component}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-08-23T02:10:22.665347" elapsed="0.000178"/>
</kw>
<msg time="2026-08-23T02:10:22.665572" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Collections.Get_From_Dictionary</arg>
<arg>${COMPONENT_MAPPING}</arg>
<arg>${component}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:10:22.664984" elapsed="0.000639"/>
</kw>
<msg time="2026-08-23T02:10:22.665726" level="INFO">${itemlist} = netconf-api</msg>
<var>${itemlist}</var>
<arg>${component}</arg>
<doc>Get a list of items that might contain the version number that we are looking for.</doc>
<status status="PASS" start="2026-08-23T02:10:22.664185" elapsed="0.001565"/>
</kw>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:10:22.666073" level="INFO">index=13
host=10.30.170.120
alias=None
port=22
timeout=10 seconds
newline=

prompt=&gt;
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-08-23T02:10:22.666176" level="INFO">${current_ssh_connection} = index=13
host=10.30.170.120
alias=None
port=22
timeout=10 seconds
newline=

prompt=&gt;
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-08-23T02:10:22.665934" elapsed="0.000268"/>
</kw>
<kw name="Open_Connection_To_ODL_System" owner="SSHKeywords">
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:10:22.671110" level="INFO">${odl_connection} = 14</msg>
<var>${odl_connection}</var>
<arg>${ip_address}</arg>
<arg>prompt=${ODL_SYSTEM_PROMPT}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-08-23T02:10:22.670639" elapsed="0.000497"/>
</kw>
<kw name="Flexible_Controller_Login" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-08-23T02:10:22.672964" level="INFO">Length is 0.</msg>
<msg time="2026-08-23T02:10:22.673044" 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-08-23T02:10:22.672605" elapsed="0.000463"/>
</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-08-23T02:10:22.673223" elapsed="0.000385"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-08-23T02:10:22.675093" level="INFO">Logging into '10.30.170.114:22' as 'jenkins'.</msg>
<msg time="2026-08-23T02:10:23.009092" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-186-generic x86_64)

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

 System information as of Sun Aug 23 02:10:20 UTC 2026

  System load:  0.04               Processes:             130
  Usage of /:   13.8% of 77.35GB   Users logged in:       1
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.114
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

41 updates can be applied immediately.
35 of these updates are standard security updates.
To see these additional updates run: apt list --upgradable

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

New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sun Aug 23 02:10:21 2026 from 10.30.171.240
[?2004h[jenkins@releng-19126-54-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-08-23T02:10:22.674213" elapsed="0.335061"/>
</kw>
<msg time="2026-08-23T02:10:23.009418" 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-08-23T02:10:22.673830" elapsed="0.335682"/>
</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-08-23T02:10:22.672123" elapsed="0.337509"/>
</kw>
<msg time="2026-08-23T02:10:23.009686" 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-08-23T02:10:22.671689" elapsed="0.338045"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-08-23T02:10:22.671314" elapsed="0.338497"/>
</kw>
<return>
<value>${odl_connection}</value>
<status status="PASS" start="2026-08-23T02:10:23.009902" elapsed="0.000051"/>
</return>
<doc>Open a connection to the ODL system at ${ip_address} and return its identifier.</doc>
<status status="PASS" start="2026-08-23T02:10:22.670297" elapsed="0.339801"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-23T02:10:23.010646" level="INFO">Executing command 'sh search.sh /tmp/netconf-karaf-12.0.0-SNAPSHOT/system netconf-api'.</msg>
<msg time="2026-08-23T02:10:23.044493" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-23T02:10:23.044764" level="INFO">${version} = 12.0.0-SNAPSHOT
org/opendaylight/netconf</msg>
<msg time="2026-08-23T02:10:23.044910" level="INFO">${result} = 0</msg>
<var>${version}</var>
<var>${result}</var>
<arg>sh search.sh ${WORKSPACE}/${BUNDLEFOLDER}/system ${itemlist}</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-23T02:10:23.010340" elapsed="0.034626"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-08-23T02:10:23.045334" elapsed="0.000449"/>
</kw>
<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-08-23T02:10:23.051752" elapsed="0.000224"/>
</kw>
<msg time="2026-08-23T02:10:23.052035" 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-08-23T02:10:23.050951" elapsed="0.001154"/>
</kw>
<kw name="Open 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-08-23T02:10:23.052328" elapsed="0.000063"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:23.052588" elapsed="0.000030"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:10:23.046394" elapsed="0.006309"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:23.053288" level="INFO">12.0.0-SNAPSHOT
org/opendaylight/netconf</msg>
<arg>${version}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:23.052929" elapsed="0.000421"/>
</kw>
<if>
<branch type="IF" condition="${result}!=0">
<kw name="Fail" owner="BuiltIn">
<arg>Component "${component}": searching for "${itemlist}" found no version, cannot locate test tool.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:23.053754" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:23.053454" elapsed="0.000375"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:23.053424" elapsed="0.000466"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-08-23T02:10:23.054409" level="INFO">${version} = 12.0.0-SNAPSHOT</msg>
<msg time="2026-08-23T02:10:23.054470" level="INFO">${location} = org/opendaylight/netconf</msg>
<var>${version}</var>
<var>${location}</var>
<arg>${version}</arg>
<arg>max_split=1</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-08-23T02:10:23.054087" elapsed="0.000415"/>
</kw>
<return>
<value>${version}</value>
<value>${location}</value>
<status status="PASS" start="2026-08-23T02:10:23.054572" elapsed="0.000040"/>
</return>
<msg time="2026-08-23T02:10:23.054860" level="INFO">${version} = 12.0.0-SNAPSHOT</msg>
<msg time="2026-08-23T02:10:23.054926" level="INFO">${location} = org/opendaylight/netconf</msg>
<var>${version}</var>
<var>${location}</var>
<arg>${component}</arg>
<doc>Determine the exact Nexus directory to be used as a source for a particular test tool
Figure out what version of the tool needs to be pulled out of the
Nexus by looking at the version directory of the subsystem from
which the tool is being pulled. This code is REALLY UGLY but there
is no way around it until the bug
https://bugs.opendaylight.org/show_bug.cgi?id=5206 gets fixed.
I also don't want to depend on maven-metadata-local.xml and other
bits and pieces of ODL distribution which are not required for ODL
to function properly.</doc>
<status status="PASS" start="2026-08-23T02:10:22.663719" elapsed="0.391240"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:22.661378" elapsed="0.393638"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${version}</var>
<var>${location}</var>
<arg>${build_version}</arg>
<arg>${build_location}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:23.055258" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:23.055052" elapsed="0.000361"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:22.661355" elapsed="0.394093"/>
</if>
<if>
<branch type="IF" condition="'SNAPSHOT' in '${version}'">
<kw name="Remove Values From List" owner="Collections">
<arg>${RELEASE_INTEGRATED_COMPONENTS}</arg>
<arg>netconf</arg>
<arg>bgpcep</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-08-23T02:10:23.055828" elapsed="0.000294"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:23.055528" elapsed="0.000651"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:23.055506" elapsed="0.000708"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:10:23.056994" level="INFO">${is_staged} = "FALSE"</msg>
<var>${is_staged}</var>
<arg>"opendaylight.release" not in '${urlbase}' and "opendaylight.snapshot" not in '${urlbase}'</arg>
<arg>"TRUE"</arg>
<arg>"FALSE"</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T02:10:23.056438" elapsed="0.000594"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:10:23.057798" level="INFO">${is_mri_component} = "FALSE"</msg>
<var>${is_mri_component}</var>
<arg>'${component}' in ${RELEASE_INTEGRATED_COMPONENTS}</arg>
<arg>"TRUE"</arg>
<arg>"FALSE"</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T02:10:23.057262" elapsed="0.000578"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:10:23.058638" level="INFO">${urlbase} = https://nexus.opendaylight.org/content/repositories/opendaylight.snapshot</msg>
<var>${urlbase}</var>
<arg>${is_mri_component} == "TRUE" and ${is_staged} == "FALSE"</arg>
<arg>${NEXUS_RELEASE_BASE_URL}</arg>
<arg>${urlbase}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T02:10:23.058090" elapsed="0.000586"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:23.059433" level="INFO">${url} = https://nexus.opendaylight.org/content/repositories/opendaylight.snapshot/org/opendaylight/netconf/netconf-testtool/12.0.0-SNAPSHOT</msg>
<var>${url}</var>
<arg>${urlbase}/${location}/${artifact}/${version}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:23.058921" elapsed="0.000550"/>
</kw>
<kw name="Execute_Command_Should_Pass" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Execute_Command_Passes" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-23T02:10:23.062037" level="INFO">Executing command 'curl -L https://nexus.opendaylight.org/content/repositories/opendaylight.snapshot/org/opendaylight/netconf/netconf-testtool/12.0.0-SNAPSHOT/maven-metadata.xml'.</msg>
<msg time="2026-08-23T02:10:23.145869" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-23T02:10:23.146182" level="INFO">${stdout} = &lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;metadata modelVersion="1.1.0"&gt;
  &lt;groupId&gt;org.opendaylight.netconf&lt;/groupId&gt;
  &lt;artifactId&gt;netconf-testtool&lt;/artifactId&gt;
  &lt;versioning&gt;
    &lt;lastUpdated&gt;2026082...</msg>
<msg time="2026-08-23T02:10:23.146291" level="INFO">${stderr} =   % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0   ...</msg>
<msg time="2026-08-23T02:10:23.146385" level="INFO">${rc} = 0</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>${command}</arg>
<arg>return_stderr=True</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-23T02:10:23.061857" elapsed="0.084578"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-08-23T02:10:23.148391" level="INFO">Length is 316.</msg>
<msg time="2026-08-23T02:10:23.149060" level="FAIL">'  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0100  2787  100  2787    0     0  46331      0 --:--:-- --:--:-- --:--:-- 47237' should be empty.</msg>
<arg>${stderr}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-08-23T02:10:23.147741" elapsed="0.001484">'  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0100  2787  100  2787    0     0  46331      0 --:--:-- --:--:-- --:--:-- 47237' should be empty.</status>
</kw>
<msg time="2026-08-23T02:10:23.149519" level="INFO">${emptiness_status} = FAIL</msg>
<msg time="2026-08-23T02:10:23.149622" level="INFO">${result} = '  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0  ...</msg>
<var>${emptiness_status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${stderr}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:10:23.146922" elapsed="0.002753"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:10:23.151069" level="INFO">${success} = True</msg>
<var>${success}</var>
<arg>(${rc} == 0) and (("${emptiness_status}" == "PASS") or not ${stderr_must_be_empty})</arg>
<arg>True</arg>
<arg>False</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T02:10:23.150086" elapsed="0.001042"/>
</kw>
<if>
<branch type="IF" condition="(${log_on_success} and ${success}) or (${log_on_failure} and not ${success})">
<kw name="Log_Command_Results" owner="SSHKeywords">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:23.153639" level="INFO">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;metadata modelVersion="1.1.0"&gt;
  &lt;groupId&gt;org.opendaylight.netconf&lt;/groupId&gt;
  &lt;artifactId&gt;netconf-testtool&lt;/artifactId&gt;
  &lt;versioning&gt;
    &lt;lastUpdated&gt;20260822190854&lt;/lastUpdated&gt;
    &lt;snapshot&gt;
      &lt;timestamp&gt;20260822.190854&lt;/timestamp&gt;
      &lt;buildNumber&gt;265&lt;/buildNumber&gt;
    &lt;/snapshot&gt;
    &lt;snapshotVersions&gt;
      &lt;snapshotVersion&gt;
        &lt;extension&gt;pom&lt;/extension&gt;
        &lt;value&gt;12.0.0-20260822.190854-265&lt;/value&gt;
        &lt;updated&gt;20260822190854&lt;/updated&gt;
      &lt;/snapshotVersion&gt;
      &lt;snapshotVersion&gt;
        &lt;extension&gt;jar&lt;/extension&gt;
        &lt;value&gt;12.0.0-20260822.190854-265&lt;/value&gt;
        &lt;updated&gt;20260822190854&lt;/updated&gt;
      &lt;/snapshotVersion&gt;
      &lt;snapshotVersion&gt;
        &lt;classifier&gt;javadoc&lt;/classifier&gt;
        &lt;extension&gt;jar&lt;/extension&gt;
        &lt;value&gt;12.0.0-20260822.190854-265&lt;/value&gt;
        &lt;updated&gt;20260822190854&lt;/updated&gt;
      &lt;/snapshotVersion&gt;
      &lt;snapshotVersion&gt;
        &lt;classifier&gt;executable&lt;/classifier&gt;
        &lt;extension&gt;jar&lt;/extension&gt;
        &lt;value&gt;12.0.0-20260822.190854-265&lt;/value&gt;
        &lt;updated&gt;20260822190854&lt;/updated&gt;
      &lt;/snapshotVersion&gt;
      &lt;snapshotVersion&gt;
        &lt;classifier&gt;stress-client&lt;/classifier&gt;
        &lt;extension&gt;jar&lt;/extension&gt;
        &lt;value&gt;12.0.0-20260822.190854-265&lt;/value&gt;
        &lt;updated&gt;20260822190854&lt;/updated&gt;
      &lt;/snapshotVersion&gt;
      &lt;snapshotVersion&gt;
        &lt;classifier&gt;rest-perf-client&lt;/classifier&gt;
        &lt;extension&gt;jar&lt;/extension&gt;
        &lt;value&gt;12.0.0-20260822.190854-265&lt;/value&gt;
        &lt;updated&gt;20260822190854&lt;/updated&gt;
      &lt;/snapshotVersion&gt;
      &lt;snapshotVersion&gt;
        &lt;classifier&gt;scale-util&lt;/classifier&gt;
        &lt;extension&gt;jar&lt;/extension&gt;
        &lt;value&gt;12.0.0-20260822.190854-265&lt;/value&gt;
        &lt;updated&gt;20260822190854&lt;/updated&gt;
      &lt;/snapshotVersion&gt;
      &lt;snapshotVersion&gt;
        &lt;classifier&gt;stress-client&lt;/classifier&gt;
        &lt;extension&gt;tar.gz&lt;/extension&gt;
        &lt;value&gt;12.0.0-20260822.190854-265&lt;/value&gt;
        &lt;updated&gt;20260822190854&lt;/updated&gt;
      &lt;/snapshotVersion&gt;
      &lt;snapshotVersion&gt;
        &lt;classifier&gt;cyclonedx&lt;/classifier&gt;
        &lt;extension&gt;xml&lt;/extension&gt;
        &lt;value&gt;12.0.0-20260822.190854-265&lt;/value&gt;
        &lt;updated&gt;20260822190854&lt;/updated&gt;
      &lt;/snapshotVersion&gt;
      &lt;snapshotVersion&gt;
        &lt;classifier&gt;cyclonedx&lt;/classifier&gt;
        &lt;extension&gt;json&lt;/extension&gt;
        &lt;value&gt;12.0.0-20260822.190854-265&lt;/value&gt;
        &lt;updated&gt;20260822190854&lt;/updated&gt;
      &lt;/snapshotVersion&gt;
      &lt;snapshotVersion&gt;
        &lt;classifier&gt;sources&lt;/classifier&gt;
        &lt;extension&gt;jar&lt;/extension&gt;
        &lt;value&gt;12.0.0-20260822.190854-265&lt;/value&gt;
        &lt;updated&gt;20260822190854&lt;/updated&gt;
      &lt;/snapshotVersion&gt;
    &lt;/snapshotVersions&gt;
  &lt;/versioning&gt;
  &lt;version&gt;12.0.0-SNAPSHOT&lt;/version&gt;
&lt;/metadata&gt;</msg>
<arg>${stdout}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:23.153037" elapsed="0.000911"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:23.154673" level="INFO">  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0100  2787  100  2787    0     0  46331      0 --:--:-- --:--:-- --:--:-- 47237</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:23.154295" elapsed="0.000424"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:23.155120" level="INFO">0</msg>
<arg>${rc}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:23.154883" elapsed="0.000280"/>
</kw>
<arg>${stdout}</arg>
<arg>${stderr}</arg>
<arg>${rc}</arg>
<doc>Log everything returned by SSHLibrary.Execute_Command</doc>
<status status="PASS" start="2026-08-23T02:10:23.152112" elapsed="0.003107"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:23.151307" elapsed="0.003946"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:23.151258" elapsed="0.004023"/>
</if>
<if>
<branch type="IF" condition="${return_success_only}">
<return>
<value>${success}</value>
<status status="NOT RUN" start="2026-08-23T02:10:23.155446" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:23.155337" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:23.155321" elapsed="0.000206"/>
</if>
<if>
<branch type="IF" condition="${success}">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-08-23T02:10:23.155683" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-23T02:10:23.155587" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:23.155571" elapsed="0.000195"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Got rc: ${rc} or stderr was not empty: ${stderr}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:23.155926" elapsed="0.000022"/>
</kw>
<arg>${command}</arg>
<arg>return_success_only=False</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Execute command via the active SSH connection. For success, rc has to be zero and optionally stderr has to be empty.
Log everything, depending on arguments and success. Return either success string or stdout.
TODO: Do we want to support customizing return values the same way as SSHLibrary.Execute_Command does?</doc>
<status status="PASS" start="2026-08-23T02:10:23.061105" elapsed="0.094939"/>
</kw>
<msg time="2026-08-23T02:10:23.156112" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Execute_Command_Passes</arg>
<arg>${command}</arg>
<arg>return_success_only=False</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:10:23.060315" elapsed="0.095845"/>
</kw>
<msg time="2026-08-23T02:10:23.156319" level="INFO">${metadata} = &lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;metadata modelVersion="1.1.0"&gt;
  &lt;groupId&gt;org.opendaylight.netconf&lt;/groupId&gt;
  &lt;artifactId&gt;netconf-testtool&lt;/artifactId&gt;
  &lt;versioning&gt;
    &lt;lastUpdated&gt;2026082...</msg>
<var>${metadata}</var>
<arg>curl -L ${url}/maven-metadata.xml</arg>
<doc>A wrapper for Execute_Command_Passes with return_success_only=False
Also, log_on_success defaults to True (but is customizable, unlike return_success_only)..</doc>
<status status="PASS" start="2026-08-23T02:10:23.059751" elapsed="0.096597"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Command_Should_Pass" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Execute_Command_Passes" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-23T02:10:23.158752" level="INFO">Executing command 'echo "&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;metadata modelVersion="1.1.0"&gt;
  &lt;groupId&gt;org.opendaylight.netconf&lt;/groupId&gt;
  &lt;artifactId&gt;netconf-testtool&lt;/artifactId&gt;
  &lt;versioning&gt;
    &lt;lastUpdated&gt;20260822190854&lt;/lastUpdated&gt;
    &lt;snapshot&gt;
      &lt;timestamp&gt;20260822.190854&lt;/timestamp&gt;
      &lt;buildNumber&gt;265&lt;/buildNumber&gt;
    &lt;/snapshot&gt;
    &lt;snapshotVersions&gt;
      &lt;snapshotVersion&gt;
        &lt;extension&gt;pom&lt;/extension&gt;
        &lt;value&gt;12.0.0-20260822.190854-265&lt;/value&gt;
        &lt;updated&gt;20260822190854&lt;/updated&gt;
      &lt;/snapshotVersion&gt;
      &lt;snapshotVersion&gt;
        &lt;extension&gt;jar&lt;/extension&gt;
        &lt;value&gt;12.0.0-20260822.190854-265&lt;/value&gt;
        &lt;updated&gt;20260822190854&lt;/updated&gt;
      &lt;/snapshotVersion&gt;
      &lt;snapshotVersion&gt;
        &lt;classifier&gt;javadoc&lt;/classifier&gt;
        &lt;extension&gt;jar&lt;/extension&gt;
        &lt;value&gt;12.0.0-20260822.190854-265&lt;/value&gt;
        &lt;updated&gt;20260822190854&lt;/updated&gt;
      &lt;/snapshotVersion&gt;
      &lt;snapshotVersion&gt;
        &lt;classifier&gt;executable&lt;/classifier&gt;
        &lt;extension&gt;jar&lt;/extension&gt;
        &lt;value&gt;12.0.0-20260822.190854-265&lt;/value&gt;
        &lt;updated&gt;20260822190854&lt;/updated&gt;
      &lt;/snapshotVersion&gt;
      &lt;snapshotVersion&gt;
        &lt;classifier&gt;stress-client&lt;/classifier&gt;
        &lt;extension&gt;jar&lt;/extension&gt;
        &lt;value&gt;12.0.0-20260822.190854-265&lt;/value&gt;
        &lt;updated&gt;20260822190854&lt;/updated&gt;
      &lt;/snapshotVersion&gt;
      &lt;snapshotVersion&gt;
        &lt;classifier&gt;rest-perf-client&lt;/classifier&gt;
        &lt;extension&gt;jar&lt;/extension&gt;
        &lt;value&gt;12.0.0-20260822.190854-265&lt;/value&gt;
        &lt;updated&gt;20260822190854&lt;/updated&gt;
      &lt;/snapshotVersion&gt;
      &lt;snapshotVersion&gt;
        &lt;classifier&gt;scale-util&lt;/classifier&gt;
        &lt;extension&gt;jar&lt;/extension&gt;
        &lt;value&gt;12.0.0-20260822.190854-265&lt;/value&gt;
        &lt;updated&gt;20260822190854&lt;/updated&gt;
      &lt;/snapshotVersion&gt;
      &lt;snapshotVersion&gt;
        &lt;classifier&gt;stress-client&lt;/classifier&gt;
        &lt;extension&gt;tar.gz&lt;/extension&gt;
        &lt;value&gt;12.0.0-20260822.190854-265&lt;/value&gt;
        &lt;updated&gt;20260822190854&lt;/updated&gt;
      &lt;/snapshotVersion&gt;
      &lt;snapshotVersion&gt;
        &lt;classifier&gt;cyclonedx&lt;/classifier&gt;
        &lt;extension&gt;xml&lt;/extension&gt;
        &lt;value&gt;12.0.0-20260822.190854-265&lt;/value&gt;
        &lt;updated&gt;20260822190854&lt;/updated&gt;
      &lt;/snapshotVersion&gt;
      &lt;snapshotVersion&gt;
        &lt;classifier&gt;cyclonedx&lt;/classifier&gt;
        &lt;extension&gt;json&lt;/extension&gt;
        &lt;value&gt;12.0.0-20260822.190854-265&lt;/value&gt;
        &lt;updated&gt;20260822190854&lt;/updated&gt;
      &lt;/snapshotVersion&gt;
      &lt;snapshotVersion&gt;
        &lt;classifier&gt;sources&lt;/classifier&gt;
        &lt;extension&gt;jar&lt;/extension&gt;
        &lt;value&gt;12.0.0-20260822.190854-265&lt;/value&gt;
        &lt;updated&gt;20260822190854&lt;/updated&gt;
      &lt;/snapshotVersion&gt;
    &lt;/snapshotVersions&gt;
  &lt;/versioning&gt;
  &lt;version&gt;12.0.0-SNAPSHOT&lt;/version&gt;
&lt;/metadata&gt;" | grep value | head -n 1 | cut -d '&gt;' -f 2 | cut -d '&lt;' -f 1'.</msg>
<msg time="2026-08-23T02:10:23.194318" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-23T02:10:23.194565" level="INFO">${stdout} = 12.0.0-20260822.190854-265</msg>
<msg time="2026-08-23T02:10:23.194731" level="INFO">${stderr} = </msg>
<msg time="2026-08-23T02:10:23.194825" level="INFO">${rc} = 0</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>${command}</arg>
<arg>return_stderr=True</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-23T02:10:23.158567" elapsed="0.036369"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-08-23T02:10:23.196697" level="INFO">Length is 0.</msg>
<arg>${stderr}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="PASS" start="2026-08-23T02:10:23.196119" elapsed="0.000678"/>
</kw>
<msg time="2026-08-23T02:10:23.197043" level="INFO">${emptiness_status} = PASS</msg>
<msg time="2026-08-23T02:10:23.197140" level="INFO">${result} = None</msg>
<var>${emptiness_status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${stderr}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:10:23.195329" elapsed="0.001860"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:10:23.198540" level="INFO">${success} = True</msg>
<var>${success}</var>
<arg>(${rc} == 0) and (("${emptiness_status}" == "PASS") or not ${stderr_must_be_empty})</arg>
<arg>True</arg>
<arg>False</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T02:10:23.197554" elapsed="0.001025"/>
</kw>
<if>
<branch type="IF" condition="(${log_on_success} and ${success}) or (${log_on_failure} and not ${success})">
<kw name="Log_Command_Results" owner="SSHKeywords">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:23.200138" level="INFO">12.0.0-20260822.190854-265</msg>
<arg>${stdout}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:23.199717" elapsed="0.000484"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:23.200766" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:23.200405" elapsed="0.000418"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:23.201450" level="INFO">0</msg>
<arg>${rc}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:23.201078" elapsed="0.000434"/>
</kw>
<arg>${stdout}</arg>
<arg>${stderr}</arg>
<arg>${rc}</arg>
<doc>Log everything returned by SSHLibrary.Execute_Command</doc>
<status status="PASS" start="2026-08-23T02:10:23.199171" elapsed="0.002417"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:23.198686" elapsed="0.002951"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:23.198658" elapsed="0.003014"/>
</if>
<if>
<branch type="IF" condition="${return_success_only}">
<return>
<value>${success}</value>
<status status="NOT RUN" start="2026-08-23T02:10:23.201933" elapsed="0.000024"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:23.201749" elapsed="0.000266"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:23.201725" elapsed="0.000332"/>
</if>
<if>
<branch type="IF" condition="${success}">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-08-23T02:10:23.202268" elapsed="0.000037"/>
</return>
<status status="PASS" start="2026-08-23T02:10:23.202137" elapsed="0.000215"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:23.202114" elapsed="0.000272"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Got rc: ${rc} or stderr was not empty: ${stderr}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:23.202593" elapsed="0.000031"/>
</kw>
<arg>${command}</arg>
<arg>return_success_only=False</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Execute command via the active SSH connection. For success, rc has to be zero and optionally stderr has to be empty.
Log everything, depending on arguments and success. Return either success string or stdout.
TODO: Do we want to support customizing return values the same way as SSHLibrary.Execute_Command does?</doc>
<status status="PASS" start="2026-08-23T02:10:23.157942" elapsed="0.044818"/>
</kw>
<msg time="2026-08-23T02:10:23.202836" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Execute_Command_Passes</arg>
<arg>${command}</arg>
<arg>return_success_only=False</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:10:23.157397" elapsed="0.045553"/>
</kw>
<arg>echo "${metadata}" | grep value | head -n 1 | cut -d '&gt;' -f 2 | cut -d '&lt;' -f 1</arg>
<arg>stderr_must_be_empty=${True}</arg>
<doc>A wrapper for Execute_Command_Passes with return_success_only=False
Also, log_on_success defaults to True (but is customizable, unlike return_success_only)..</doc>
<status status="PASS" start="2026-08-23T02:10:23.156942" elapsed="0.046124"/>
</kw>
<msg time="2026-08-23T02:10:23.203198" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:10:23.203260" level="INFO">${namepart} = 12.0.0-20260822.190854-265</msg>
<var>${status}</var>
<var>${namepart}</var>
<arg>SSHKeywords.Execute_Command_Should_Pass</arg>
<arg>echo "${metadata}" | grep value | head -n 1 | cut -d '&gt;' -f 2 | cut -d '&lt;' -f 1</arg>
<arg>stderr_must_be_empty=${True}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:10:23.156537" elapsed="0.046755"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-08-23T02:10:23.203938" level="INFO">Length is 26.</msg>
<msg time="2026-08-23T02:10:23.204048" level="INFO">${length} = 26</msg>
<var>${length}</var>
<arg>${namepart}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-08-23T02:10:23.203519" elapsed="0.000562"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:10:23.204909" level="INFO">${namepart} = 12.0.0-20260822.190854-265</msg>
<var>${namepart}</var>
<arg>"${status}" != "PASS" or ${length} == 0</arg>
<arg>${version}</arg>
<arg>${namepart}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T02:10:23.204306" elapsed="0.000644"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:23.205650" level="INFO">${filename} = netconf-testtool-12.0.0-20260822.190854-265-executable.jar</msg>
<var>${filename}</var>
<arg>${name_prefix}${namepart}${name_suffix}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:23.205173" elapsed="0.000514"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:23.206318" level="INFO">netconf-testtool-12.0.0-20260822.190854-265-executable.jar</msg>
<arg>${filename}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:23.205942" elapsed="0.000439"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:23.206946" level="INFO">${url} = https://nexus.opendaylight.org/content/repositories/opendaylight.snapshot/org/opendaylight/netconf/netconf-testtool/12.0.0-SNAPSHOT/netconf-testtool-12.0.0-20260822.190854-265-executable.jar</msg>
<var>${url}</var>
<arg>${url}/${filename}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:23.206593" elapsed="0.000380"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-23T02:10:23.207291" level="INFO">Executing command 'wget -q -N 'https://nexus.opendaylight.org/content/repositories/opendaylight.snapshot/org/opendaylight/netconf/netconf-testtool/12.0.0-SNAPSHOT/netconf-testtool-12.0.0-20260822.190854-265-executable.jar' 2&gt;&amp;1'.</msg>
<msg time="2026-08-23T02:10:23.266401" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-23T02:10:23.266703" level="INFO">${response} = </msg>
<msg time="2026-08-23T02:10:23.266808" level="INFO">${result} = 0</msg>
<var>${response}</var>
<var>${result}</var>
<arg>wget -q -N '${url}' 2&gt;&amp;1</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-23T02:10:23.207128" elapsed="0.059779"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:23.267898" level="INFO"/>
<arg>${response}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:23.267290" elapsed="0.000705"/>
</kw>
<if>
<branch type="IF" condition="${result} == 0">
<return>
<value>${filename}</value>
<status status="PASS" start="2026-08-23T02:10:23.268387" elapsed="0.000059"/>
</return>
<status status="PASS" start="2026-08-23T02:10:23.268145" elapsed="0.000377"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:23.268102" elapsed="0.000474"/>
</if>
<kw name="Replace String Using Regexp" owner="String">
<var>${release_url}</var>
<arg>${url}</arg>
<arg>autorelease-[0-9]{4}</arg>
<arg>opendaylight.release</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:23.268940" elapsed="0.000052"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${response}</var>
<var>${result}</var>
<arg>wget -q -N '${release_url}' 2&gt;&amp;1</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:23.269349" elapsed="0.000050"/>
</kw>
<if>
<branch type="IF" condition="${result} != 0">
<kw name="Fail" owner="BuiltIn">
<arg>Artifact "${artifact}" in component "${component}" could not be downloaded from ${release_url} nor ${url}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:23.269919" elapsed="0.000047"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:23.269580" elapsed="0.000458"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:23.269537" elapsed="0.000554"/>
</if>
<return>
<value>${filename}</value>
<status status="NOT RUN" start="2026-08-23T02:10:23.270166" elapsed="0.000033"/>
</return>
<msg time="2026-08-23T02:10:23.270472" level="INFO">${filename} = netconf-testtool-12.0.0-20260822.190854-265-executable.jar</msg>
<var>${filename}</var>
<arg>${component}</arg>
<arg>${artifact}</arg>
<arg>${name_prefix}</arg>
<arg>${name_suffix}</arg>
<arg>${fallback_url}</arg>
<arg>${explicit_url}</arg>
<arg>${build_version}</arg>
<arg>${build_location}</arg>
<doc>Deploy the specified artifact from Nexus to the cwd of the machine to which the active SSHLibrary connection points.
netconf is a name part of an artifact present in system/ of ODl installation with the same version as netconf-testtool should have.
Must have https://nexus.opendaylight.org/content/repositories/opendaylight.snapshot/org/opendaylight/netconf/netconf-karaf/12.0.0-SNAPSHOT/netconf-karaf-12.0.0-20260822.190854-265.zip variable set to the URL from which the
tested ODL distribution was downloaded and this place must be
inside a repository created by a standard distribution
construction job. If this is detected to ne be the case, fallback URL is used.
If  is non-empty, Deploy_From_Utrl is called instead.
TODO: Allow deploying to a specific directory, we have SSHKeywords.Execute_Command_At_Cwd_Should_Pass now.</doc>
<status status="PASS" start="2026-08-23T02:10:22.601623" elapsed="0.668906"/>
</kw>
<return>
<value>${filename}</value>
<status status="PASS" start="2026-08-23T02:10:23.270678" elapsed="0.000104"/>
</return>
<msg time="2026-08-23T02:10:23.271089" level="INFO">${filename} = netconf-testtool-12.0.0-20260822.190854-265-executable.jar</msg>
<var>${filename}</var>
<arg>netconf</arg>
<arg>netconf-testtool</arg>
<doc>Deploy a test tool.
The test tools have naming convention of the form
"&lt;repository_url&gt;/some/dir/somewhere/&lt;tool-name&gt;/&lt;tool-name&gt;-&lt;version-tag&gt;-${suffix}.jar"
where "&lt;tool-name&gt;" is the name of the tool and "&lt;version-tag&gt;" is
the version tag that is digged out of the maven metadata. This
keyword calculates ${name_prefix} and ${name_suffix} for
"Deploy_Artifact" and then calls "Deploy_Artifact" to do the real
work of deploying the artifact.</doc>
<status status="PASS" start="2026-08-23T02:10:22.593286" elapsed="0.677860"/>
</kw>
<kw name="Start_Testtool" owner="NetconfKeywords">
<kw name="NetconfKeywords__Deploy_Additional_Schemas" owner="NetconfKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-23T02:10:23.273419" level="INFO">Executing command 'rm -rf schemas 2&gt;&amp;1'.</msg>
<msg time="2026-08-23T02:10:23.318240" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-23T02:10:23.318470" level="INFO">${response} = </msg>
<var>${response}</var>
<arg>rm -rf schemas 2&gt;&amp;1</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-23T02:10:23.273286" elapsed="0.045241"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:23.319634" level="INFO"/>
<arg>${response}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:23.318968" elapsed="0.000762"/>
</kw>
<if>
<branch type="IF" condition="'${schemas}' == 'none'">
<return>
<value>${EMPTY}</value>
<status status="NOT RUN" start="2026-08-23T02:10:23.320184" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:23.319922" elapsed="0.000365"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:23.319875" elapsed="0.000464"/>
</if>
<kw name="Put Directory" owner="SSHLibrary">
<msg time="2026-08-23T02:10:23.364312" level="INFO">[chan 5] Opened sftp connection (server version 3)</msg>
<msg time="2026-08-23T02:10:23.449415" level="INFO">'/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/schemas/yang-ext@2013-07-09.yang' -&gt; '/home/jenkins/./schemas/yang-ext@2013-07-09.yang'</msg>
<msg time="2026-08-23T02:10:23.449476" level="INFO">'/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/schemas/example-action@2016-07-07.yang' -&gt; '/home/jenkins/./schemas/example-action@2016-07-07.yang'</msg>
<msg time="2026-08-23T02:10:23.449515" level="INFO">'/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/schemas/car@2014-08-18.yang' -&gt; '/home/jenkins/./schemas/car@2014-08-18.yang'</msg>
<msg time="2026-08-23T02:10:23.449550" level="INFO">'/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/schemas/car-purchase@2014-08-18.yang' -&gt; '/home/jenkins/./schemas/car-purchase@2014-08-18.yang'</msg>
<msg time="2026-08-23T02:10:23.449585" level="INFO">'/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/schemas/ncmount-l2fib@2016-03-07.yang' -&gt; '/home/jenkins/./schemas/ncmount-l2fib@2016-03-07.yang'</msg>
<msg time="2026-08-23T02:10:23.449620" level="INFO">'/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/schemas/augment-main-a@2014-01-21.yang' -&gt; '/home/jenkins/./schemas/augment-main-a@2014-01-21.yang'</msg>
<msg time="2026-08-23T02:10:23.449654" level="INFO">'/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/schemas/ietf-netconf-monitoring@2010-10-04.yang' -&gt; '/home/jenkins/./schemas/ietf-netconf-monitoring@2010-10-04.yang'</msg>
<msg time="2026-08-23T02:10:23.449688" level="INFO">'/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/schemas/ietf-netconf-monitoring-extension@2013-12-10.yang' -&gt; '/home/jenkins/./schemas/ietf-netconf-monitoring-extension@2013-12-10.yang'</msg>
<msg time="2026-08-23T02:10:23.449797" level="INFO">'/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/schemas/people@2014-08-18.yang' -&gt; '/home/jenkins/./schemas/people@2014-08-18.yang'</msg>
<msg time="2026-08-23T02:10:23.449841" level="INFO">'/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/schemas/test@2014-10-18.yang' -&gt; '/home/jenkins/./schemas/test@2014-10-18.yang'</msg>
<msg time="2026-08-23T02:10:23.449911" level="INFO">'/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/schemas/car-people@2014-08-18.yang' -&gt; '/home/jenkins/./schemas/car-people@2014-08-18.yang'</msg>
<msg time="2026-08-23T02:10:23.449948" level="INFO">'/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/schemas/ietf-inet-types@2010-09-24.yang' -&gt; '/home/jenkins/./schemas/ietf-inet-types@2010-09-24.yang'</msg>
<msg time="2026-08-23T02:10:23.449983" level="INFO">'/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/schemas/main@2014-01-21.yang' -&gt; '/home/jenkins/./schemas/main@2014-01-21.yang'</msg>
<arg>${schemas}</arg>
<arg>destination=./schemas</arg>
<doc>Uploads a directory, including its content, from the local machine to the remote machine.</doc>
<status status="PASS" start="2026-08-23T02:10:23.320661" elapsed="0.129388"/>
</kw>
<kw name="List Directory" owner="SSHLibrary">
<msg time="2026-08-23T02:10:23.453498" level="INFO">13 items:
augment-main-a@2014-01-21.yang
car-people@2014-08-18.yang
car-purchase@2014-08-18.yang
car@2014-08-18.yang
example-action@2016-07-07.yang
ietf-inet-types@2010-09-24.yang
ietf-netconf-monitoring-extension@2013-12-10.yang
ietf-netconf-monitoring@2010-10-04.yang
main@2014-01-21.yang
ncmount-l2fib@2016-03-07.yang
people@2014-08-18.yang
test@2014-10-18.yang
yang-ext@2013-07-09.yang</msg>
<arg>./schemas</arg>
<doc>Returns and logs items in the remote ``path``, optionally filtered with ``pattern``.</doc>
<status status="PASS" start="2026-08-23T02:10:23.450281" elapsed="0.003296"/>
</kw>
<return>
<value>--schemas-dir ./schemas</value>
<status status="PASS" start="2026-08-23T02:10:23.453643" elapsed="0.000051"/>
</return>
<msg time="2026-08-23T02:10:23.453890" level="INFO">${schemas_option} = --schemas-dir ./schemas</msg>
<var>${schemas_option}</var>
<arg>${schemas}</arg>
<doc>Internal keyword for Install_And_Start_TestTool
This deploys the additional schemas if any and returns a
command line argument to be added to the testtool commandline
to tell it to load them. While this code could be integrated
into its only user, I considered the resulting code to be too
unreadable as the actions are quite different in the two
possibilities (additional schemas present versus no additional
schemas present), therefore a separate keyword is used.</doc>
<status status="PASS" start="2026-08-23T02:10:23.272812" elapsed="0.181126"/>
</kw>
<kw name="NetconfKeywords__Deploy_Custom_RPC" owner="NetconfKeywords">
<if>
<branch type="IF" condition="'${rpc_config}' == 'none'">
<return>
<value>${EMPTY}</value>
<status status="PASS" start="2026-08-23T02:10:23.454832" elapsed="0.000062"/>
</return>
<status status="PASS" start="2026-08-23T02:10:23.454678" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:23.454651" elapsed="0.000328"/>
</if>
<kw name="Copy_File_To_Tools_System" owner="SSHKeywords">
<arg>${TOOLS_SYSTEM_1_IP}</arg>
<arg>${rpc_config}</arg>
<arg>/tmp</arg>
<doc>Wrapper keyword to make it easier to copy a file to an Tools specific system</doc>
<status status="NOT RUN" start="2026-08-23T02:10:23.455250" elapsed="0.000035"/>
</kw>
<return>
<value>--rpc-config /tmp/customaction.xml</value>
<status status="NOT RUN" start="2026-08-23T02:10:23.455351" elapsed="0.000021"/>
</return>
<msg time="2026-08-23T02:10:23.458134" level="INFO">${rpc_config_option} = </msg>
<var>${rpc_config_option}</var>
<arg>${rpc_config}</arg>
<doc>Internal keyword for Install_And_Start_TestTool
This deploys the optional custom rpc file.
Drop out of the keyword, returning no command line argument when there
is no rpc file to deploy.</doc>
<status status="PASS" start="2026-08-23T02:10:23.454313" elapsed="0.003858"/>
</kw>
<kw name="Compose_Full_Java_Command" owner="NexusKeywords">
<kw name="Compose_Base_Java_Command" owner="NexusKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${openjdk}""" == "openjdk8"</arg>
<arg>Compose_Dilemma_Filepath</arg>
<arg>${JAVA_8_HOME_CENTOS}/bin/java</arg>
<arg>${JAVA_8_HOME_UBUNTU}/bin/java</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:10:23.460090" elapsed="0.000507"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${openjdk}""" == "openjdk11"</arg>
<arg>Compose_Dilemma_Filepath</arg>
<arg>${JAVA_11_HOME_CENTOS}/bin/java</arg>
<arg>${JAVA_11_HOME_UBUNTU}/bin/java</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:10:23.460889" elapsed="0.000434"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${openjdk}""" == "openjdk17"</arg>
<arg>Compose_Dilemma_Filepath</arg>
<arg>${JAVA_17_HOME_CENTOS}/bin/java</arg>
<arg>${JAVA_17_HOME_UBUNTU}/bin/java</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:10:23.461552" elapsed="0.000443"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Compose_Dilemma_Filepath" owner="NexusKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-23T02:10:23.463770" level="INFO">Executing command 'ls -lA /usr/lib/jvm/java-21-openjdk-amd64/bin/java 2&gt;&amp;1'.</msg>
<msg time="2026-08-23T02:10:23.476194" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-23T02:10:23.476436" level="INFO">${out} = -rwxr-xr-x 1 root root 14456 Apr 26 09:33 /usr/lib/jvm/java-21-openjdk-amd64/bin/java</msg>
<msg time="2026-08-23T02:10:23.476536" level="INFO">${rc} = 0</msg>
<var>${out}</var>
<var>${rc}</var>
<arg>ls -lA ${specific_path} 2&gt;&amp;1</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-23T02:10:23.463527" elapsed="0.013062"/>
</kw>
<if>
<branch type="IF" condition="${rc} == 0">
<return>
<value>${specific_path}</value>
<status status="PASS" start="2026-08-23T02:10:23.477126" elapsed="0.000063"/>
</return>
<status status="PASS" start="2026-08-23T02:10:23.476768" elapsed="0.000500"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:23.476723" elapsed="0.000602"/>
</if>
<return>
<value>${default_path}</value>
<status status="NOT RUN" start="2026-08-23T02:10:23.477403" elapsed="0.000032"/>
</return>
<arg>${JAVA_21_HOME_CENTOS}/bin/java</arg>
<arg>${JAVA_21_HOME_UBUNTU}/bin/java</arg>
<doc>Query active SSH connection, return specific path if it exists else default path.</doc>
<status status="PASS" start="2026-08-23T02:10:23.462981" elapsed="0.014671"/>
</kw>
<msg time="2026-08-23T02:10:23.477750" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>"""${openjdk}""" == "openjdk21"</arg>
<arg>Compose_Dilemma_Filepath</arg>
<arg>${JAVA_21_HOME_CENTOS}/bin/java</arg>
<arg>${JAVA_21_HOME_UBUNTU}/bin/java</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:10:23.462223" elapsed="0.015673"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${out}</var>
<var>${rc}</var>
<arg>java -version 2&gt;&amp;1</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:23.478277" elapsed="0.000050"/>
</kw>
<if>
<branch type="IF" condition="${rc} == 0">
<return>
<value>java</value>
<status status="NOT RUN" start="2026-08-23T02:10:23.478567" elapsed="0.000029"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:23.478486" elapsed="0.000253"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:23.478449" elapsed="0.000341"/>
</if>
<kw name="Execute Command" owner="SSHLibrary">
<var>${java}</var>
<arg>echo $JAVA_HOME/bin/java 2&gt;&amp;1</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:23.479155" elapsed="0.000049"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${out}</var>
<var>${rc}</var>
<arg>${java} -version 2&gt;&amp;1</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:23.479543" elapsed="0.000044"/>
</kw>
<if>
<branch type="IF" condition="${rc} == 0">
<return>
<value>${java}</value>
<status status="NOT RUN" start="2026-08-23T02:10:23.479823" elapsed="0.000062"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:23.479742" elapsed="0.000208"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:23.479706" elapsed="0.000293"/>
</if>
<kw name="Get Environment Variable" owner="OperatingSystem">
<var>${JAVA_HOME}</var>
<arg>JAVA_HOME</arg>
<arg>${EMPTY}</arg>
<doc>Returns the value of an environment variable with the given name.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:23.480313" elapsed="0.000047"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${java}</var>
<arg>"""${JAVA_HOME}"""!=""</arg>
<arg>${JAVA_HOME}/bin/java</arg>
<arg>false</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:23.480706" elapsed="0.000045"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${out}</var>
<var>${rc}</var>
<arg>${java} -version 2&gt;&amp;1</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:23.481259" elapsed="0.000063"/>
</kw>
<if>
<branch type="IF" condition="${rc} == 0">
<return>
<value>${java}</value>
<status status="NOT RUN" start="2026-08-23T02:10:23.481593" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:23.481498" elapsed="0.000178"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:23.481459" elapsed="0.000253"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Unable to find Java; specify \${JDKVERSION}, put it to your PATH or set JAVA_HOME environment variable.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:23.481941" elapsed="0.000030"/>
</kw>
<msg time="2026-08-23T02:10:23.482118" level="INFO">${base_command} = /usr/lib/jvm/java-21-openjdk-amd64/bin/java</msg>
<var>${base_command}</var>
<arg>openjdk=${openjdk}</arg>
<doc>Return string suitable for launching Java programs over SSHLibrary, depending on JRE version needed.
This requires that the SSH connection on which the command is going to be used is active as it is needed for querying files.
Commands composed for one SSH connection shall not be reused on other SSH connections as the two connections may have different Java setups.
Not directly related to Nexus, but versioned Java tools may need this.</doc>
<status status="PASS" start="2026-08-23T02:10:23.459546" elapsed="0.022607"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:23.482832" level="INFO">${full_command} = /usr/lib/jvm/java-21-openjdk-amd64/bin/java -Xmx1G -Djava.security.egd=file:/dev/./urandom -jar netconf-testtool-12.0.0-20260822.190854-265-executable.jar  --device-count 1 --debug true --schemas-dir ...</msg>
<var>${full_command}</var>
<arg>${base_command} ${options}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:23.482364" elapsed="0.000530"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:23.483468" level="INFO">/usr/lib/jvm/java-21-openjdk-amd64/bin/java -Xmx1G -Djava.security.egd=file:/dev/./urandom -jar netconf-testtool-12.0.0-20260822.190854-265-executable.jar  --device-count 1 --debug true --schemas-dir ./schemas  --md-sal true</msg>
<arg>${full_command}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:23.483112" elapsed="0.000421"/>
</kw>
<return>
<value>${full_command}</value>
<status status="PASS" start="2026-08-23T02:10:23.483592" elapsed="0.000039"/>
</return>
<msg time="2026-08-23T02:10:23.483804" level="INFO">${command} = /usr/lib/jvm/java-21-openjdk-amd64/bin/java -Xmx1G -Djava.security.egd=file:/dev/./urandom -jar netconf-testtool-12.0.0-20260822.190854-265-executable.jar  --device-count 1 --debug true --schemas-dir ...</msg>
<var>${command}</var>
<arg>${java_options} -jar ${filename} ${tool_options} --device-count ${device-count} --debug ${debug} ${schemas_option} ${rpc_config_option} --md-sal ${mdsal}</arg>
<doc>Return full Bash command to run Java with given options.
This requires that the SSH connection on which the command is going to be used is active as it is needed for querying files.
The options may include JVM options, application command line arguments, Bash redirects and other constructs.</doc>
<status status="PASS" start="2026-08-23T02:10:23.458484" elapsed="0.025380"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:23.484433" level="INFO">Running testtool: /usr/lib/jvm/java-21-openjdk-amd64/bin/java -Xmx1G -Djava.security.egd=file:/dev/./urandom -jar netconf-testtool-12.0.0-20260822.190854-265-executable.jar  --device-count 1 --debug true --schemas-dir ./schemas  --md-sal true</msg>
<arg>Running testtool: ${command}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:23.484084" elapsed="0.000412"/>
</kw>
<kw name="Get Log File Name" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:10:23.488348" level="INFO">${name} = netconf-gate-userfeatures-txt-CRUD-CRUD</msg>
<var>${name}</var>
<arg>"""${SUITE_NAME}""".replace(" ","-").replace("/","-").replace(".","-")</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-23T02:10:23.487812" elapsed="0.000575"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:10:23.491102" level="INFO">${suffix} = </msg>
<var>${suffix}</var>
<arg>'${testcase}' != ''</arg>
<arg>--${testcase}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T02:10:23.488613" elapsed="0.002517"/>
</kw>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-23T02:10:23.491484" level="INFO">${date} = 2026-08-23 02:10:23.491</msg>
<var>${date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-23T02:10:23.491298" elapsed="0.000213"/>
</kw>
<kw name="Convert Date" owner="DateTime">
<msg time="2026-08-23T02:10:23.491994" level="INFO">${timestamp} = 1787451023.491</msg>
<var>${timestamp}</var>
<arg>${date}</arg>
<arg>epoch</arg>
<doc>Converts between supported `date formats`.</doc>
<status status="PASS" start="2026-08-23T02:10:23.491660" elapsed="0.000361"/>
</kw>
<return>
<value>${testtool}--${name}${suffix}.${timestamp}.log</value>
<status status="PASS" start="2026-08-23T02:10:23.492068" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:10:23.492301" level="INFO">${logfile} = testtool--netconf-gate-userfeatures-txt-CRUD-CRUD.1787451023.491.log</msg>
<var>${logfile}</var>
<arg>testtool</arg>
<doc>Get the name of the suite sanitized to be usable as a part of filename.
These names are used to constructs names of the log files produced
by the testing tools so two suites using a tool wont overwrite the
log files if they happen to run in one job.</doc>
<status status="PASS" start="2026-08-23T02:10:23.484811" elapsed="0.007516"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:23.497142" level="INFO">${testtool_log} = testtool--netconf-gate-userfeatures-txt-CRUD-CRUD.1787451023.491.log</msg>
<arg>${testtool_log}</arg>
<arg>${logfile}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-23T02:10:23.492496" elapsed="0.004771"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:10:23.518404" level="INFO">/usr/lib/jvm/java-21-openjdk-amd64/bin/java -Xmx1G -Djava.security.egd=file:/dev/./urandom -jar netconf-testtool-12.0.0-20260822.190854-265-executable.jar  --device-count 1 --debug true --schemas-dir ./schemas  --md-sal true &gt;testtool--netconf-gate-userfeatures-txt-CRUD-CRUD.1787451023.491.log 2&gt;&amp;1</msg>
<arg>${command} &gt;${logfile} 2&gt;&amp;1</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:10:23.497436" elapsed="0.021037"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:23.522529" level="INFO">${NetconfKeywords__testtool_device_count} = 1</msg>
<arg>${NetconfKeywords__testtool_device_count}</arg>
<arg>${device-count}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-23T02:10:23.518650" elapsed="0.003926"/>
</kw>
<kw name="Perform_Operation_On_Each_Device" owner="NetconfKeywords">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-23T02:10:23.523434" level="INFO">${current_Date} = 2026-08-23 02:10:23.523</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-23T02:10:23.523267" elapsed="0.000193"/>
</kw>
<kw name="Add Time To Date" owner="DateTime">
<msg time="2026-08-23T02:10:23.523987" level="INFO">${deadline_Date} = 2026-08-23 02:55:23.523</msg>
<var>${deadline_Date}</var>
<arg>${current_Date}</arg>
<arg>${timeout}</arg>
<doc>Adds time to date and returns the resulting date.</doc>
<status status="PASS" start="2026-08-23T02:10:23.523608" elapsed="0.000405"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:23.528570" level="INFO">${current_port} = 17830</msg>
<arg>${current_port}</arg>
<arg>${BASE_NETCONF_DEVICE_PORT}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-23T02:10:23.524177" elapsed="0.004439"/>
</kw>
<kw name="Repeat Keyword" owner="BuiltIn">
<msg time="2026-08-23T02:10:23.529116" level="INFO">Repeating keyword, round 1/1.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-23T02:10:23.530288" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:23.530170" elapsed="0.000164"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:23.530149" elapsed="0.000209"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-23T02:10:23.530658" level="INFO">${current_Date} = 2026-08-23 02:10:23.531</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-23T02:10:23.530503" elapsed="0.000181"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-23T02:10:23.531169" level="INFO">${ellapsed_seconds} = 2699.992</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-23T02:10:23.530836" elapsed="0.000359"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:23.531528" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:23.531266" elapsed="0.000316"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:23.531247" elapsed="0.000359"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-23T02:10:23.529925" elapsed="0.001727"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:10:23.532202" level="INFO">${number} = 1</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-23T02:10:23.531816" elapsed="0.000413"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:10:23.533904" level="INFO">${number} = 1</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-23T02:10:23.533304" elapsed="0.000629"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:10:23.535773" level="INFO">${device-port} = 17830</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-23T02:10:23.534953" elapsed="0.000847"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-23T02:10:23.539214" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-23T02:10:23.551330" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-23T02:10:23.551430" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-23T02:10:23.539115" elapsed="0.012354"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:23.551924" elapsed="0.000026"/>
</kw>
<msg time="2026-08-23T02:10:23.551987" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-23T02:10:23.551547" elapsed="0.000529">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-23T02:10:23.551527" elapsed="0.000594">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-23T02:10:23.538766" elapsed="0.013493">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:10:23.538280" elapsed="0.014077"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-23T02:10:23.553058" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17830 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-23T02:10:23.612049" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-23T02:10:23.612263" level="INFO">${output} = 0</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-23T02:10:23.552724" elapsed="0.059575"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-23T02:10:23.612382" elapsed="0.000078"/>
</return>
<msg time="2026-08-23T02:10:23.612769" level="INFO">${count} = 0</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-23T02:10:23.536639" elapsed="0.076172"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<msg time="2026-08-23T02:10:23.613957" level="FAIL">0 != 1</msg>
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="FAIL" start="2026-08-23T02:10:23.613111" elapsed="0.001006">0 != 1</status>
</kw>
<arg>${device-port}</arg>
<status status="FAIL" start="2026-08-23T02:10:23.536005" elapsed="0.078281">0 != 1</status>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="FAIL" start="2026-08-23T02:10:23.534609" elapsed="0.079774">0 != 1</status>
</kw>
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:10:24.618192" level="INFO">${device-port} = 17830</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-23T02:10:24.616140" elapsed="0.002124"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-23T02:10:24.624317" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-23T02:10:24.637181" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-23T02:10:24.637320" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-23T02:10:24.624162" elapsed="0.013194"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:24.638299" elapsed="0.000058"/>
</kw>
<msg time="2026-08-23T02:10:24.638436" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-23T02:10:24.637500" elapsed="0.001146">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-23T02:10:24.637448" elapsed="0.001304">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-23T02:10:24.623746" elapsed="0.015345">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:10:24.622495" elapsed="0.016815"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-23T02:10:24.640941" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17830 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-23T02:10:24.690626" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-23T02:10:24.691141" level="INFO">${output} = 0</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-23T02:10:24.640169" elapsed="0.051056"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-23T02:10:24.691416" elapsed="0.000143"/>
</return>
<msg time="2026-08-23T02:10:24.692270" level="INFO">${count} = 0</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-23T02:10:24.620200" elapsed="0.072168"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<msg time="2026-08-23T02:10:24.694402" level="FAIL">0 != 1</msg>
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="FAIL" start="2026-08-23T02:10:24.693018" elapsed="0.001599">0 != 1</status>
</kw>
<arg>${device-port}</arg>
<status status="FAIL" start="2026-08-23T02:10:24.618686" elapsed="0.076228">0 != 1</status>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="FAIL" start="2026-08-23T02:10:24.615166" elapsed="0.079895">0 != 1</status>
</kw>
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:10:25.698747" level="INFO">${device-port} = 17830</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-23T02:10:25.696786" elapsed="0.002031"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-23T02:10:25.704733" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-23T02:10:25.717909" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-23T02:10:25.718073" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-23T02:10:25.704581" elapsed="0.013532"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:25.718707" elapsed="0.000037"/>
</kw>
<msg time="2026-08-23T02:10:25.718795" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-23T02:10:25.718230" elapsed="0.000736">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-23T02:10:25.718195" elapsed="0.000846">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-23T02:10:25.704187" elapsed="0.015041">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:10:25.703389" elapsed="0.015975"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-23T02:10:25.720346" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17830 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-23T02:10:25.766515" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-23T02:10:25.767058" level="INFO">${output} = 0</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-23T02:10:25.719917" elapsed="0.047224"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-23T02:10:25.767324" elapsed="0.000143"/>
</return>
<msg time="2026-08-23T02:10:25.768193" level="INFO">${count} = 0</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-23T02:10:25.700729" elapsed="0.067557"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<msg time="2026-08-23T02:10:25.770775" level="FAIL">0 != 1</msg>
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="FAIL" start="2026-08-23T02:10:25.768924" elapsed="0.002222">0 != 1</status>
</kw>
<arg>${device-port}</arg>
<status status="FAIL" start="2026-08-23T02:10:25.699272" elapsed="0.072247">0 != 1</status>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="FAIL" start="2026-08-23T02:10:25.695815" elapsed="0.075918">0 != 1</status>
</kw>
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:10:26.775911" level="INFO">${device-port} = 17830</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-23T02:10:26.773966" elapsed="0.002017"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-23T02:10:26.781524" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-23T02:10:26.794087" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-23T02:10:26.794268" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-23T02:10:26.781367" elapsed="0.012943"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:26.794973" elapsed="0.000039"/>
</kw>
<msg time="2026-08-23T02:10:26.795065" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-23T02:10:26.794441" elapsed="0.000771">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-23T02:10:26.794403" elapsed="0.000878">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-23T02:10:26.780789" elapsed="0.014686">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:10:26.780058" elapsed="0.015568"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-23T02:10:26.796645" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17830 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-23T02:10:26.862654" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-23T02:10:26.863278" level="INFO">${output} = 0</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-23T02:10:26.796188" elapsed="0.067172"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-23T02:10:26.863563" elapsed="0.000149"/>
</return>
<msg time="2026-08-23T02:10:26.864427" level="INFO">${count} = 0</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-23T02:10:26.777913" elapsed="0.086608"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<msg time="2026-08-23T02:10:26.867186" level="FAIL">0 != 1</msg>
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="FAIL" start="2026-08-23T02:10:26.865198" elapsed="0.002300">0 != 1</status>
</kw>
<arg>${device-port}</arg>
<status status="FAIL" start="2026-08-23T02:10:26.776397" elapsed="0.091515">0 != 1</status>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="FAIL" start="2026-08-23T02:10:26.772442" elapsed="0.095695">0 != 1</status>
</kw>
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:10:27.871991" level="INFO">${device-port} = 17830</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-23T02:10:27.869955" elapsed="0.002107"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-23T02:10:27.877797" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-23T02:10:27.890958" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-23T02:10:27.891181" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-23T02:10:27.877625" elapsed="0.013615"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:27.892175" elapsed="0.000057"/>
</kw>
<msg time="2026-08-23T02:10:27.892310" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-23T02:10:27.891420" elapsed="0.001084">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-23T02:10:27.891369" elapsed="0.001720">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-23T02:10:27.877158" elapsed="0.016218">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:10:27.876237" elapsed="0.017381"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-23T02:10:27.895333" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17830 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-23T02:10:27.938963" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-23T02:10:27.939447" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-23T02:10:27.894517" elapsed="0.045008"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-23T02:10:27.939715" elapsed="0.000196"/>
</return>
<msg time="2026-08-23T02:10:27.940592" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-23T02:10:27.874107" elapsed="0.066582"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-23T02:10:27.941362" elapsed="0.001876"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-23T02:10:27.872476" elapsed="0.071028"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-23T02:10:27.868996" elapsed="0.074616"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-23T02:10:23.534099" elapsed="4.409612"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-23T02:10:23.532841" elapsed="4.411041"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:10:23.532384" elapsed="4.411634"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:10:27.945409" level="INFO">${next} = 17831</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-23T02:10:27.944380" elapsed="0.001093"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:27.946674" level="INFO">${current_port} = 17831</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-23T02:10:27.945946" elapsed="0.000770"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-23T02:10:23.529314" elapsed="4.417462"/>
</kw>
<arg>${count} times</arg>
<arg>NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device</arg>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the specified keyword multiple times.</doc>
<status status="PASS" start="2026-08-23T02:10:23.528779" elapsed="4.418049"/>
</kw>
<arg>NetconfKeywords__Wait_Device_Is_Up_And_Running</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-23T02:10:23.522785" elapsed="4.424126"/>
</kw>
<arg>${filename}</arg>
<arg>${device-count}</arg>
<arg>${debug}</arg>
<arg>${schemas}</arg>
<arg>${rpc_config}</arg>
<arg>${tool_options}</arg>
<arg>${java_options}</arg>
<arg>${mdsal}</arg>
<arg>log_response=${log_response}</arg>
<doc>Arrange to collect tool's output into a log file.
Will use specific /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/schemas unless argument resolves to 'none',
which signifies that there are no additional schemas to be deployed.
If so the directory for the additional schemas is deleted on the
remote machine and the additional schemas argument is left out.</doc>
<status status="PASS" start="2026-08-23T02:10:23.271645" elapsed="4.675319"/>
</kw>
<arg>device-count=1</arg>
<arg>schemas=/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/schemas</arg>
<arg>mdsal=true</arg>
<doc>Install and run testtool.</doc>
<status status="PASS" start="2026-08-23T02:10:22.578917" elapsed="5.368172"/>
</kw>
<doc>Deploy and start test tool, then wait for all its devices to become online.</doc>
<status status="PASS" start="2026-08-23T02:10:22.504825" elapsed="5.442391"/>
</test>
<test id="s1-s4-s2-t2" name="Check_Device_Is_Not_Configured_At_Beginning" line="52">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-08-23T02:10:27.951052" elapsed="0.000223"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:10:27.950752" elapsed="0.000580"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:10:27.952391" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:27.952263" elapsed="0.000179"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:27.952240" elapsed="0.000227"/>
</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-08-23T02:10:27.957723" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:27.957609" elapsed="0.000162"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:27.957591" elapsed="0.000203"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:10:27.958877" 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-08-23T02:10:27.958465" elapsed="0.000441"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:10:27.959369" 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-08-23T02:10:27.959065" elapsed="0.000331"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:10:27.959441" elapsed="0.000032"/>
</return>
<msg time="2026-08-23T02:10:27.959607" 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-08-23T02:10:27.958081" elapsed="0.001552"/>
</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-08-23T02:10:27.965281" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:27.965170" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:27.965151" elapsed="0.000200"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:10:27.966616" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:27.966509" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:27.966490" elapsed="0.000194"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:10:27.967278" level="INFO">${karaf_connection_index} = 11</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-08-23T02:10:27.966827" elapsed="0.000480"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:10:27.967744" level="INFO">${current_connection_index} = 13</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-08-23T02:10:27.967469" elapsed="0.000303"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:10:27.997157" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:10:27.968373" elapsed="0.029024"/>
</kw>
<msg time="2026-08-23T02:10:27.997623" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:10:27.997674" 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 "n "e "t "c "o "n "f "...</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-08-23T02:10:27.967962" elapsed="0.029751"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:10:28.019263" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "I "s "_ "N "o "t "_ "C "o "n "f "i "g "u "r "e "d "_ "A "t "_ "B "e "g "i "n "n "i "n "g "[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-08-23T02:10:27.998465" elapsed="0.021150"/>
</kw>
<msg time="2026-08-23T02:10:28.019910" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:10:28.019962" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "I "s "_ "N "o "t ...</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-08-23T02:10:27.997971" elapsed="0.022029"/>
</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-08-23T02:10:28.020554" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:28.020212" elapsed="0.000430"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:28.020172" elapsed="0.000502"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:28.021356" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "I "s "_ "N "o "t "_ "C "o "n "f "i "g "u "r "e "d "_ "A "t "_ "B "e "g "i "n "n "i "n "g "[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-08-23T02:10:28.020821" elapsed="0.000614"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:28.021723" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:28.021503" elapsed="0.000299"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:28.021484" elapsed="0.000343"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:10:28.021892" elapsed="0.000045"/>
</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-08-23T02:10:28.025594" elapsed="0.000154"/>
</kw>
<msg time="2026-08-23T02:10:28.025827" 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-08-23T02:10:28.024791" elapsed="0.001175"/>
</kw>
<kw name="Open 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-08-23T02:10:28.027198" elapsed="0.000040"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:28.028525" elapsed="0.000040"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:10:28.022939" elapsed="0.005710"/>
</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-08-23T02:10:28.022240" elapsed="0.006542"/>
</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-08-23T02:10:27.966208" elapsed="0.062692"/>
</kw>
<msg time="2026-08-23T02:10:28.028998" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:10:28.029043" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "I "s "_ "N "o "t ...</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-08-23T02:10:27.965501" elapsed="0.063580"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:10:28.029267" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-08-23T02:10:28.029158" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:28.029139" 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-08-23T02:10:28.029761" 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-08-23T02:10:28.030157" elapsed="0.000026"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:10:28.030231" 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-08-23T02:10:27.964814" elapsed="0.065543"/>
</kw>
<msg time="2026-08-23T02:10:28.030454" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:10:28.030499" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "I "s "_ "N "o "t ...</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-08-23T02:10:27.960031" elapsed="0.070510"/>
</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-08-23T02:10:28.031001" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:28.030620" elapsed="0.000437"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:28.030603" elapsed="0.000477"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:10:27.959888" elapsed="0.071216"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:10:27.959693" elapsed="0.071447"/>
</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-08-23T02:10:27.957238" elapsed="0.073962"/>
</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-08-23T02:10:27.951956" elapsed="0.079302"/>
</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-08-23T02:10:27.951482" elapsed="0.079822"/>
</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-08-23T02:10:27.948307" elapsed="0.083089"/>
</kw>
<kw name="Check_Device_Has_No_Netconf_Connector" owner="NetconfKeywords">
<kw name="Count_Netconf_Connectors_For_Device" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:28.042785" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:28.040670" elapsed="0.002142"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:28.043163" elapsed="0.000022"/>
</kw>
<var name="${nv}"/>
<status status="NOT RUN" start="2026-08-23T02:10:28.043011" elapsed="0.000210"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="NOT RUN" start="2026-08-23T02:10:28.042887" elapsed="0.000360"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:28.043544" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:28.043307" elapsed="0.000295"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:28.044341" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:28.043869" elapsed="0.000499"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:28.043626" elapsed="0.000777"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:28.044590" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:28.044428" elapsed="0.000217"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:28.043291" elapsed="0.001374"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:28.044700" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:10:28.044862" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:10:28.040216" elapsed="0.004673"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:28.044936" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:10:28.045164" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:10:28.039710" elapsed="0.005480"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:28.052425" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:28.052176" elapsed="0.000295"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:28.052887" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:28.052626" elapsed="0.000305"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:28.060620" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:28.060677" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '407'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:10:28.060786" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:10:28.055062" elapsed="0.006144">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:28.052997" elapsed="0.008294">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:28.061477" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:28.061325" elapsed="0.000221"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:28.052979" elapsed="0.008591">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:28.061962" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:28.062129" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:28.062092" elapsed="0.000079"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:28.062074" elapsed="0.000119"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:28.062336" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:28.062407" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:10:28.047833" elapsed="0.014699">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:28.062603" elapsed="0.000016"/>
</return>
<var>${mounts}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:28.045409" elapsed="0.017289">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${mounts}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:28.062880" elapsed="0.000023"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${actual_count}</var>
<arg>len('''${mounts}'''.split('"node-id": "${device_name}"'))-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:28.063050" elapsed="0.000021"/>
</kw>
<return>
<value>${actual_count}</value>
<status status="NOT RUN" start="2026-08-23T02:10:28.063113" elapsed="0.000015"/>
</return>
<var>${count}</var>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Count all instances of the specified device in the Netconf topology (usually 0 or 1).</doc>
<status status="FAIL" start="2026-08-23T02:10:28.032035" elapsed="0.031174">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${count}</arg>
<arg>0</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:28.063370" elapsed="0.000020"/>
</kw>
<arg>${device_name}</arg>
<doc>Check that there are no instances of the specified device in the Netconf topology.</doc>
<status status="FAIL" start="2026-08-23T02:10:28.031615" elapsed="0.031861">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<doc>Sanity check making sure our device is not there. Fail if found.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-08-23T02:10:27.947616" elapsed="0.116007">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</test>
<test id="s1-s4-s2-t3" name="Configure_Device_On_Netconf" line="57">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-08-23T02:10:28.067153" elapsed="0.000213"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:10:28.066888" elapsed="0.000534"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:10:28.068772" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:28.068618" elapsed="0.000245"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:28.068591" elapsed="0.000306"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:10:28.075720" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:28.075614" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:28.075596" elapsed="0.000192"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:10:28.076784" 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-08-23T02:10:28.076403" elapsed="0.000407"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:10:28.077280" 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-08-23T02:10:28.076986" elapsed="0.000320"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:10:28.077350" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:10:28.077502" 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-08-23T02:10:28.076028" 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-08-23T02:10:28.082996" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:28.082887" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:28.082867" 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-08-23T02:10:28.084283" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:28.084177" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:28.084159" elapsed="0.000192"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:10:28.084913" level="INFO">${karaf_connection_index} = 11</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-08-23T02:10:28.084492" elapsed="0.000480"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:10:28.085398" level="INFO">${current_connection_index} = 13</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-08-23T02:10:28.085131" elapsed="0.000293"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:10:28.115346" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:10:28.086000" elapsed="0.029528"/>
</kw>
<msg time="2026-08-23T02:10:28.115714" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:10:28.115761" 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 "n "e "t "c "o "n "f "...</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-08-23T02:10:28.085581" elapsed="0.030217"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:10:28.134106" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "o "n "f "i "g "u "r "e "_ "D "e "v "i "c "e "_ "O "n "_ "N "e "t "c "o "n "f "[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-08-23T02:10:28.116521" elapsed="0.017778"/>
</kw>
<msg time="2026-08-23T02:10:28.134483" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:10:28.134532" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "o "n "f "i "g "u "r "e "_ "D "e "v "i "c "e "_ "O "n ...</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-08-23T02:10:28.115991" elapsed="0.018581"/>
</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-08-23T02:10:28.134914" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:28.134649" elapsed="0.000363"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:28.134629" elapsed="0.000412"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:28.135584" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "o "n "f "i "g "u "r "e "_ "D "e "v "i "c "e "_ "O "n "_ "N "e "t "c "o "n "f "[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-08-23T02:10:28.135184" elapsed="0.000468"/>
</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-08-23T02:10:28.135952" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:28.135718" elapsed="0.000315"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:28.135701" elapsed="0.000357"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:10:28.136091" elapsed="0.000027"/>
</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-08-23T02:10:28.139453" elapsed="0.000147"/>
</kw>
<msg time="2026-08-23T02:10:28.139676" 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-08-23T02:10:28.138709" elapsed="0.001070"/>
</kw>
<kw name="Open 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-08-23T02:10:28.140925" elapsed="0.000039"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:28.142291" elapsed="0.000040"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:10:28.136959" elapsed="0.005453"/>
</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-08-23T02:10:28.136344" elapsed="0.006195"/>
</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-08-23T02:10:28.083874" elapsed="0.058769"/>
</kw>
<msg time="2026-08-23T02:10:28.142734" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:10:28.142778" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "o "n "f "i "g "u "r "e "_ "D "e "v "i "c "e "_ "O "n ...</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-08-23T02:10:28.083214" elapsed="0.059600"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:10:28.143024" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:10:28.142908" elapsed="0.000175"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:28.142889" elapsed="0.000218"/>
</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-08-23T02:10:28.143495" 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-08-23T02:10:28.143823" elapsed="0.000136"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:10:28.144043" 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-08-23T02:10:28.082506" elapsed="0.061648"/>
</kw>
<msg time="2026-08-23T02:10:28.144246" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:10:28.144290" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "o "n "f "i "g "u "r "e "_ "D "e "v "i "c "e "_ "O "n ...</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-08-23T02:10:28.077910" elapsed="0.066417"/>
</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-08-23T02:10:28.144646" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:28.144401" elapsed="0.000299"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:28.144383" elapsed="0.000340"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:10:28.077747" elapsed="0.066999"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:10:28.077579" elapsed="0.067196"/>
</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-08-23T02:10:28.075130" elapsed="0.069696"/>
</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-08-23T02:10:28.068214" elapsed="0.076687"/>
</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-08-23T02:10:28.067595" elapsed="0.077350"/>
</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-08-23T02:10:28.064522" elapsed="0.080475"/>
</kw>
<kw name="Configure_Device_In_Netconf" owner="NetconfKeywords">
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T02:10:28.164498" elapsed="0.000436"/>
</kw>
<msg time="2026-08-23T02:10:28.164984" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:10:28.164143" elapsed="0.000890"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return scandium if vanadium is at least ${lower_bound},
return calcium otherwise.</doc>
<status status="PASS" start="2026-08-23T02:10:28.163720" elapsed="0.001388"/>
</kw>
<msg time="2026-08-23T02:10:28.165150" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:10:28.154742" elapsed="0.010450"/>
</kw>
<msg time="2026-08-23T02:10:28.165292" level="INFO">${version} = scandium</msg>
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-08-23T02:10:28.154418" elapsed="0.010898"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:10:28.166214" level="INFO">${mapping} = {'DEVICE_IP': '10.30.170.120', 'DEVICE_NAME': 'netconf-test-device', 'DEVICE_PORT': '17830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'topsecret', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/t...</msg>
<var>${mapping}</var>
<arg>DEVICE_IP=${device_address}</arg>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>DEVICE_PORT=${device_port}</arg>
<arg>DEVICE_USER=${device_user}</arg>
<arg>DEVICE_PASSWORD=${device_password}</arg>
<arg>DEVICE_KEY=${device_key}</arg>
<arg>SCHEMA_DIRECTORY=${schema_directory}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-23T02:10:28.165476" elapsed="0.000766"/>
</kw>
<if>
<branch type="IF" condition="'${http_method}'=='post'">
<kw name="Post_As_Xml_Templated" owner="TemplatedRequests">
<arg>folder=${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</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="NOT RUN" start="2026-08-23T02:10:28.166637" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:28.166329" elapsed="0.000375"/>
</branch>
<branch type="ELSE">
<kw name="Put_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Put_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-08-23T02:10:28.198419" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:28.198047" elapsed="0.000400"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T02:10:28.199203" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-23T02:10:28.198954" elapsed="0.000333">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-23T02:10:28.199386" 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-08-23T02:10:28.198608" elapsed="0.000845"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:10:28.200028" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/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-08-23T02:10:28.199622" elapsed="0.000433"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:10:28.200362" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/location.uri"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:10:28.200508" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:10:28.200215" elapsed="0.000318"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:28.200953" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:28.200688" 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-08-23T02:10:28.201949" level="INFO">mapping: {'DEVICE_IP': '10.30.170.120', 'DEVICE_NAME': 'netconf-test-device', 'DEVICE_PORT': '17830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'topsecret', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:28.201673" elapsed="0.000322"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:10:28.202412" 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-08-23T02:10:28.202150" elapsed="0.000287"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:10:28.203400" level="INFO">${value} = 10.30.170.120</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:10:28.202798" elapsed="0.000629"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:10:28.204664" level="INFO">${encoded} = 10.30.170.120</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-08-23T02:10:28.204102" elapsed="0.000605"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:10:28.204856" elapsed="0.000034"/>
</return>
<msg time="2026-08-23T02:10:28.205108" level="INFO">${encoded_value} = 10.30.170.120</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-08-23T02:10:28.203611" elapsed="0.001523"/>
</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-08-23T02:10:28.205288" elapsed="0.000589"/>
</kw>
<var name="${key}">DEVICE_IP</var>
<var name="${value}">10.30.170.120</var>
<status status="PASS" start="2026-08-23T02:10:28.202665" elapsed="0.003256"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:10:28.206724" level="INFO">${value} = netconf-test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:10:28.206169" elapsed="0.000581"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:10:28.208370" level="INFO">${encoded} = netconf-test-device</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-08-23T02:10:28.207684" elapsed="0.000730"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:10:28.208544" elapsed="0.000034"/>
</return>
<msg time="2026-08-23T02:10:28.208791" level="INFO">${encoded_value} = netconf-test-device</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-08-23T02:10:28.207008" elapsed="0.001809"/>
</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-08-23T02:10:28.208987" elapsed="0.000538"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:10:28.206036" elapsed="0.003531"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:10:28.210400" level="INFO">${value} = 17830</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:10:28.209811" elapsed="0.000616"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:10:28.211810" level="INFO">${encoded} = 17830</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-08-23T02:10:28.211099" elapsed="0.000872"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:10:28.212101" elapsed="0.000032"/>
</return>
<msg time="2026-08-23T02:10:28.212344" level="INFO">${encoded_value} = 17830</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-08-23T02:10:28.210613" elapsed="0.001757"/>
</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-08-23T02:10:28.212520" elapsed="0.000557"/>
</kw>
<var name="${key}">DEVICE_PORT</var>
<var name="${value}">17830</var>
<status status="PASS" start="2026-08-23T02:10:28.209680" elapsed="0.003438"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:10:28.214117" level="INFO">${value} = admin</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:10:28.213401" elapsed="0.000748"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:10:28.215426" level="INFO">${encoded} = admin</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-08-23T02:10:28.214866" elapsed="0.000604"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:10:28.215601" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T02:10:28.215932" level="INFO">${encoded_value} = admin</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-08-23T02:10:28.214334" elapsed="0.001627"/>
</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-08-23T02:10:28.216110" elapsed="0.000530"/>
</kw>
<var name="${key}">DEVICE_USER</var>
<var name="${value}">admin</var>
<status status="PASS" start="2026-08-23T02:10:28.213230" elapsed="0.003453"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:10:28.217491" level="INFO">${value} = topsecret</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:10:28.216942" elapsed="0.000575"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:10:28.218802" level="INFO">${encoded} = topsecret</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-08-23T02:10:28.218255" elapsed="0.000607"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:10:28.218996" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T02:10:28.219240" level="INFO">${encoded_value} = topsecret</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-08-23T02:10:28.217700" elapsed="0.001565"/>
</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-08-23T02:10:28.219442" elapsed="0.000625"/>
</kw>
<var name="${key}">DEVICE_PASSWORD</var>
<var name="${value}">topsecret</var>
<status status="PASS" start="2026-08-23T02:10:28.216795" elapsed="0.003316"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:10:28.220913" level="INFO">${value} = device-key</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:10:28.220352" elapsed="0.000587"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:10:28.222241" level="INFO">${encoded} = device-key</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-08-23T02:10:28.221589" elapsed="0.000694"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:10:28.222413" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T02:10:28.222653" level="INFO">${encoded_value} = device-key</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-08-23T02:10:28.221127" elapsed="0.001551"/>
</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-08-23T02:10:28.222825" elapsed="0.000551"/>
</kw>
<var name="${key}">DEVICE_KEY</var>
<var name="${value}">device-key</var>
<status status="PASS" start="2026-08-23T02:10:28.220223" elapsed="0.003220"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:10:28.224287" level="INFO">${value} = /tmp/schema</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:10:28.223691" elapsed="0.000622"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:10:28.227357" level="INFO">${encoded} = /tmp/schema</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-08-23T02:10:28.224996" elapsed="0.002405"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:10:28.227563" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T02:10:28.227811" level="INFO">${encoded_value} = /tmp/schema</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-08-23T02:10:28.224493" elapsed="0.003347"/>
</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-08-23T02:10:28.228037" elapsed="0.000532"/>
</kw>
<var name="${key}">SCHEMA_DIRECTORY</var>
<var name="${value}">/tmp/schema</var>
<status status="PASS" start="2026-08-23T02:10:28.223562" elapsed="0.005049"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:10:28.229412" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:10:28.228869" elapsed="0.000569"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:10:28.230659" level="INFO">${encoded} = /rests</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-08-23T02:10:28.230122" elapsed="0.000580"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:10:28.230832" elapsed="0.000054"/>
</return>
<msg time="2026-08-23T02:10:28.231100" level="INFO">${encoded_value} = /rests</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-08-23T02:10:28.229619" elapsed="0.001506"/>
</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-08-23T02:10:28.231273" elapsed="0.000555"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-23T02:10:28.228722" elapsed="0.003211"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-23T02:10:28.202485" elapsed="0.029484"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-23T02:10:28.232013" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:10:28.232177" level="INFO">${mapping_to_use} = {'DEVICE_IP': '10.30.170.120', 'DEVICE_NAME': 'netconf-test-device', 'DEVICE_PORT': '17830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'topsecret', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/t...</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-23T02:10:28.201356" elapsed="0.030882"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:28.201064" elapsed="0.031208"/>
</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-08-23T02:10:28.232450" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:28.232300" elapsed="0.000205"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:28.201045" elapsed="0.031482"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:10:28.233528" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device</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-08-23T02:10:28.232667" elapsed="0.000889"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T02:10:28.233605" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="PASS" start="2026-08-23T02:10:28.197422" elapsed="0.036306"/>
</kw>
<msg time="2026-08-23T02:10:28.233781" 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-08-23T02:10:28.184827" elapsed="0.049009"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:28.246347" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:28.258754" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:28.271315" 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-08-23T02:10:28.271507" 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-08-23T02:10:28.271708" 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-08-23T02:10:28.272098" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:28.271955" elapsed="0.000199"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:28.271938" 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-08-23T02:10:28.272312" 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-08-23T02:10:28.272475" 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-08-23T02:10:28.272635" elapsed="0.000019"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T02:10:28.271907" elapsed="0.000780"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T02:10:28.271790" 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-08-23T02:10:28.272868" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:28.272944" elapsed="0.000016"/>
</return>
<msg time="2026-08-23T02:10:28.273065" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device</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-08-23T02:10:28.180584" elapsed="0.092542"/>
</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-08-23T02:10:28.299485" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/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-08-23T02:10:28.299108" elapsed="0.000405"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T02:10:28.300309" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/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-08-23T02:10:28.300063" elapsed="0.000323">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/data.xml' does not exist.</status>
</kw>
<msg time="2026-08-23T02:10:28.300481" 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-08-23T02:10:28.299672" elapsed="0.000833"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:10:28.301073" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/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-08-23T02:10:28.300667" elapsed="0.000433"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:10:28.301392" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/data.xml"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/data.xml&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:10:28.301547" level="INFO">${template} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;$DEVICE_NAME&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;$DEVICE_IP&lt;/host&gt;
    &lt;port&gt;$DEVI...</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:10:28.301257" elapsed="0.000318"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:28.301991" level="INFO">&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;$DEVICE_NAME&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;$DEVICE_IP&lt;/host&gt;
    &lt;port&gt;$DEVICE_PORT&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;$DEVICE_USER&lt;/username&gt;
      &lt;password&gt;$DEVICE_PASSWORD&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt;
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:28.301726" elapsed="0.000317"/>
</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-08-23T02:10:28.302396" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:28.302108" elapsed="0.000346"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:28.302938" level="INFO">${mapping_to_use} = {'DEVICE_IP': '10.30.170.120', 'DEVICE_NAME': 'netconf-test-device', 'DEVICE_PORT': '17830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'topsecret', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/t...</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-08-23T02:10:28.302624" elapsed="0.000342"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:28.302480" elapsed="0.000522"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:28.302090" elapsed="0.000933"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:10:28.303899" level="INFO">${final_text} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;netconf-test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.120&lt;/host&gt;
    &lt;...</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-08-23T02:10:28.303166" elapsed="0.000765"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T02:10:28.303982" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="PASS" start="2026-08-23T02:10:28.298482" elapsed="0.005627"/>
</kw>
<msg time="2026-08-23T02:10:28.304164" 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-08-23T02:10:28.285704" elapsed="0.018508"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:28.316491" elapsed="0.000058"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:28.328789" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:28.341069" 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-08-23T02:10:28.341259" 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-08-23T02:10:28.341427" 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-08-23T02:10:28.341782" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:28.341642" elapsed="0.000210"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:28.341627" 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-08-23T02:10:28.342015" 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-08-23T02:10:28.342177" 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-08-23T02:10:28.342336" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T02:10:28.341599" elapsed="0.000790"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T02:10:28.341500" 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-08-23T02:10:28.342554" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:28.342628" elapsed="0.000015"/>
</return>
<msg time="2026-08-23T02:10:28.342750" level="INFO">${data} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;netconf-test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.120&lt;/host&gt;
    &lt;...</msg>
<var>${data}</var>
<arg>folder=${folder}</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-08-23T02:10:28.283039" elapsed="0.059740"/>
</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-08-23T02:10:28.344165" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/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-08-23T02:10:28.343900" elapsed="0.000331">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-23T02:10:28.344329" 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-08-23T02:10:28.343446" elapsed="0.000907"/>
</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-08-23T02:10:28.344665" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:28.344422" elapsed="0.000300"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:28.345270" 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-08-23T02:10:28.344973" elapsed="0.000324"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:28.344779" elapsed="0.000553"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:28.344404" elapsed="0.000950"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:10:28.347860" 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-08-23T02:10:28.345503" elapsed="0.002386"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-23T02:10:28.347942" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:10:28.348096" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-23T02:10:28.343123" elapsed="0.004999"/>
</kw>
<kw name="Put_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:28.349528" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:28.349281" elapsed="0.000298"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:28.349987" level="INFO">&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;netconf-test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.120&lt;/host&gt;
    &lt;port&gt;17830&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;admin&lt;/username&gt;
      &lt;password&gt;topsecret&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt;</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:28.349727" elapsed="0.000312"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:28.350438" 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-08-23T02:10:28.350189" elapsed="0.000293"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:28.350883" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:28.350629" elapsed="0.000298"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-08-23T02:10:28.351720" 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-08-23T02:10:28.351525" elapsed="0.000220"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-08-23T02:10:28.352089" 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-08-23T02:10:28.351913" 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-08-23T02:10:28.352284" elapsed="0.000210"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:28.352919" 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-08-23T02:10:28.352656" elapsed="0.000307"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-08-23T02:10:28.353006" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:10:28.353161" 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-08-23T02:10:28.351125" elapsed="0.002061"/>
</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">
<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="NOT RUN" start="2026-08-23T02:10:28.355308" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:28.353256" elapsed="0.002118"/>
</branch>
<branch type="ELSE">
<kw name="PUT On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:28.359527" level="INFO">PUT Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Content-Length': '452', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;netconf-test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.120&lt;/host&gt;
    &lt;port&gt;17830&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;admin&lt;/username&gt;
      &lt;password&gt;topsecret&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt; 
 </msg>
<msg time="2026-08-23T02:10:28.359589" level="INFO">PUT Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device 
 status=404, reason=Not Found 
 headers={'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:28.359690" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device</msg>
<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="FAIL" start="2026-08-23T02:10:28.355536" elapsed="0.004537">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:28.355399" elapsed="0.004761">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device</status>
</branch>
<status status="FAIL" start="2026-08-23T02:10:28.353238" elapsed="0.007004">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device</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-08-23T02:10:28.360623" elapsed="0.000027"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:28.360763" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:28.360725" elapsed="0.000079"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:28.360708" elapsed="0.000118"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:28.360991" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:28.361059" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>content_type=${content_type}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</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-08-23T02:10:28.348481" elapsed="0.012684">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:28.361241" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>extension=xml</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>content_type=${HEADERS_XML}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>endline=${\n}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve URI and data from folder, call Put_To_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:28.169793" elapsed="0.191543">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=response</arg>
<arg>mapping=${mapping}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:28.361626" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:28.361443" elapsed="0.000253"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:28.361427" elapsed="0.000294"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:28.361754" elapsed="0.000014"/>
</return>
<arg>folder=${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Add arguments sensible for XML data, return Put_Templated response text.
Optionally, verification against response.xml (no iteration) is called.</doc>
<status status="FAIL" start="2026-08-23T02:10:28.166974" elapsed="0.194895">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:28.166728" elapsed="0.195210">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device</status>
</branch>
<status status="FAIL" start="2026-08-23T02:10:28.166310" elapsed="0.195665">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device</status>
</if>
<kw name="Set To Dictionary" owner="Collections">
<arg>${NetconfKeywords__mounted_device_types}</arg>
<arg>${device_name}</arg>
<arg>${device_type}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:28.362124" elapsed="0.000022"/>
</kw>
<arg>${device_name}</arg>
<arg>device_type=${device_type}</arg>
<arg>http_timeout=2</arg>
<doc>Tell Netconf about the specified device so it can add it into its configuration.</doc>
<status status="FAIL" start="2026-08-23T02:10:28.145262" elapsed="0.216973">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device</status>
</kw>
<doc>Make request to configure a testtool device on Netconf connector.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-08-23T02:10:28.063959" elapsed="0.298435">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device</status>
</test>
<test id="s1-s4-s2-t4" name="Check_ODL_Has_Netconf_Connector_For_Device" line="62">
<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-08-23T02:10:28.366730" elapsed="0.000336"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:10:28.366363" elapsed="0.000780"/>
</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-08-23T02:10:28.368571" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:28.368413" elapsed="0.000224"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:28.368386" elapsed="0.000282"/>
</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-08-23T02:10:28.375206" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:28.375096" elapsed="0.000163"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:28.375078" elapsed="0.000204"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:10:28.376312" 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-08-23T02:10:28.375906" elapsed="0.000434"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:10:28.376861" 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-08-23T02:10:28.376537" elapsed="0.000353"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:10:28.376935" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:10:28.377091" 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-08-23T02:10:28.375511" elapsed="0.001605"/>
</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-08-23T02:10:28.382560" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:28.382451" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:28.382432" elapsed="0.000197"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:10:28.383912" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:28.383778" elapsed="0.000181"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:28.383759" elapsed="0.000222"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:10:28.384542" level="INFO">${karaf_connection_index} = 11</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-08-23T02:10:28.384124" elapsed="0.000444"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:10:28.385015" level="INFO">${current_connection_index} = 13</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-08-23T02:10:28.384725" elapsed="0.000316"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:10:28.413952" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:10:28.385595" elapsed="0.028541"/>
</kw>
<msg time="2026-08-23T02:10:28.414327" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:10:28.414374" 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 "n "e "t "c "o "n "f "...</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-08-23T02:10:28.385198" elapsed="0.029213"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:10:28.433641" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "h "e "c "k "_ "O "D "L "_ "H "a "s "_ "N "e "t "c "o "n "f "_ "C "o "n "n "e "c "t "o "r "_ "F "o "r "_ "D "e "v "i "c "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-08-23T02:10:28.414998" elapsed="0.018866"/>
</kw>
<msg time="2026-08-23T02:10:28.434051" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:10:28.434098" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "h "e "c "k "_ "O "D "L "_ "H "a "s "_ "N "e "t "c "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-08-23T02:10:28.414578" elapsed="0.019558"/>
</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-08-23T02:10:28.434436" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:28.434213" elapsed="0.000303"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:28.434193" elapsed="0.000349"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:28.435106" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "h "e "c "k "_ "O "D "L "_ "H "a "s "_ "N "e "t "c "o "n "f "_ "C "o "n "n "e "c "t "o "r "_ "F "o "r "_ "D "e "v "i "c "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-08-23T02:10:28.434686" elapsed="0.000493"/>
</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-08-23T02:10:28.435459" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:28.435246" elapsed="0.000292"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:28.435228" elapsed="0.000335"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:10:28.435596" 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-08-23T02:10:28.439114" elapsed="0.000147"/>
</kw>
<msg time="2026-08-23T02:10:28.439336" 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-08-23T02:10:28.438333" elapsed="0.001108"/>
</kw>
<kw name="Open 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-08-23T02:10:28.440560" elapsed="0.000039"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:28.441913" elapsed="0.000040"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:10:28.436499" elapsed="0.005536"/>
</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-08-23T02:10:28.435891" elapsed="0.006310"/>
</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-08-23T02:10:28.383474" elapsed="0.058827"/>
</kw>
<msg time="2026-08-23T02:10:28.442393" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:10:28.442437" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "h "e "c "k "_ "O "D "L "_ "H "a "s "_ "N "e "t "c "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-08-23T02:10:28.382780" elapsed="0.059694"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:10:28.442657" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:10:28.442549" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:28.442531" 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-08-23T02:10:28.443256" 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-08-23T02:10:28.443592" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:10:28.443664" 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-08-23T02:10:28.382112" elapsed="0.061660"/>
</kw>
<msg time="2026-08-23T02:10:28.443883" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:10:28.443928" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "h "e "c "k "_ "O "D "L "_ "H "a "s "_ "N "e "t "c "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-08-23T02:10:28.377480" elapsed="0.066486"/>
</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-08-23T02:10:28.444290" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:28.444041" elapsed="0.000302"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:28.444024" elapsed="0.000343"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:10:28.377341" elapsed="0.067049"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:10:28.377168" elapsed="0.067252"/>
</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-08-23T02:10:28.374696" elapsed="0.069778"/>
</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-08-23T02:10:28.367988" elapsed="0.076540"/>
</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-08-23T02:10:28.367350" elapsed="0.077222"/>
</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-08-23T02:10:28.363435" elapsed="0.081189"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Count_Netconf_Connectors">
<kw name="Count_Netconf_Connectors_For_Device" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:28.456258" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:28.454011" elapsed="0.002275"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:28.456608" elapsed="0.000022"/>
</kw>
<var name="${nv}"/>
<status status="NOT RUN" start="2026-08-23T02:10:28.456455" elapsed="0.000210"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="NOT RUN" start="2026-08-23T02:10:28.456339" elapsed="0.000352"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:28.457022" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:28.456752" elapsed="0.000331"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:28.457805" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:28.457333" elapsed="0.000499"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:28.457106" elapsed="0.000780"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:28.458072" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:28.457911" elapsed="0.000215"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:28.456736" elapsed="0.001411"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:28.458181" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:10:28.458372" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:10:28.453547" elapsed="0.004851"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:28.458445" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:10:28.458590" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:10:28.453073" elapsed="0.005542"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:28.465902" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:28.465635" elapsed="0.000313"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:28.466343" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:28.466100" elapsed="0.000287"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:28.471855" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:28.471913" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '407'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:10:28.472018" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:10:28.468503" elapsed="0.003881">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:28.466455" elapsed="0.006010">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:28.472652" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:28.472498" elapsed="0.000218"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:28.466437" elapsed="0.006302">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:28.473164" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:28.473297" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:28.473260" elapsed="0.000079"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:28.473244" elapsed="0.000116"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:28.473498" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:28.473567" elapsed="0.000014"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:10:28.461274" elapsed="0.012397">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:28.473739" elapsed="0.000015"/>
</return>
<var>${mounts}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:28.458827" elapsed="0.015009">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${mounts}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:28.474020" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${actual_count}</var>
<arg>len('''${mounts}'''.split('"node-id": "${device_name}"'))-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:28.474183" elapsed="0.000020"/>
</kw>
<return>
<value>${actual_count}</value>
<status status="NOT RUN" start="2026-08-23T02:10:28.474246" elapsed="0.000014"/>
</return>
<var>${count}</var>
<arg>${device_name}</arg>
<doc>Count all instances of the specified device in the Netconf topology (usually 0 or 1).</doc>
<status status="FAIL" start="2026-08-23T02:10:28.445730" elapsed="0.028610">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:28.474538" elapsed="0.000025"/>
</kw>
<status status="FAIL" start="2026-08-23T02:10:28.445388" elapsed="0.029263">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Count_Netconf_Connectors">
<kw name="Count_Netconf_Connectors_For_Device" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:29.491551" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:29.489354" elapsed="0.002232"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:29.491963" elapsed="0.000023"/>
</kw>
<var name="${nv}"/>
<status status="NOT RUN" start="2026-08-23T02:10:29.491790" elapsed="0.000233"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="NOT RUN" start="2026-08-23T02:10:29.491658" elapsed="0.000396"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:29.492394" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:29.492127" elapsed="0.000324"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:29.493198" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:29.492702" elapsed="0.000524"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:29.492477" elapsed="0.000785"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:29.493449" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:29.493287" elapsed="0.000217"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:29.492107" elapsed="0.001418"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:29.493565" elapsed="0.000040"/>
</return>
<msg time="2026-08-23T02:10:29.493732" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:10:29.488870" elapsed="0.004888"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:29.493805" elapsed="0.000025"/>
</return>
<msg time="2026-08-23T02:10:29.493966" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:10:29.488330" elapsed="0.005661"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:29.501197" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:29.500935" elapsed="0.000308"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:29.501637" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:29.501393" elapsed="0.000288"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:29.507895" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:29.507951" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '407'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:10:29.508060" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:10:29.503796" elapsed="0.004646">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:29.501747" elapsed="0.006776">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:29.508711" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:29.508557" elapsed="0.000220"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:29.501729" elapsed="0.007072">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:29.509192" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:29.509383" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:29.509344" elapsed="0.000082"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:29.509326" elapsed="0.000122"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:29.509598" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:29.509670" elapsed="0.000016"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:10:29.496628" elapsed="0.013149">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:29.509869" elapsed="0.000017"/>
</return>
<var>${mounts}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:29.494208" elapsed="0.015761">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${mounts}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:29.510133" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${actual_count}</var>
<arg>len('''${mounts}'''.split('"node-id": "${device_name}"'))-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:29.510299" elapsed="0.000021"/>
</kw>
<return>
<value>${actual_count}</value>
<status status="NOT RUN" start="2026-08-23T02:10:29.510363" elapsed="0.000016"/>
</return>
<var>${count}</var>
<arg>${device_name}</arg>
<doc>Count all instances of the specified device in the Netconf topology (usually 0 or 1).</doc>
<status status="FAIL" start="2026-08-23T02:10:29.476694" elapsed="0.033767">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:29.510653" elapsed="0.000022"/>
</kw>
<status status="FAIL" start="2026-08-23T02:10:29.475567" elapsed="0.035196">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Count_Netconf_Connectors">
<kw name="Count_Netconf_Connectors_For_Device" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:30.527142" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:30.524998" elapsed="0.002178"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:30.527574" elapsed="0.000023"/>
</kw>
<var name="${nv}"/>
<status status="NOT RUN" start="2026-08-23T02:10:30.527383" elapsed="0.000251"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="NOT RUN" start="2026-08-23T02:10:30.527249" elapsed="0.000416"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:30.528024" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:30.527739" elapsed="0.000343"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:30.528816" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:30.528335" elapsed="0.000524"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:30.528108" elapsed="0.000787"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:30.529080" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:30.528920" elapsed="0.000215"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:30.527718" elapsed="0.001438"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:30.529196" elapsed="0.000040"/>
</return>
<msg time="2026-08-23T02:10:30.529361" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:10:30.524499" elapsed="0.004888"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:30.529434" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:10:30.529574" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:10:30.523984" elapsed="0.005615"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:30.536757" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:30.536501" elapsed="0.000303"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:30.537214" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:30.536970" elapsed="0.000287"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:30.543575" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:30.543644" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '407'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:10:30.543759" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:10:30.539355" elapsed="0.004814">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:30.537322" elapsed="0.006929">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:30.544434" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:30.544285" elapsed="0.000216"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:30.537304" elapsed="0.007220">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:30.545042" elapsed="0.000036"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:30.545226" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:30.545173" elapsed="0.000110"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:30.545150" elapsed="0.000162"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:30.545502" elapsed="0.000030"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:30.545599" elapsed="0.000020"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:10:30.532229" elapsed="0.013514">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:30.545862" elapsed="0.000024"/>
</return>
<var>${mounts}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:30.529812" elapsed="0.016187">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${mounts}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:30.546224" elapsed="0.000029"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${actual_count}</var>
<arg>len('''${mounts}'''.split('"node-id": "${device_name}"'))-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:30.546449" elapsed="0.000028"/>
</kw>
<return>
<value>${actual_count}</value>
<status status="NOT RUN" start="2026-08-23T02:10:30.546535" elapsed="0.000021"/>
</return>
<var>${count}</var>
<arg>${device_name}</arg>
<doc>Count all instances of the specified device in the Netconf topology (usually 0 or 1).</doc>
<status status="FAIL" start="2026-08-23T02:10:30.512456" elapsed="0.034217">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:30.546910" elapsed="0.000031"/>
</kw>
<status status="FAIL" start="2026-08-23T02:10:30.511428" elapsed="0.035633">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Count_Netconf_Connectors">
<kw name="Count_Netconf_Connectors_For_Device" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:31.564787" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:31.562556" elapsed="0.002265"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:31.565203" elapsed="0.000023"/>
</kw>
<var name="${nv}"/>
<status status="NOT RUN" start="2026-08-23T02:10:31.565050" elapsed="0.000212"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="NOT RUN" start="2026-08-23T02:10:31.564915" elapsed="0.000377"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:31.565630" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:31.565365" elapsed="0.000406"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:31.566529" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:31.566047" elapsed="0.000509"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:31.565798" elapsed="0.000794"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:31.566780" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:31.566618" elapsed="0.000234"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:31.565345" elapsed="0.001531"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:31.566915" elapsed="0.000039"/>
</return>
<msg time="2026-08-23T02:10:31.567079" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:10:31.562080" elapsed="0.005025"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:31.567152" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:10:31.567294" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:10:31.561531" elapsed="0.005787"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:31.574594" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:31.574335" elapsed="0.000305"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:31.575049" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:31.574789" elapsed="0.000303"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:31.581773" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:31.581850" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '407'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:10:31.581968" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:10:31.577398" elapsed="0.004975">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:31.575158" elapsed="0.007301">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:31.582653" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:31.582496" elapsed="0.000224"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:31.575140" elapsed="0.007605">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:31.583147" elapsed="0.000027"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:31.583282" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:31.583244" elapsed="0.000080"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:31.583228" elapsed="0.000117"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:31.583487" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:31.583558" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:10:31.570023" elapsed="0.013642">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:31.583734" elapsed="0.000016"/>
</return>
<var>${mounts}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:31.567568" elapsed="0.016329">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${mounts}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:31.584145" elapsed="0.000027"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${actual_count}</var>
<arg>len('''${mounts}'''.split('"node-id": "${device_name}"'))-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:31.584342" elapsed="0.000022"/>
</kw>
<return>
<value>${actual_count}</value>
<status status="NOT RUN" start="2026-08-23T02:10:31.584408" elapsed="0.000016"/>
</return>
<var>${count}</var>
<arg>${device_name}</arg>
<doc>Count all instances of the specified device in the Netconf topology (usually 0 or 1).</doc>
<status status="FAIL" start="2026-08-23T02:10:31.549476" elapsed="0.035034">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:31.584696" elapsed="0.000031"/>
</kw>
<status status="FAIL" start="2026-08-23T02:10:31.547796" elapsed="0.037085">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Count_Netconf_Connectors">
<kw name="Count_Netconf_Connectors_For_Device" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:32.603126" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:32.600989" elapsed="0.002170"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:32.603508" elapsed="0.000021"/>
</kw>
<var name="${nv}"/>
<status status="NOT RUN" start="2026-08-23T02:10:32.603356" elapsed="0.000210"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="NOT RUN" start="2026-08-23T02:10:32.603228" elapsed="0.000367"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:32.603970" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:32.603667" elapsed="0.000363"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:32.604753" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:32.604281" elapsed="0.000498"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:32.604055" elapsed="0.000760"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:32.605016" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:32.604856" elapsed="0.000215"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:32.603647" elapsed="0.001445"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:32.605130" elapsed="0.000037"/>
</return>
<msg time="2026-08-23T02:10:32.605292" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:10:32.600498" elapsed="0.004819"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:32.605364" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:10:32.605506" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:10:32.599979" elapsed="0.005552"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:32.612988" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:32.612706" elapsed="0.000329"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:32.613430" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:32.613184" elapsed="0.000288"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:32.619761" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:32.619902" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '407'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:10:32.620031" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:10:32.615590" elapsed="0.004839">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:32.613538" elapsed="0.007038">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:32.620822" elapsed="0.000066"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:32.620611" elapsed="0.000346"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:32.613519" elapsed="0.007470">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:32.621500" elapsed="0.000043"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:32.621695" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:32.621642" elapsed="0.000119"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:32.621618" elapsed="0.000173"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:32.622007" elapsed="0.000030"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:32.622106" elapsed="0.000021"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:10:32.608162" elapsed="0.014090">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:32.622348" elapsed="0.000022"/>
</return>
<var>${mounts}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:32.605745" elapsed="0.016733">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${mounts}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:32.622705" elapsed="0.000030"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${actual_count}</var>
<arg>len('''${mounts}'''.split('"node-id": "${device_name}"'))-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:32.622952" elapsed="0.000029"/>
</kw>
<return>
<value>${actual_count}</value>
<status status="NOT RUN" start="2026-08-23T02:10:32.623041" elapsed="0.000021"/>
</return>
<var>${count}</var>
<arg>${device_name}</arg>
<doc>Count all instances of the specified device in the Netconf topology (usually 0 or 1).</doc>
<status status="FAIL" start="2026-08-23T02:10:32.587135" elapsed="0.036039">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:32.623387" elapsed="0.000035"/>
</kw>
<status status="FAIL" start="2026-08-23T02:10:32.585536" elapsed="0.038003">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Count_Netconf_Connectors">
<kw name="Count_Netconf_Connectors_For_Device" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:33.639650" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:33.637508" elapsed="0.002180"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:33.640078" elapsed="0.000023"/>
</kw>
<var name="${nv}"/>
<status status="NOT RUN" start="2026-08-23T02:10:33.639925" elapsed="0.000212"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="NOT RUN" start="2026-08-23T02:10:33.639768" elapsed="0.000397"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:33.640491" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:33.640232" elapsed="0.000317"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:33.641295" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:33.640800" elapsed="0.000522"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:33.640573" elapsed="0.000786"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:33.641545" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:33.641384" elapsed="0.000217"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:33.640212" elapsed="0.001410"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:33.641658" elapsed="0.000035"/>
</return>
<msg time="2026-08-23T02:10:33.641817" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:10:33.637036" elapsed="0.004822"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:33.641973" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:10:33.642122" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:10:33.636509" elapsed="0.005638"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:33.649353" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:33.649094" elapsed="0.000306"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:33.649796" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:33.649550" elapsed="0.000305"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:33.656190" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:33.656247" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '407'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:10:33.656366" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:10:33.652112" elapsed="0.004647">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:33.649925" elapsed="0.006934">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:33.657045" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:33.656895" elapsed="0.000216"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:33.649906" elapsed="0.007228">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:33.657503" elapsed="0.000025"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:33.657635" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:33.657598" elapsed="0.000080"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:33.657581" elapsed="0.000118"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:33.657852" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:33.657924" elapsed="0.000016"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:10:33.644787" elapsed="0.013242">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:33.658098" elapsed="0.000016"/>
</return>
<var>${mounts}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:33.642364" elapsed="0.015829">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${mounts}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:33.658357" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${actual_count}</var>
<arg>len('''${mounts}'''.split('"node-id": "${device_name}"'))-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:33.658521" elapsed="0.000021"/>
</kw>
<return>
<value>${actual_count}</value>
<status status="NOT RUN" start="2026-08-23T02:10:33.658585" elapsed="0.000015"/>
</return>
<var>${count}</var>
<arg>${device_name}</arg>
<doc>Count all instances of the specified device in the Netconf topology (usually 0 or 1).</doc>
<status status="FAIL" start="2026-08-23T02:10:33.625822" elapsed="0.032860">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:33.658857" elapsed="0.000022"/>
</kw>
<status status="FAIL" start="2026-08-23T02:10:33.624872" elapsed="0.034094">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<msg time="2026-08-23T02:10:33.659082" level="FAIL">Keyword 'Count_Netconf_Connectors' failed after retrying for 5 seconds. The last error was: HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>5 sec</arg>
<arg>1 sec</arg>
<arg>Count_Netconf_Connectors</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-08-23T02:10:28.444826" elapsed="5.214352">Keyword 'Count_Netconf_Connectors' failed after retrying for 5 seconds. The last error was: HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<doc>Get the list of configured devices and search for our device there. Fail if not found.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-08-23T02:10:28.362790" elapsed="5.296581">Keyword 'Count_Netconf_Connectors' failed after retrying for 5 seconds. The last error was: HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</test>
<test id="s1-s4-s2-t5" name="Wait_For_Device_To_Become_Connected" line="67">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-08-23T02:10:33.663983" elapsed="0.000297"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:10:33.663550" elapsed="0.000807"/>
</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-08-23T02:10:33.665742" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:33.665586" elapsed="0.000222"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:33.665560" elapsed="0.000303"/>
</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-08-23T02:10:33.671365" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:33.671231" elapsed="0.000182"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:33.671213" elapsed="0.000222"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:10:33.672427" 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-08-23T02:10:33.672045" elapsed="0.000408"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:10:33.672928" 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-08-23T02:10:33.672610" elapsed="0.000344"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:10:33.672999" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:10:33.673153" 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-08-23T02:10:33.671656" elapsed="0.001522"/>
</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-08-23T02:10:33.680464" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:33.680355" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:33.680336" elapsed="0.000197"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:10:33.681815" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:33.681708" elapsed="0.000177"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:33.681689" elapsed="0.000219"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:10:33.682454" level="INFO">${karaf_connection_index} = 11</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-08-23T02:10:33.682050" elapsed="0.000431"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:10:33.682926" level="INFO">${current_connection_index} = 13</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-08-23T02:10:33.682635" elapsed="0.000318"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:10:33.717006" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:10:33.683539" elapsed="0.033882"/>
</kw>
<msg time="2026-08-23T02:10:33.717903" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:10:33.718014" 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 "n "e "t "c "o "n "f "...</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-08-23T02:10:33.683109" elapsed="0.034987"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:10:33.734386" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "W "a "i "t "_ "F "o "r "_ "D "e "v "i "c "e "_ "T "o "_ "B "e "c "o "m "e "_ "C "o "n "n "e "c "t "e "d "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-08-23T02:10:33.719422" elapsed="0.015186"/>
</kw>
<msg time="2026-08-23T02:10:33.734804" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:10:33.734877" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "W "a "i "t "_ "F "o "r "_ "D "e "v "i "c "e "_ "T "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-08-23T02:10:33.718475" elapsed="0.016441"/>
</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-08-23T02:10:33.735300" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:33.735060" elapsed="0.000322"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:33.735037" elapsed="0.000371"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:33.735994" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "W "a "i "t "_ "F "o "r "_ "D "e "v "i "c "e "_ "T "o "_ "B "e "c "o "m "e "_ "C "o "n "n "e "c "t "e "d "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:33.735565" elapsed="0.000501"/>
</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-08-23T02:10:33.736346" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:33.736133" elapsed="0.000294"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:33.736115" elapsed="0.000337"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:10:33.736485" 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-08-23T02:10:33.739968" elapsed="0.000148"/>
</kw>
<msg time="2026-08-23T02:10:33.740195" 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-08-23T02:10:33.739198" elapsed="0.001102"/>
</kw>
<kw name="Open 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-08-23T02:10:33.741426" elapsed="0.000040"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:33.742779" elapsed="0.000040"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:10:33.737389" elapsed="0.005535"/>
</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-08-23T02:10:33.736760" elapsed="0.006294"/>
</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-08-23T02:10:33.681403" elapsed="0.061749"/>
</kw>
<msg time="2026-08-23T02:10:33.743252" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:10:33.743298" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "W "a "i "t "_ "F "o "r "_ "D "e "v "i "c "e "_ "T "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-08-23T02:10:33.680684" elapsed="0.062652"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:10:33.743519" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-08-23T02:10:33.743411" elapsed="0.000182"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:33.743393" elapsed="0.000224"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:33.744128" 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-08-23T02:10:33.744457" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:10:33.744527" 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-08-23T02:10:33.680015" elapsed="0.064619"/>
</kw>
<msg time="2026-08-23T02:10:33.744725" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:10:33.744768" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "W "a "i "t "_ "F "o "r "_ "D "e "v "i "c "e "_ "T "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-08-23T02:10:33.673533" elapsed="0.071272"/>
</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-08-23T02:10:33.745142" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:33.744897" elapsed="0.000299"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:33.744879" elapsed="0.000340"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:10:33.673395" elapsed="0.071847"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:10:33.673230" elapsed="0.072043"/>
</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-08-23T02:10:33.670875" elapsed="0.074450"/>
</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-08-23T02:10:33.665189" elapsed="0.080189"/>
</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-08-23T02:10:33.664565" elapsed="0.080855"/>
</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-08-23T02:10:33.660555" elapsed="0.084952"/>
</kw>
<kw name="Wait_Device_Connected" owner="NetconfKeywords">
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:33.757563" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:33.755473" elapsed="0.002117"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:33.758270" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:33.757942" elapsed="0.000355"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:10:33.757772" elapsed="0.000560"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:33.758908" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:33.758560" elapsed="0.000375"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:10:33.758411" elapsed="0.000560"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:10:33.757643" elapsed="0.001359"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:33.759302" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:33.759066" elapsed="0.000293"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:33.760112" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:33.759610" elapsed="0.000530"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:33.759384" elapsed="0.000792"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:33.760363" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:33.760202" elapsed="0.000216"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:33.759048" elapsed="0.001392"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:33.760474" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:10:33.760621" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:10:33.755029" elapsed="0.005618"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:33.760693" elapsed="0.000025"/>
</return>
<msg time="2026-08-23T02:10:33.760852" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:10:33.754462" elapsed="0.006417"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:33.768256" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:33.768004" elapsed="0.000298"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:33.768693" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:33.768452" elapsed="0.000287"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:33.774577" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:33.774632" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:10:33.774752" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:10:33.770859" elapsed="0.004291">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:33.768806" elapsed="0.006461">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:33.775515" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:33.775324" elapsed="0.000270"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:33.768788" elapsed="0.006833">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:33.776115" elapsed="0.000032"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:33.776276" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:33.776232" elapsed="0.000094"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:33.776212" elapsed="0.000139"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:33.776517" elapsed="0.000026"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:33.776600" elapsed="0.000018"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:10:33.763537" elapsed="0.013189">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:33.776807" elapsed="0.000018"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:33.761100" elapsed="0.015845">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:33.777146" elapsed="0.000027"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:10:33.746779" elapsed="0.030507">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:34.795196" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:34.792966" elapsed="0.002267"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:34.795993" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:34.795646" elapsed="0.000375"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:10:34.795487" elapsed="0.000570"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:34.796613" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:34.796294" elapsed="0.000346"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:10:34.796144" elapsed="0.000532"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:10:34.795321" elapsed="0.001384"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:34.797105" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:34.796797" elapsed="0.000367"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:34.797909" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:34.797418" elapsed="0.000518"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:34.797191" elapsed="0.000782"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:34.798160" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:34.797999" elapsed="0.000216"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:34.796771" elapsed="0.001465"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:34.798277" elapsed="0.000046"/>
</return>
<msg time="2026-08-23T02:10:34.798454" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:10:34.792445" elapsed="0.006035"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:34.798529" elapsed="0.000110"/>
</return>
<msg time="2026-08-23T02:10:34.798791" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:10:34.791703" elapsed="0.007114"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:34.806124" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:34.805862" elapsed="0.000310"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:34.806567" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:34.806323" elapsed="0.000287"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:34.813215" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:34.813274" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:10:34.813411" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:10:34.808850" elapsed="0.005020">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:34.806676" elapsed="0.007285">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:34.814146" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:34.813996" elapsed="0.000216"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:34.806658" elapsed="0.007577">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:34.814615" elapsed="0.000025"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:34.814786" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:34.814710" elapsed="0.000121"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:34.814693" elapsed="0.000176"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:34.815012" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:34.815085" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:10:34.801500" elapsed="0.013694">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:34.815263" elapsed="0.000016"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:34.799060" elapsed="0.016298">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:34.815525" elapsed="0.000022"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:10:34.778416" elapsed="0.037217">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:35.832926" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:35.830720" elapsed="0.002241"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:35.833710" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:35.833352" elapsed="0.000385"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:10:35.833196" elapsed="0.000578"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:35.834348" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:35.834031" elapsed="0.000344"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:10:35.833875" elapsed="0.000536"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:10:35.833040" elapsed="0.001401"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:35.834787" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:35.834520" elapsed="0.000342"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:35.835584" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:35.835119" elapsed="0.000494"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:35.834889" elapsed="0.000761"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:35.835834" elapsed="0.000039"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:35.835674" elapsed="0.000235"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:35.834498" elapsed="0.001431"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:35.835970" elapsed="0.000041"/>
</return>
<msg time="2026-08-23T02:10:35.836139" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:10:35.830235" elapsed="0.005930"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:35.836212" elapsed="0.000025"/>
</return>
<msg time="2026-08-23T02:10:35.836354" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:10:35.829625" elapsed="0.006754"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:35.843759" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:35.843500" elapsed="0.000305"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:35.844220" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:35.843971" elapsed="0.000292"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:35.850381" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:35.850439" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:10:35.850554" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:10:35.846373" elapsed="0.004608">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:35.844329" elapsed="0.006735">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:35.851246" elapsed="0.000080"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:35.851098" elapsed="0.000276"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:35.844310" elapsed="0.007087">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:35.851774" elapsed="0.000025"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:35.851924" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:35.851887" elapsed="0.000080"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:35.851868" elapsed="0.000119"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:35.852126" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:35.852195" elapsed="0.000014"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:10:35.839103" elapsed="0.013199">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:35.852370" elapsed="0.000015"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:35.836599" elapsed="0.015865">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:35.852627" elapsed="0.000021"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:10:35.816519" elapsed="0.036215">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:36.868878" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:36.866704" elapsed="0.002208"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:36.869617" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:36.869290" elapsed="0.000354"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:10:36.869134" elapsed="0.000547"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:36.870249" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:36.869930" elapsed="0.000346"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:10:36.869764" elapsed="0.000547"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:10:36.868986" elapsed="0.001355"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:36.870681" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:36.870414" elapsed="0.000325"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:36.871477" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:36.871012" elapsed="0.000492"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:36.870764" elapsed="0.000776"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:36.871727" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:36.871565" elapsed="0.000218"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:36.870393" elapsed="0.001411"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:36.871856" elapsed="0.000061"/>
</return>
<msg time="2026-08-23T02:10:36.872048" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:10:36.866226" elapsed="0.005849"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:36.872121" elapsed="0.000025"/>
</return>
<msg time="2026-08-23T02:10:36.872263" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:10:36.865631" elapsed="0.006657"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:36.879569" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:36.879314" elapsed="0.000303"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:36.880056" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:36.879766" elapsed="0.000333"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:36.886370" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:36.886429" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:10:36.886543" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:10:36.882194" elapsed="0.004762">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:36.880165" elapsed="0.006874">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:36.887225" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:36.887073" elapsed="0.000216"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:36.880147" elapsed="0.007165">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:36.887677" elapsed="0.000025"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:36.887807" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:36.887770" elapsed="0.000101"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:36.887754" elapsed="0.000139"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:36.888056" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:36.888126" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:10:36.875052" elapsed="0.013179">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:36.888299" elapsed="0.000015"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:36.872588" elapsed="0.015805">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:36.888555" elapsed="0.000021"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:10:36.853602" elapsed="0.035059">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:37.905899" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:37.903649" elapsed="0.002350"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:37.906740" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:37.906401" elapsed="0.000366"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:10:37.906246" elapsed="0.000558"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:37.907383" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:37.907058" elapsed="0.000352"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:10:37.906909" elapsed="0.000537"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:10:37.906071" elapsed="0.001405"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:37.907807" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:37.907546" elapsed="0.000335"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:37.908606" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:37.908136" elapsed="0.000499"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:37.907907" elapsed="0.000763"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:37.908871" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:37.908696" elapsed="0.000231"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:37.907527" elapsed="0.001421"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:37.908987" elapsed="0.000036"/>
</return>
<msg time="2026-08-23T02:10:37.909149" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:10:37.903171" elapsed="0.006004"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:37.909222" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:10:37.909365" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:10:37.902576" elapsed="0.006814"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:37.916626" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:37.916369" elapsed="0.000304"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:37.917102" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:37.916826" elapsed="0.000320"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:37.923668" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:37.923725" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:10:37.923868" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:10:37.919284" elapsed="0.005113">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:37.917211" elapsed="0.007298">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:37.924765" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:37.924556" elapsed="0.000370"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:37.917193" elapsed="0.007770">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:37.925482" elapsed="0.000035"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:37.925664" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:37.925613" elapsed="0.000110"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:37.925590" elapsed="0.000163"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:37.925969" elapsed="0.000031"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:37.926068" elapsed="0.000021"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:10:37.912076" elapsed="0.014159">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:37.926331" elapsed="0.000023"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:37.909611" elapsed="0.016852">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:37.926689" elapsed="0.000030"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:10:37.889548" elapsed="0.037323">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:38.943965" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:38.941801" elapsed="0.002196"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:38.944700" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:38.944373" elapsed="0.000353"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:10:38.944219" elapsed="0.000543"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:38.945328" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:38.945011" elapsed="0.000344"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:10:38.944860" elapsed="0.000530"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:10:38.944075" elapsed="0.001344"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:38.945749" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:38.945490" elapsed="0.000316"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:38.946542" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:38.946076" elapsed="0.000493"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:38.945845" elapsed="0.000760"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:38.946789" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:38.946629" elapsed="0.000232"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:38.945469" elapsed="0.001416"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:38.946926" elapsed="0.000035"/>
</return>
<msg time="2026-08-23T02:10:38.947088" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:10:38.941327" elapsed="0.005786"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:38.947160" elapsed="0.000025"/>
</return>
<msg time="2026-08-23T02:10:38.947300" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:10:38.940574" elapsed="0.006751"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:38.954773" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:38.954513" elapsed="0.000308"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:38.955234" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:38.954990" elapsed="0.000287"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:38.961107" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:38.961164" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:10:38.961277" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:10:38.957408" elapsed="0.004254">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:38.955343" elapsed="0.006403">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:38.961945" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:38.961780" elapsed="0.000231"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:38.955325" elapsed="0.006710">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:38.962408" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:38.962542" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:38.962505" elapsed="0.000078"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:38.962487" elapsed="0.000118"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:38.962743" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:38.962813" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:10:38.950125" elapsed="0.012814">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:38.963009" elapsed="0.000015"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:38.947609" elapsed="0.015494">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:38.963267" elapsed="0.000021"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:10:38.927655" elapsed="0.035719">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:39.981323" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:39.979127" elapsed="0.002231"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:39.982184" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:39.981742" elapsed="0.000469"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:10:39.981585" elapsed="0.000663"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:39.982804" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:39.982486" elapsed="0.000345"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:10:39.982333" elapsed="0.000550"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:10:39.981432" elapsed="0.001481"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:39.983250" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:39.982988" elapsed="0.000320"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:39.984051" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:39.983562" elapsed="0.000518"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:39.983334" elapsed="0.000782"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:39.984300" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:39.984141" elapsed="0.000214"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:39.982967" elapsed="0.001409"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:39.984414" elapsed="0.000038"/>
</return>
<msg time="2026-08-23T02:10:39.984578" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:10:39.978629" elapsed="0.005975"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:39.984651" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:10:39.984793" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:10:39.978047" elapsed="0.006772"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:39.992065" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:39.991791" elapsed="0.000321"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:39.992504" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:39.992261" elapsed="0.000286"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:39.998775" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:39.998849" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:10:39.998970" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:10:39.994649" elapsed="0.004715">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:39.992612" elapsed="0.006835">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:39.999630" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:39.999481" elapsed="0.000213"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:39.992594" elapsed="0.007123">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:40.000137" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:40.000271" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:40.000234" elapsed="0.000079"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:40.000216" elapsed="0.000118"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:40.000475" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:40.000545" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:10:39.987505" elapsed="0.013146">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:40.000721" elapsed="0.000015"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:39.985056" elapsed="0.015759">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:40.001001" elapsed="0.000022"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:10:39.964223" elapsed="0.036886">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:41.019315" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:41.016942" elapsed="0.002414"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:41.020160" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:41.019795" elapsed="0.000393"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:10:41.019637" elapsed="0.000589"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:41.020801" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:41.020473" elapsed="0.000357"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:10:41.020314" elapsed="0.000570"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:10:41.019441" elapsed="0.001474"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:41.021265" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:41.020992" elapsed="0.000333"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:41.022094" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:41.021598" elapsed="0.000524"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:41.021359" elapsed="0.000799"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:41.022351" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:41.022184" elapsed="0.000229"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:41.020971" elapsed="0.001463"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:41.022474" elapsed="0.000039"/>
</return>
<msg time="2026-08-23T02:10:41.022642" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:10:41.016387" elapsed="0.006282"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:41.022719" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:10:41.022882" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:10:41.015744" elapsed="0.007165"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:41.030341" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:41.030074" elapsed="0.000530"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:41.031053" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:41.030767" elapsed="0.000333"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:41.037864" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:41.037998" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:10:41.038245" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:10:41.033322" elapsed="0.005751">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:41.031169" elapsed="0.008097">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:41.039772" elapsed="0.000056"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:41.039346" elapsed="0.000611"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:41.031150" elapsed="0.008861">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:41.040859" elapsed="0.000063"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:41.041162" elapsed="0.000030"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:41.041079" elapsed="0.000175"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:41.041041" elapsed="0.000261"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:41.041622" elapsed="0.000050"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:41.041781" elapsed="0.000032"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:10:41.025641" elapsed="0.016404">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:41.042199" elapsed="0.000033"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:41.023133" elapsed="0.019274">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:41.042779" elapsed="0.000048"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:10:41.002039" elapsed="0.041017">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:42.060697" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:42.058559" elapsed="0.002172"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:42.061473" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:42.061140" elapsed="0.000360"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:10:42.060966" elapsed="0.000571"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:42.062272" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:42.061946" elapsed="0.000353"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:10:42.061766" elapsed="0.000569"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:10:42.060803" elapsed="0.001562"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:42.062700" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:42.062437" elapsed="0.000321"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:42.063496" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:42.063030" elapsed="0.000493"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:42.062784" elapsed="0.000775"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:42.063741" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:42.063584" elapsed="0.000212"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:42.062417" elapsed="0.001400"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:42.063871" elapsed="0.000038"/>
</return>
<msg time="2026-08-23T02:10:42.064036" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:10:42.058081" elapsed="0.005981"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:42.064109" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:10:42.064252" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:10:42.057311" elapsed="0.006967"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:42.071481" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:42.071227" elapsed="0.000303"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:42.071937" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:42.071679" elapsed="0.000303"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:42.078283" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:42.078341" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:10:42.078454" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:10:42.074092" elapsed="0.004769">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:42.072047" elapsed="0.006909">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:42.079143" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:42.078992" elapsed="0.000217"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:42.072029" elapsed="0.007204">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:42.079603" elapsed="0.000025"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:42.079789" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:42.079751" elapsed="0.000095"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:42.079732" elapsed="0.000138"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:42.080015" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:42.080085" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:10:42.066958" elapsed="0.013233">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:42.080262" elapsed="0.000016"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:42.064498" elapsed="0.015859">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:42.080522" elapsed="0.000022"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:10:42.044015" elapsed="0.036617">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:43.100457" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:43.098277" elapsed="0.002214"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:43.101199" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:43.100873" elapsed="0.000353"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:10:43.100706" elapsed="0.000556"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:43.101809" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:43.101493" elapsed="0.000356"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:10:43.101344" elapsed="0.000542"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:10:43.100563" elapsed="0.001352"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:43.102252" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:43.101987" elapsed="0.000322"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:43.103085" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:43.102597" elapsed="0.000516"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:43.102335" elapsed="0.000814"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:43.103337" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:43.103174" elapsed="0.000218"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:43.101967" elapsed="0.001445"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:43.103450" elapsed="0.000037"/>
</return>
<msg time="2026-08-23T02:10:43.103613" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:10:43.097772" elapsed="0.005867"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:43.103687" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:10:43.103829" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:10:43.097199" elapsed="0.006670"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:43.111112" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:43.110853" elapsed="0.000306"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:43.111551" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:43.111309" elapsed="0.000284"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:43.117990" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:43.118047" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:10:43.118160" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:10:43.113769" elapsed="0.004820">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:43.111728" elapsed="0.006943">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:43.118871" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:43.118706" elapsed="0.000231"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:43.111709" elapsed="0.007252">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:43.119464" elapsed="0.000035"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:43.119646" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:43.119595" elapsed="0.000108"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:43.119572" elapsed="0.000160"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:43.119944" elapsed="0.000032"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:43.120043" elapsed="0.000021"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:10:43.106548" elapsed="0.013640">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:43.120282" elapsed="0.000021"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:43.104096" elapsed="0.016316">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:43.120638" elapsed="0.000029"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:10:43.081510" elapsed="0.039276">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:44.138586" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:44.136434" elapsed="0.002185"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:44.139328" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:44.138998" elapsed="0.000358"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:10:44.138830" elapsed="0.000562"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:44.140029" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:44.139674" elapsed="0.000383"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:10:44.139485" elapsed="0.000680"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:10:44.138687" elapsed="0.001510"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:44.140529" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:44.140266" elapsed="0.000322"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:44.141324" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:44.140854" elapsed="0.000498"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:44.140613" elapsed="0.000775"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:44.141574" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:44.141413" elapsed="0.000217"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:44.140246" elapsed="0.001405"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:44.141887" elapsed="0.000037"/>
</return>
<msg time="2026-08-23T02:10:44.142069" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:10:44.135942" elapsed="0.006153"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:44.142143" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:10:44.142287" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:10:44.135335" elapsed="0.006978"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:44.149643" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:44.149366" elapsed="0.000327"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:44.150110" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:44.149861" elapsed="0.000293"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:44.156633" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:44.156697" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:10:44.156822" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:10:44.152414" elapsed="0.004852">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:44.150220" elapsed="0.007143">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:44.157567" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:44.157400" elapsed="0.000233"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:44.150202" elapsed="0.007455">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:44.158070" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:44.158206" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:44.158168" elapsed="0.000133"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:44.158150" elapsed="0.000176"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:44.158486" elapsed="0.000026"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:44.158563" elapsed="0.000016"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:10:44.145022" elapsed="0.013656">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:44.158752" elapsed="0.000016"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:44.142536" elapsed="0.016333">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:44.159041" elapsed="0.000023"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:10:44.121683" elapsed="0.037471">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:45.177937" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:45.175767" elapsed="0.002206"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:45.178710" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:45.178374" elapsed="0.000363"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:10:45.178207" elapsed="0.000566"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:45.179340" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:45.179024" elapsed="0.000342"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:10:45.178874" elapsed="0.000528"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:10:45.178050" elapsed="0.001380"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:45.179773" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:45.179508" elapsed="0.000338"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:45.180573" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:45.180105" elapsed="0.000496"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:45.179875" elapsed="0.000762"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:45.180832" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:45.180663" elapsed="0.000241"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:45.179486" elapsed="0.001438"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:45.180967" elapsed="0.000040"/>
</return>
<msg time="2026-08-23T02:10:45.181135" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:10:45.175298" elapsed="0.005863"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:45.181208" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:10:45.181348" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:10:45.174711" elapsed="0.006662"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:45.188607" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:45.188349" elapsed="0.000305"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:45.189074" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:45.188804" elapsed="0.000314"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:45.195693" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:45.195818" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:10:45.196113" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:10:45.191222" elapsed="0.007671">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:45.189185" elapsed="0.009897">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:45.199504" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:45.199160" elapsed="0.000490"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:45.189167" elapsed="0.010535">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:45.200543" elapsed="0.000058"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:45.200882" elapsed="0.000034"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:45.200757" elapsed="0.000224"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:45.200719" 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>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:45.201347" elapsed="0.000047"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:45.201501" elapsed="0.000033"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:10:45.184063" elapsed="0.017670">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:45.201918" elapsed="0.000036"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:45.181602" elapsed="0.020531">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:45.202496" elapsed="0.000046"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:10:45.159983" elapsed="0.042748">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:46.221314" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:46.219146" elapsed="0.002202"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:46.222096" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:46.221728" elapsed="0.000395"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:10:46.221571" elapsed="0.000589"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:46.222717" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:46.222399" elapsed="0.000344"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:10:46.222250" elapsed="0.000529"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:10:46.221422" elapsed="0.001466"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:46.223235" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:46.222968" elapsed="0.000326"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:46.224033" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:46.223548" elapsed="0.000513"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:46.223320" elapsed="0.000779"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:46.224290" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:46.224128" elapsed="0.000219"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:46.222947" elapsed="0.001421"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:46.224406" elapsed="0.000036"/>
</return>
<msg time="2026-08-23T02:10:46.224566" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:10:46.218650" elapsed="0.005942"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:46.224640" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:10:46.224784" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:10:46.218046" elapsed="0.006764"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:46.232131" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:46.231866" elapsed="0.000312"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:46.232578" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:46.232329" elapsed="0.000294"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:46.238883" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:46.238941" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:10:46.239054" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:10:46.234737" elapsed="0.004705">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:46.232688" elapsed="0.006837">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:46.239708" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:46.239558" elapsed="0.000239"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:46.232670" elapsed="0.007192">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:46.240400" elapsed="0.000036"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:46.240590" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:46.240539" elapsed="0.000108"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:46.240515" elapsed="0.000162"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:46.240888" elapsed="0.000032"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:46.241036" elapsed="0.000022"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:10:46.227523" elapsed="0.013662">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:46.241283" elapsed="0.000021"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:46.225051" elapsed="0.016365">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:46.241646" elapsed="0.000031"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:10:46.203636" elapsed="0.038162">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:47.259469" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:47.257305" elapsed="0.002196"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:47.260213" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:47.259886" elapsed="0.000354"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:10:47.259718" elapsed="0.000557"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:47.260822" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:47.260505" elapsed="0.000359"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:10:47.260358" elapsed="0.000542"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:10:47.259572" elapsed="0.001357"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:47.261264" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:47.261003" elapsed="0.000320"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:47.262061" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:47.261576" elapsed="0.000514"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:47.261348" elapsed="0.000779"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:47.262314" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:47.262153" elapsed="0.000217"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:47.260983" elapsed="0.001409"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:47.262428" elapsed="0.000035"/>
</return>
<msg time="2026-08-23T02:10:47.262587" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:10:47.256812" elapsed="0.005802"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:47.262660" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:10:47.262803" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:10:47.256163" elapsed="0.006666"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:47.270308" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:47.270050" elapsed="0.000305"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:47.270753" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:47.270508" elapsed="0.000289"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:47.276898" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:47.277019" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:10:47.277136" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:10:47.272943" elapsed="0.004640">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:47.270880" elapsed="0.006788">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:47.277872" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:47.277703" elapsed="0.000236"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:47.270861" elapsed="0.007103">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:47.278338" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:47.278473" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:47.278435" elapsed="0.000080"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:47.278418" elapsed="0.000119"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:47.278676" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:47.278746" elapsed="0.000016"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:10:47.265649" elapsed="0.013221">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:47.278942" elapsed="0.000038"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:47.263092" elapsed="0.015973">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:47.279237" elapsed="0.000021"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:10:47.242749" elapsed="0.036596">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:48.295895" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:48.293725" elapsed="0.002202"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:48.296620" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:48.296289" elapsed="0.000358"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:10:48.296135" elapsed="0.000548"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:48.297258" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:48.296936" elapsed="0.000349"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:10:48.296765" elapsed="0.000556"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:10:48.295992" elapsed="0.001359"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:48.297679" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:48.297419" elapsed="0.000383"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:48.298549" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:48.298078" elapsed="0.000498"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:48.297830" elapsed="0.000782"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:48.298799" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:48.298637" elapsed="0.000233"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:48.297400" elapsed="0.001491"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:48.298929" elapsed="0.000036"/>
</return>
<msg time="2026-08-23T02:10:48.299089" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:10:48.293252" elapsed="0.005863"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:48.299162" elapsed="0.000025"/>
</return>
<msg time="2026-08-23T02:10:48.299302" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:10:48.292664" elapsed="0.006663"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:48.306552" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:48.306296" elapsed="0.000304"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:48.307013" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:48.306753" elapsed="0.000303"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:48.313669" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:48.313727" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:10:48.313861" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:10:48.309164" elapsed="0.005085">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:48.307124" elapsed="0.007207">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:48.314514" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:48.314365" elapsed="0.000214"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:48.307106" elapsed="0.007497">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:48.314990" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:48.315123" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:48.315086" elapsed="0.000081"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:48.315069" elapsed="0.000123"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:48.315332" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:48.315401" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:10:48.302020" elapsed="0.013486">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:48.315609" elapsed="0.000017"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:48.299548" elapsed="0.016184">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:48.315914" elapsed="0.000023"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:10:48.280156" elapsed="0.035868">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:49.332765" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:49.330603" elapsed="0.002196"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:49.333517" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:49.333189" elapsed="0.000355"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:10:49.333034" elapsed="0.000546"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:49.334150" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:49.333812" elapsed="0.000365"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:10:49.333665" elapsed="0.000548"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:10:49.332885" elapsed="0.001357"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:49.334580" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:49.334315" elapsed="0.000322"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:49.335376" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:49.334907" elapsed="0.000498"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:49.334663" elapsed="0.000778"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:49.335626" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:49.335466" elapsed="0.000216"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:49.334296" elapsed="0.001406"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:49.335741" elapsed="0.000039"/>
</return>
<msg time="2026-08-23T02:10:49.335921" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:10:49.330125" elapsed="0.005823"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:49.335997" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:10:49.336139" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:10:49.329538" elapsed="0.006626"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:49.343446" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:49.343188" elapsed="0.000305"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:49.343902" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:49.343643" elapsed="0.000303"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:49.350866" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:49.350997" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:10:49.351334" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:10:49.346058" elapsed="0.006080">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:49.344013" elapsed="0.008328">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:49.352755" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:49.352417" elapsed="0.000515"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:49.343994" elapsed="0.008991">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:49.353792" elapsed="0.000082"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:49.354113" elapsed="0.000030"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:49.354031" elapsed="0.000175"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:49.353993" elapsed="0.000261"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:49.354561" elapsed="0.000047"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:49.354715" elapsed="0.000033"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:10:49.338874" elapsed="0.016104">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:49.355132" elapsed="0.000035"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:49.336412" elapsed="0.018935">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:49.355710" elapsed="0.000047"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:10:49.316907" elapsed="0.039072">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:50.372854" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:50.370707" elapsed="0.002179"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:50.373625" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:50.373275" elapsed="0.000378"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:10:50.373097" elapsed="0.000592"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:50.374270" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:50.373935" elapsed="0.000364"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:10:50.373771" elapsed="0.000564"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:10:50.372954" elapsed="0.001411"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:50.374697" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:50.374436" elapsed="0.000320"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:50.375608" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:50.375139" elapsed="0.000496"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:50.374781" elapsed="0.000890"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:50.375874" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:50.375696" elapsed="0.000307"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:50.374416" elapsed="0.001611"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:50.376066" elapsed="0.000035"/>
</return>
<msg time="2026-08-23T02:10:50.376226" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:10:50.370205" elapsed="0.006047"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:50.376299" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:10:50.376441" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:10:50.369605" elapsed="0.006862"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:50.383705" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:50.383449" elapsed="0.000304"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:50.384163" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:50.383918" elapsed="0.000289"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:50.391304" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:50.391428" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:10:50.391663" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:10:50.386322" elapsed="0.006321">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:50.384273" elapsed="0.008686">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:50.393475" elapsed="0.000062"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:50.393056" elapsed="0.000589"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:50.384254" elapsed="0.009449">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:50.394675" elapsed="0.000063"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:50.395061" elapsed="0.000043"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:50.394969" elapsed="0.000205"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:50.394926" elapsed="0.000303"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:50.395600" elapsed="0.000050"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:50.395775" elapsed="0.000046"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:10:50.379170" elapsed="0.016933">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:50.396295" elapsed="0.000042"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:50.376688" elapsed="0.019849">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:50.397126" elapsed="0.000063"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:10:50.356888" elapsed="0.040546">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:51.413757" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:51.411627" elapsed="0.002162"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:51.414536" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:51.414167" elapsed="0.000396"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:10:51.414014" elapsed="0.000586"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:51.415183" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:51.414830" elapsed="0.000380"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:10:51.414682" elapsed="0.000565"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:10:51.413871" elapsed="0.001405"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:51.415607" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:51.415345" elapsed="0.000320"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:51.416394" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:51.415930" elapsed="0.000493"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:51.415690" elapsed="0.000768"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:51.416642" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:51.416483" elapsed="0.000214"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:51.415326" elapsed="0.001391"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:51.416754" elapsed="0.000037"/>
</return>
<msg time="2026-08-23T02:10:51.416930" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:10:51.411157" elapsed="0.005800"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:51.417004" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:10:51.417147" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:10:51.410565" elapsed="0.006608"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:51.424431" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:51.424176" elapsed="0.000301"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:51.424884" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:51.424627" elapsed="0.000301"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:51.431159" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:51.431215" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:10:51.431326" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:10:51.427077" elapsed="0.004628">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:51.424993" elapsed="0.006869">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:51.432050" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:51.431899" elapsed="0.000217"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:51.424975" elapsed="0.007165">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:51.432515" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:51.432648" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:51.432611" elapsed="0.000080"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:51.432594" elapsed="0.000119"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:51.432870" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:51.432943" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:10:51.419900" elapsed="0.013149">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:51.433118" elapsed="0.000015"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:51.417412" elapsed="0.015800">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:51.433400" elapsed="0.000022"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:10:51.398328" elapsed="0.035181">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:52.450015" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:52.447862" elapsed="0.002186"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:52.450741" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:52.450417" elapsed="0.000351"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:10:52.450264" elapsed="0.000539"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:52.451372" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:52.451050" elapsed="0.000348"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:10:52.450903" elapsed="0.000530"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:10:52.450118" elapsed="0.001343"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:52.451798" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:52.451535" elapsed="0.000336"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:52.452590" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:52.452126" elapsed="0.000491"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:52.451897" elapsed="0.000755"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:52.452849" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:52.452677" elapsed="0.000229"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:52.451515" elapsed="0.001411"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:52.452963" elapsed="0.000037"/>
</return>
<msg time="2026-08-23T02:10:52.453122" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:10:52.447372" elapsed="0.005853"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:52.453274" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:10:52.453419" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:10:52.446783" elapsed="0.006661"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:52.460734" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:52.460477" elapsed="0.000306"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:52.461191" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:52.460947" elapsed="0.000288"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:52.467346" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:52.467404" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:10:52.467517" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:10:52.463352" elapsed="0.004580">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:52.461300" elapsed="0.006720">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:52.468203" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:52.468055" elapsed="0.000212"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:52.461282" elapsed="0.007008">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:52.468650" elapsed="0.000025"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:52.468782" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:52.468745" elapsed="0.000079"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:52.468727" elapsed="0.000134"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:52.469000" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:52.469068" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:10:52.456126" elapsed="0.013047">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:52.469241" elapsed="0.000018"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:52.453665" elapsed="0.015675">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:52.469501" elapsed="0.000022"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:10:52.434434" elapsed="0.035209">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:53.486820" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:53.484605" elapsed="0.002261"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:53.487561" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:53.487232" elapsed="0.000356"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:10:53.487077" elapsed="0.000547"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:53.488195" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:53.487871" elapsed="0.000352"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:10:53.487707" elapsed="0.000552"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:10:53.486935" elapsed="0.001358"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:53.488624" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:53.488362" elapsed="0.000321"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:53.489420" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:53.488952" elapsed="0.000497"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:53.488708" elapsed="0.000777"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:53.489670" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:53.489511" elapsed="0.000216"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:53.488343" elapsed="0.001405"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:53.489785" elapsed="0.000034"/>
</return>
<msg time="2026-08-23T02:10:53.489958" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:10:53.484134" elapsed="0.005851"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:53.490032" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:10:53.490176" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:10:53.483547" elapsed="0.006655"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:53.497610" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:53.497354" elapsed="0.000303"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:53.498069" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:53.497807" elapsed="0.000306"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:53.504127" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:53.504184" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:10:53.504293" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:10:53.500247" elapsed="0.004429">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:53.498179" elapsed="0.006645">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:53.505028" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:53.504876" elapsed="0.000218"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:53.498161" elapsed="0.006956">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:53.505491" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:53.505624" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:53.505586" elapsed="0.000081"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:53.505569" elapsed="0.000120"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:53.505825" elapsed="0.000036"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:53.505911" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:10:53.492917" elapsed="0.013099">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:53.506085" elapsed="0.000015"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:53.490448" elapsed="0.015732">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:53.506349" elapsed="0.000048"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:10:53.470482" elapsed="0.036004">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:54.522743" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:54.520618" elapsed="0.002157"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:54.523490" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:54.523165" elapsed="0.000352"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:10:54.523013" elapsed="0.000539"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:54.524119" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:54.523784" elapsed="0.000362"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:10:54.523635" elapsed="0.000545"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:10:54.522855" elapsed="0.001355"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:54.524542" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:54.524282" elapsed="0.000319"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:54.525335" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:54.524867" elapsed="0.000500"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:54.524626" elapsed="0.000776"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:54.525587" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:54.525428" elapsed="0.000213"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:54.524262" elapsed="0.001400"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:54.525699" elapsed="0.000035"/>
</return>
<msg time="2026-08-23T02:10:54.525873" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:10:54.520150" elapsed="0.005750"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:54.525949" elapsed="0.000086"/>
</return>
<msg time="2026-08-23T02:10:54.526158" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:10:54.519565" elapsed="0.006619"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:54.533396" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:54.533140" elapsed="0.000303"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:54.533848" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:54.533592" elapsed="0.000302"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:54.540276" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:54.540332" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:10:54.540444" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:10:54.536006" elapsed="0.004816">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:54.533961" elapsed="0.006966">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:54.541112" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:54.540962" elapsed="0.000215"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:54.533943" elapsed="0.007258">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:54.541573" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:54.541705" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:54.541668" elapsed="0.000080"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:54.541651" elapsed="0.000119"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:54.541925" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:54.541997" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:10:54.528866" elapsed="0.013236">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:54.542171" elapsed="0.000016"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:54.526406" elapsed="0.015860">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:54.542435" elapsed="0.000022"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:10:54.507281" elapsed="0.035263">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<msg time="2026-08-23T02:10:54.542673" level="FAIL">Keyword 'Check_Device_Connected' failed after retrying for 20 seconds. The last error was: HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${timeout}</arg>
<arg>${period}</arg>
<arg>Check_Device_Connected</arg>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-08-23T02:10:33.746218" elapsed="20.796551">Keyword 'Check_Device_Connected' failed after retrying for 20 seconds. The last error was: HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<arg>${device_name}</arg>
<doc>Wait for the device to become connected.
It is more readable to use this keyword in a test case than to put the whole WUKS below into it.</doc>
<status status="FAIL" start="2026-08-23T02:10:33.745709" elapsed="20.797212">Keyword 'Check_Device_Connected' failed after retrying for 20 seconds. The last error was: HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<doc>Wait until the device becomes available through Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:10:33.659762" elapsed="20.883318">Keyword 'Check_Device_Connected' failed after retrying for 20 seconds. The last error was: HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</test>
<test id="s1-s4-s2-t6" name="Check_Device_Data_Is_Empty" line="71">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-08-23T02:10:54.547823" elapsed="0.000327"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:10:54.547454" elapsed="0.000773"/>
</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-08-23T02:10:54.549610" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:54.549457" elapsed="0.000218"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:54.549431" elapsed="0.000275"/>
</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-08-23T02:10:54.555078" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:54.554971" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:54.554953" elapsed="0.000193"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:10:54.556141" 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-08-23T02:10:54.555745" elapsed="0.000423"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:10:54.556662" 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-08-23T02:10:54.556329" elapsed="0.000359"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:10:54.556731" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:10:54.556903" 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-08-23T02:10:54.555372" elapsed="0.001556"/>
</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-08-23T02:10:54.562275" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:54.562167" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:54.562148" 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-08-23T02:10:54.563614" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:54.563508" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:54.563490" elapsed="0.000193"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:10:54.564255" level="INFO">${karaf_connection_index} = 11</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-08-23T02:10:54.563824" elapsed="0.000458"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:10:54.564711" level="INFO">${current_connection_index} = 13</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-08-23T02:10:54.564438" elapsed="0.000299"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:10:54.594702" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:10:54.565311" elapsed="0.029632"/>
</kw>
<msg time="2026-08-23T02:10:54.595134" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:10:54.595181" 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 "n "e "t "c "o "n "f "...</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-08-23T02:10:54.564909" elapsed="0.030309"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:10:54.618007" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "I "s "_ "E "m "p "t "y "[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-08-23T02:10:54.595783" elapsed="0.022454"/>
</kw>
<msg time="2026-08-23T02:10:54.618423" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:10:54.618470" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "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-08-23T02:10:54.595384" elapsed="0.023123"/>
</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-08-23T02:10:54.618806" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:54.618584" elapsed="0.000328"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:54.618565" elapsed="0.000394"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:54.619505" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "I "s "_ "E "m "p "t "y "[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-08-23T02:10:54.619101" elapsed="0.000472"/>
</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-08-23T02:10:54.619870" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:54.619639" elapsed="0.000313"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:54.619621" elapsed="0.000357"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:10:54.620011" 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-08-23T02:10:54.623422" elapsed="0.000146"/>
</kw>
<msg time="2026-08-23T02:10:54.623647" 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-08-23T02:10:54.622672" elapsed="0.001080"/>
</kw>
<kw name="Open 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-08-23T02:10:54.624912" elapsed="0.000040"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:54.626300" elapsed="0.000040"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:10:54.620896" elapsed="0.005526"/>
</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-08-23T02:10:54.620269" elapsed="0.006283"/>
</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-08-23T02:10:54.563208" elapsed="0.063443"/>
</kw>
<msg time="2026-08-23T02:10:54.626742" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:10:54.626785" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "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-08-23T02:10:54.562492" elapsed="0.064330"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:10:54.627048" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:10:54.626915" elapsed="0.000193"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:54.626896" elapsed="0.000236"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 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-08-23T02:10:54.627528" 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-08-23T02:10:54.627969" elapsed="0.000027"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:10:54.628043" 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-08-23T02:10:54.561821" elapsed="0.066329"/>
</kw>
<msg time="2026-08-23T02:10:54.628243" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:10:54.628287" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "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-08-23T02:10:54.557282" elapsed="0.071041"/>
</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-08-23T02:10:54.628642" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:54.628396" elapsed="0.000300"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:54.628379" elapsed="0.000340"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:10:54.557144" elapsed="0.071598"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:10:54.556979" elapsed="0.071792"/>
</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-08-23T02:10:54.554593" elapsed="0.074231"/>
</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-08-23T02:10:54.549062" elapsed="0.079871"/>
</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-08-23T02:10:54.548440" elapsed="0.080539"/>
</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-08-23T02:10:54.544240" elapsed="0.084790"/>
</kw>
<kw name="Regexp Escape" owner="BuiltIn">
<msg time="2026-08-23T02:10:54.629517" level="INFO">${escaped} = urn:ietf:params:xml:ns:netconf:base:1\.0</msg>
<var>${escaped}</var>
<arg>${ODL_NETCONF_NAMESPACE}</arg>
<doc>Returns each argument escaped for use as a regular expression.</doc>
<status status="PASS" start="2026-08-23T02:10:54.629186" elapsed="0.000358"/>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:54.630887" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:54.630478" elapsed="0.000438"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:54.639927" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:54.639659" elapsed="0.000316"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:54.640378" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:54.640126" elapsed="0.000298"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:54.645969" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:54.646017" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:54.646109" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:10:54.642536" elapsed="0.003921">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:54.640490" elapsed="0.006048">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:54.646720" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:54.646571" elapsed="0.000213"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:54.640471" elapsed="0.006336">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:54.647198" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:54.647330" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:54.647292" elapsed="0.000079"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:54.647275" elapsed="0.000117"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:54.647529" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:54.647597" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:10:54.635333" elapsed="0.012367">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:54.647768" elapsed="0.000015"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:54.631136" elapsed="0.016742">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:10:54.647933" elapsed="0.000015"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:10:54.630217" elapsed="0.017806">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:54.648275" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:54.648128" elapsed="0.000202"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:54.648492" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:54.648354" elapsed="0.000191"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:54.648700" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:54.648568" elapsed="0.000184"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:54.648111" elapsed="0.000662"/>
</if>
<arg>&lt;data xmlns\="${escaped}"(\/&gt;|&gt;&lt;\/data&gt;)</arg>
<arg>${True}</arg>
<status status="FAIL" start="2026-08-23T02:10:54.629745" elapsed="0.019119">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<doc>Get the device data and make sure it is empty.</doc>
<status status="FAIL" start="2026-08-23T02:10:54.543518" elapsed="0.105484">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</test>
<test id="s1-s4-s2-t7" name="Create_Device_Data_Label_Via_Xml" line="76">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-08-23T02:10:54.652629" elapsed="0.000321"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:10:54.652272" elapsed="0.000754"/>
</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-08-23T02:10:54.654387" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:54.654231" elapsed="0.000221"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:54.654205" elapsed="0.000278"/>
</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-08-23T02:10:54.661010" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:54.660902" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:54.660875" elapsed="0.000204"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:10:54.662075" 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-08-23T02:10:54.661677" elapsed="0.000424"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:10:54.662555" 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-08-23T02:10:54.662262" elapsed="0.000319"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:10:54.662626" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:10:54.662779" 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-08-23T02:10:54.661298" elapsed="0.001506"/>
</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-08-23T02:10:54.668224" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:54.668116" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:54.668097" 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-08-23T02:10:54.669520" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:54.669413" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:54.669395" elapsed="0.000193"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:10:54.670142" level="INFO">${karaf_connection_index} = 11</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-08-23T02:10:54.669729" elapsed="0.000439"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:10:54.670585" level="INFO">${current_connection_index} = 13</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-08-23T02:10:54.670324" elapsed="0.000287"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:10:54.700345" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:10:54.671252" elapsed="0.029523"/>
</kw>
<msg time="2026-08-23T02:10:54.701246" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:10:54.701350" 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 "n "e "t "c "o "n "f "...</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-08-23T02:10:54.670767" elapsed="0.030663"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:10:54.720471" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "r "e "a "t "e "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "L "a "b "e "l "_ "V "i "a "_ "X "m "l "[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-08-23T02:10:54.702806" elapsed="0.018057"/>
</kw>
<msg time="2026-08-23T02:10:54.721142" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:10:54.721210" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "r "e "a "t "e "_ "D "e "v "i "c "e "_ "D "a "t "a "_ ...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:10:54.701829" elapsed="0.019437"/>
</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-08-23T02:10:54.721723" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:54.721389" elapsed="0.000473"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:54.721355" elapsed="0.000548"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:54.722705" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "r "e "a "t "e "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "L "a "b "e "l "_ "V "i "a "_ "X "m "l "[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-08-23T02:10:54.722110" elapsed="0.000699"/>
</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-08-23T02:10:54.723268" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:54.722940" elapsed="0.000445"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:54.722913" elapsed="0.000509"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:10:54.723474" elapsed="0.000048"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-23T02:10:54.728146" elapsed="0.000151"/>
</kw>
<msg time="2026-08-23T02:10:54.728375" 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-08-23T02:10:54.727471" elapsed="0.001014"/>
</kw>
<kw name="Open 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-08-23T02:10:54.729686" elapsed="0.000042"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:54.731033" elapsed="0.000040"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:10:54.724816" elapsed="0.006340"/>
</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-08-23T02:10:54.723921" elapsed="0.007367"/>
</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-08-23T02:10:54.669113" elapsed="0.062275"/>
</kw>
<msg time="2026-08-23T02:10:54.731481" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:10:54.731525" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "r "e "a "t "e "_ "D "e "v "i "c "e "_ "D "a "t "a "_ ...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:10:54.668441" elapsed="0.063123"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:10:54.732081" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-08-23T02:10:54.731639" elapsed="0.000505"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:54.731621" elapsed="0.000548"/>
</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-08-23T02:10:54.732585" 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-08-23T02:10:54.732944" elapsed="0.000026"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:10:54.733036" 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-08-23T02:10:54.667763" elapsed="0.065380"/>
</kw>
<msg time="2026-08-23T02:10:54.733235" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:10:54.733278" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "r "e "a "t "e "_ "D "e "v "i "c "e "_ "D "a "t "a "_ ...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:10:54.663193" elapsed="0.070123"/>
</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-08-23T02:10:54.733640" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:54.733393" elapsed="0.000311"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:54.733376" elapsed="0.000352"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:10:54.663053" elapsed="0.070699"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:10:54.662871" elapsed="0.070912"/>
</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-08-23T02:10:54.660519" elapsed="0.073481"/>
</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-08-23T02:10:54.653812" elapsed="0.080254"/>
</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-08-23T02:10:54.653231" elapsed="0.080880"/>
</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-08-23T02:10:54.649868" elapsed="0.084297"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:10:54.734799" level="INFO">${mapping} = {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping}</var>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-23T02:10:54.734354" elapsed="0.000472"/>
</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-08-23T02:10:54.768174" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/dataorig.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:54.767782" elapsed="0.000421"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T02:10:54.768957" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/dataorig.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-23T02:10:54.768698" elapsed="0.000336">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/dataorig.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-23T02:10:54.769127" 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-08-23T02:10:54.768365" elapsed="0.000787"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:10:54.769696" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/dataorig/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-08-23T02:10:54.769313" elapsed="0.000409"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:10:54.770036" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/dataorig/location.uri"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/dataorig/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:10:54.770188" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:10:54.769899" elapsed="0.000314"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:54.770606" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:54.770365" 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-08-23T02:10:54.771618" level="INFO">mapping: {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:54.771363" elapsed="0.000299"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:10:54.772094" 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-08-23T02:10:54.771815" elapsed="0.000304"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:10:54.772776" level="INFO">${value} = netconf-test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:10:54.772477" elapsed="0.000324"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:10:54.773751" level="INFO">${encoded} = netconf-test-device</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-08-23T02:10:54.773496" elapsed="0.000281"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:10:54.773828" elapsed="0.000051"/>
</return>
<msg time="2026-08-23T02:10:54.774007" level="INFO">${encoded_value} = netconf-test-device</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-08-23T02:10:54.773173" elapsed="0.000859"/>
</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-08-23T02:10:54.774182" elapsed="0.000246"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:10:54.772345" elapsed="0.002124"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:10:54.775056" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:10:54.774712" elapsed="0.000372"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:10:54.775816" level="INFO">${encoded} = /rests</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-08-23T02:10:54.775579" elapsed="0.000285"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:10:54.775955" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T02:10:54.776110" level="INFO">${encoded_value} = /rests</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-08-23T02:10:54.775266" elapsed="0.000869"/>
</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-08-23T02:10:54.776284" elapsed="0.000222"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-23T02:10:54.774583" elapsed="0.001963"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-23T02:10:54.772169" elapsed="0.004413"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-23T02:10:54.776624" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:10:54.776781" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-23T02:10:54.771036" elapsed="0.005770"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:54.770716" elapsed="0.006141"/>
</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-08-23T02:10:54.777030" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:54.776885" elapsed="0.000201"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:54.770697" elapsed="0.006409"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:10:54.777817" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount</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-08-23T02:10:54.777246" elapsed="0.000622"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T02:10:54.777919" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/dataorig.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/dataorig.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/dataorig/${file_name}.</doc>
<status status="PASS" start="2026-08-23T02:10:54.767172" elapsed="0.010872"/>
</kw>
<msg time="2026-08-23T02:10:54.778097" 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-08-23T02:10:54.754679" elapsed="0.023465"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/dataorig.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/dataorig.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/dataorig/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:54.790634" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/dataorig.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/dataorig.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/dataorig/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:54.803115" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/dataorig.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/dataorig.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/dataorig/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:54.815552" 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-08-23T02:10:54.815744" 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-08-23T02:10:54.815931" 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-08-23T02:10:54.816296" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:54.816154" elapsed="0.000200"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:54.816139" 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-08-23T02:10:54.816515" 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-08-23T02:10:54.816718" 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-08-23T02:10:54.816899" elapsed="0.000022"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T02:10:54.816110" elapsed="0.000845"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T02:10:54.816009" 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-08-23T02:10:54.817126" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:54.817203" elapsed="0.000016"/>
</return>
<msg time="2026-08-23T02:10:54.817323" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount</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-08-23T02:10:54.750478" elapsed="0.066871"/>
</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-08-23T02:10:54.842277" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/dataorig.vanadium/post_data.xml</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:54.841899" elapsed="0.000407"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T02:10:54.843030" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/dataorig.vanadium/post_data.xml' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-23T02:10:54.842796" elapsed="0.000312">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/dataorig.vanadium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-08-23T02:10:54.843201" 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-08-23T02:10:54.842466" elapsed="0.000759"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:10:54.845017" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/dataorig/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-08-23T02:10:54.843758" elapsed="0.001334"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:10:54.845870" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/dataorig/post_data.xml"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/dataorig/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:10:54.846215" level="INFO">${template} = &lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;
&lt;l&gt;Content&lt;/l&gt;
&lt;/cont&gt;
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:10:54.845502" elapsed="0.000775"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:54.847279" level="INFO">&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;
&lt;l&gt;Content&lt;/l&gt;
&lt;/cont&gt;
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:54.846632" elapsed="0.000754"/>
</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-08-23T02:10:54.848319" elapsed="0.000061"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:54.847555" elapsed="0.000903"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:54.849540" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</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-08-23T02:10:54.848869" elapsed="0.000731"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:54.848518" elapsed="0.001161"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:54.847504" elapsed="0.002224"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:10:54.851141" level="INFO">${final_text} = &lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;
&lt;l&gt;Content&lt;/l&gt;
&lt;/cont&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-08-23T02:10:54.850086" elapsed="0.001121"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T02:10:54.851325" elapsed="0.000083"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/dataorig.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/dataorig.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/dataorig/${file_name}.</doc>
<status status="PASS" start="2026-08-23T02:10:54.841261" elapsed="0.010379"/>
</kw>
<msg time="2026-08-23T02:10:54.851927" 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-08-23T02:10:54.828205" elapsed="0.023848"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/dataorig.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/dataorig.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/dataorig/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:54.868741" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/dataorig.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/dataorig.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/dataorig/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:54.881237" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/dataorig.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/dataorig.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/dataorig/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:54.893753" 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-08-23T02:10:54.893963" 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-08-23T02:10:54.894147" 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-08-23T02:10:54.894542" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:54.894397" elapsed="0.000201"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:54.894381" 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-08-23T02:10:54.894759" 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-08-23T02:10:54.894939" 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-08-23T02:10:54.895124" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T02:10:54.894351" elapsed="0.000827"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T02:10:54.894234" elapsed="0.000974"/>
</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-08-23T02:10:54.895369" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:54.895446" elapsed="0.000015"/>
</return>
<msg time="2026-08-23T02:10:54.895573" level="INFO">${data} = &lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;
&lt;l&gt;Content&lt;/l&gt;
&lt;/cont&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-08-23T02:10:54.827346" elapsed="0.068255"/>
</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-08-23T02:10:54.897008" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/dataorig/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-08-23T02:10:54.896674" elapsed="0.000420">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/dataorig/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-23T02:10:54.897190" 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-08-23T02:10:54.896327" elapsed="0.000888"/>
</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-08-23T02:10:54.897625" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:54.897370" elapsed="0.000312"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:54.898200" 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-08-23T02:10:54.897901" elapsed="0.000325"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:54.897706" elapsed="0.000555"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:54.897350" elapsed="0.000933"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:10:54.900847" 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-08-23T02:10:54.898432" elapsed="0.002444"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-23T02:10:54.900930" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:10:54.901085" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/dataorig/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-23T02:10:54.895978" elapsed="0.005132"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:54.902647" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:54.902397" elapsed="0.000296"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:54.903281" level="INFO">&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;
&lt;l&gt;Content&lt;/l&gt;
&lt;/cont&gt;</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:54.903008" elapsed="0.000325"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:54.903725" 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-08-23T02:10:54.903481" elapsed="0.000287"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:54.904174" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:54.903931" elapsed="0.000286"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-08-23T02:10:54.905044" 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-08-23T02:10:54.904822" elapsed="0.000248"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-08-23T02:10:54.905395" 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-08-23T02:10:54.905221" 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-08-23T02:10:54.905567" elapsed="0.000218"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:54.906226" 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-08-23T02:10:54.905970" elapsed="0.000300"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-08-23T02:10:54.906312" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:10:54.906471" 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-08-23T02:10:54.904419" 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-08-23T02:10:54.912651" level="INFO">POST Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Content-Length': '72', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;
&lt;l&gt;Content&lt;/l&gt;
&lt;/cont&gt; 
 </msg>
<msg time="2026-08-23T02:10:54.912704" level="INFO">POST Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:54.912797" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:10:54.908674" elapsed="0.004525">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:54.906565" elapsed="0.006721">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="POST On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:54.913472" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:54.913319" elapsed="0.000219"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:54.906547" elapsed="0.007014">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:54.913953" elapsed="0.000058"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:54.914126" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:54.914089" elapsed="0.000078"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:54.914071" elapsed="0.000117"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:54.914331" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:54.914397" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>content_type=${content_type}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>POST data to given URI, check status code and return response text.
${content_type} and ${accept} are mandatory Python objects with headers to use.
If ${normalize_json}, normalize text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:10:54.901441" elapsed="0.013061">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:54.914582" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>extension=xml</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>content_type=${HEADERS_XML}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>endline=${\n}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve URI and data from folder, call Post_To_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:54.739536" elapsed="0.175142">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=response</arg>
<arg>mapping=${mapping}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:54.914985" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:54.914793" elapsed="0.000260"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:54.914776" elapsed="0.000301"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:54.915122" elapsed="0.000015"/>
</return>
<arg>${directory_with_template_folders}${/}dataorig</arg>
<arg>${mapping}</arg>
<doc>Add arguments sensible for XML data, return Post_Templated response text.
Optionally, verification against response.xml (no iteration) is called.</doc>
<status status="FAIL" start="2026-08-23T02:10:54.735131" elapsed="0.180089">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount</status>
</kw>
<doc>Send a sample test data label into the device and check that the request went OK.</doc>
<status status="FAIL" start="2026-08-23T02:10:54.649294" elapsed="0.266097">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount</status>
</test>
<test id="s1-s4-s2-t8" name="Check_Device_Data_Label_Is_Created" line="81">
<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-08-23T02:10:54.918992" elapsed="0.000230"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:10:54.918713" elapsed="0.000563"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:10:54.920264" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:54.920153" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:54.920134" elapsed="0.000198"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:10:54.925307" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:54.925195" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:54.925174" elapsed="0.000201"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:10:54.926373" 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-08-23T02:10:54.925991" elapsed="0.000409"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:10:54.926866" 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-08-23T02:10:54.926556" elapsed="0.000337"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:10:54.926937" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:10:54.927101" 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-08-23T02:10:54.925600" elapsed="0.001527"/>
</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-08-23T02:10:54.932628" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:54.932482" elapsed="0.000196"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:54.932463" elapsed="0.000238"/>
</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-08-23T02:10:54.934009" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:54.933899" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:54.933879" elapsed="0.000199"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:10:54.934631" level="INFO">${karaf_connection_index} = 11</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-08-23T02:10:54.934223" elapsed="0.000434"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:10:54.935124" level="INFO">${current_connection_index} = 13</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-08-23T02:10:54.934815" elapsed="0.000335"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:10:54.965910" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:10:54.935718" elapsed="0.030387"/>
</kw>
<msg time="2026-08-23T02:10:54.966296" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:10:54.966343" 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 "n "e "t "c "o "n "f "...</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-08-23T02:10:54.935313" elapsed="0.031072"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:10:54.986122" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "L "a "b "e "l "_ "I "s "_ "C "r "e "a "t "e "d "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-08-23T02:10:54.966974" elapsed="0.019343"/>
</kw>
<msg time="2026-08-23T02:10:54.986501" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:10:54.986547" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "L ...</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-08-23T02:10:54.966552" elapsed="0.020033"/>
</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-08-23T02:10:54.986906" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:54.986662" elapsed="0.000326"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:54.986642" elapsed="0.000371"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:54.987566" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "L "a "b "e "l "_ "I "s "_ "C "r "e "a "t "e "d "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:54.987169" elapsed="0.000467"/>
</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-08-23T02:10:54.987933" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:54.987703" elapsed="0.000311"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:54.987685" elapsed="0.000354"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:10:54.988073" 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-08-23T02:10:54.991829" elapsed="0.000195"/>
</kw>
<msg time="2026-08-23T02:10:54.992103" 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-08-23T02:10:54.990903" elapsed="0.001308"/>
</kw>
<kw name="Open 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-08-23T02:10:54.993346" elapsed="0.000039"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:54.994702" elapsed="0.000040"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:10:54.989000" elapsed="0.005827"/>
</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-08-23T02:10:54.988347" elapsed="0.006628"/>
</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-08-23T02:10:54.933572" elapsed="0.061581"/>
</kw>
<msg time="2026-08-23T02:10:54.995254" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:10:54.995297" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "L ...</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-08-23T02:10:54.932866" elapsed="0.062471"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:10:54.995579" elapsed="0.000029"/>
</return>
<status status="PASS" start="2026-08-23T02:10:54.995417" elapsed="0.000227"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:54.995396" elapsed="0.000273"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 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-08-23T02:10:54.996129" 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-08-23T02:10:54.996465" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:10:54.996537" 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-08-23T02:10:54.932147" elapsed="0.064498"/>
</kw>
<msg time="2026-08-23T02:10:54.996740" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:10:54.996784" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "L ...</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-08-23T02:10:54.927491" elapsed="0.069497"/>
</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-08-23T02:10:54.997345" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:54.997094" elapsed="0.000306"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:54.997075" elapsed="0.000348"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:10:54.927352" elapsed="0.070095"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:10:54.927179" elapsed="0.070302"/>
</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-08-23T02:10:54.924809" elapsed="0.072729"/>
</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-08-23T02:10:54.919863" elapsed="0.077733"/>
</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-08-23T02:10:54.919425" elapsed="0.078216"/>
</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-08-23T02:10:54.916400" elapsed="0.081296"/>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:54.998996" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:54.998588" elapsed="0.000435"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:55.006545" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:55.006295" elapsed="0.000297"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:55.007003" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:55.006741" elapsed="0.000305"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:55.013178" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:55.013226" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:55.013328" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:10:55.009227" elapsed="0.004472">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:55.007112" elapsed="0.006670">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:55.013987" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:55.013815" elapsed="0.000237"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:55.007094" elapsed="0.006981">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:55.014498" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:55.014630" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:55.014594" elapsed="0.000077"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:55.014577" elapsed="0.000115"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:55.014848" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:55.014920" elapsed="0.000014"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:10:55.001850" elapsed="0.013175">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:55.015094" elapsed="0.000015"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:54.999255" elapsed="0.015960">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:10:55.015270" elapsed="0.000015"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:10:54.998322" elapsed="0.017045">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:55.015686" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:55.015470" elapsed="0.000292"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:55.016013" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:55.015794" elapsed="0.000296"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:55.016308" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:55.016122" elapsed="0.000260"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:55.015442" elapsed="0.000968"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:10:54.997925" elapsed="0.018592">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<doc>Get the device data label and make sure it contains the created content.</doc>
<status status="FAIL" start="2026-08-23T02:10:54.915794" elapsed="0.100915">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</test>
<test id="s1-s4-s2-t9" name="Modify_Device_Data_Label_Via_Xml" line="86">
<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-08-23T02:10:55.021358" elapsed="0.000295"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:10:55.020992" elapsed="0.000737"/>
</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-08-23T02:10:55.023176" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:55.022993" elapsed="0.000252"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:55.022966" elapsed="0.000311"/>
</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-08-23T02:10:55.028443" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:55.028335" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:55.028317" elapsed="0.000193"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:10:55.029506" 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-08-23T02:10:55.029126" elapsed="0.000407"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:10:55.030001" 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-08-23T02:10:55.029690" elapsed="0.000337"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:10:55.030071" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:10:55.030226" 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-08-23T02:10:55.028732" elapsed="0.001519"/>
</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-08-23T02:10:55.035699" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:55.035591" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:55.035572" 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-08-23T02:10:55.037010" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:55.036900" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:55.036881" elapsed="0.000197"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:10:55.037610" level="INFO">${karaf_connection_index} = 11</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-08-23T02:10:55.037220" elapsed="0.000417"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:10:55.038083" level="INFO">${current_connection_index} = 13</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-08-23T02:10:55.037791" elapsed="0.000317"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:10:55.067805" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:10:55.038662" elapsed="0.029365"/>
</kw>
<msg time="2026-08-23T02:10:55.068212" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:10:55.068258" 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 "n "e "t "c "o "n "f "...</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-08-23T02:10:55.038266" elapsed="0.030028"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:10:55.087300" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "M "o "d "i "f "y "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "L "a "b "e "l "_ "V "i "a "_ "X "m "l "[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-08-23T02:10:55.068878" elapsed="0.018618"/>
</kw>
<msg time="2026-08-23T02:10:55.087679" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:10:55.087724" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "M "o "d "i "f "y "_ "D "e "v "i "c "e "_ "D "a "t "a "_ ...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:10:55.068461" elapsed="0.019300"/>
</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-08-23T02:10:55.088079" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:55.087858" elapsed="0.000300"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:55.087817" elapsed="0.000366"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:55.088717" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "M "o "d "i "f "y "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "L "a "b "e "l "_ "V "i "a "_ "X "m "l "[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-08-23T02:10:55.088324" elapsed="0.000463"/>
</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-08-23T02:10:55.089084" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:55.088870" elapsed="0.000293"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:55.088851" elapsed="0.000337"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:10:55.089223" 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-08-23T02:10:55.092557" elapsed="0.000271"/>
</kw>
<msg time="2026-08-23T02:10:55.092944" 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-08-23T02:10:55.091820" elapsed="0.001228"/>
</kw>
<kw name="Open 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-08-23T02:10:55.094157" elapsed="0.000039"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:55.095445" elapsed="0.000040"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:10:55.090096" elapsed="0.005471"/>
</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-08-23T02:10:55.089484" elapsed="0.006211"/>
</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-08-23T02:10:55.036576" elapsed="0.059218"/>
</kw>
<msg time="2026-08-23T02:10:55.096086" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:10:55.096132" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "M "o "d "i "f "y "_ "D "e "v "i "c "e "_ "D "a "t "a "_ ...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:10:55.035933" elapsed="0.060236"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:10:55.096385" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:10:55.096278" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:55.096258" 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-08-23T02:10:55.096869" 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-08-23T02:10:55.097197" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:10:55.097270" 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-08-23T02:10:55.035220" elapsed="0.062157"/>
</kw>
<msg time="2026-08-23T02:10:55.097470" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:10:55.097515" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "M "o "d "i "f "y "_ "D "e "v "i "c "e "_ "D "a "t "a "_ ...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:10:55.030618" elapsed="0.066934"/>
</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-08-23T02:10:55.097948" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:55.097626" elapsed="0.000379"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:55.097609" elapsed="0.000420"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:10:55.030478" elapsed="0.067574"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:10:55.030306" elapsed="0.067774"/>
</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-08-23T02:10:55.027976" elapsed="0.070157"/>
</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-08-23T02:10:55.022570" elapsed="0.075618"/>
</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-08-23T02:10:55.021984" elapsed="0.076250"/>
</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-08-23T02:10:55.017980" elapsed="0.080306"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:10:55.098902" level="INFO">${mapping} = {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping}</var>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-23T02:10:55.098452" elapsed="0.000476"/>
</kw>
<kw name="Put_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Put_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-08-23T02:10:55.132511" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:55.132139" elapsed="0.000400"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T02:10:55.133278" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamod1.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-23T02:10:55.133045" elapsed="0.000298">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamod1.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-23T02:10:55.133437" 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-08-23T02:10:55.132699" elapsed="0.000762"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:10:55.134020" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1/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-08-23T02:10:55.133621" elapsed="0.000426"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:10:55.134341" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamod1/location.uri"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamod1/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:10:55.134486" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount/test:cont
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:10:55.134205" elapsed="0.000307"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:55.134929" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount/test:cont
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:55.134666" 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-08-23T02:10:55.136006" level="INFO">mapping: {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:55.135721" elapsed="0.000330"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:10:55.136655" 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-08-23T02:10:55.136206" elapsed="0.000476"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:10:55.137354" level="INFO">${value} = netconf-test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:10:55.137052" elapsed="0.000332"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:10:55.138162" level="INFO">${encoded} = netconf-test-device</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-08-23T02:10:55.137906" elapsed="0.000282"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:10:55.138240" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:10:55.138392" level="INFO">${encoded_value} = netconf-test-device</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-08-23T02:10:55.137571" elapsed="0.000846"/>
</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-08-23T02:10:55.138568" elapsed="0.000243"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:10:55.136916" elapsed="0.001958"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:10:55.139430" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:10:55.139119" elapsed="0.000337"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:10:55.140209" level="INFO">${encoded} = /rests</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-08-23T02:10:55.139970" elapsed="0.000265"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:10:55.140286" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:10:55.140436" level="INFO">${encoded_value} = /rests</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-08-23T02:10:55.139637" elapsed="0.000824"/>
</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-08-23T02:10:55.140609" elapsed="0.000243"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-23T02:10:55.138989" elapsed="0.001906"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-23T02:10:55.136730" elapsed="0.004201"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-23T02:10:55.140973" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:10:55.141131" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-23T02:10:55.135353" elapsed="0.005804"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:55.135040" 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-08-23T02:10:55.141358" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:55.141214" elapsed="0.000199"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:55.135020" elapsed="0.006413"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:10:55.142183" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</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-08-23T02:10:55.141571" elapsed="0.000640"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T02:10:55.142259" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1/${file_name}.</doc>
<status status="PASS" start="2026-08-23T02:10:55.131513" elapsed="0.010869"/>
</kw>
<msg time="2026-08-23T02:10:55.142436" 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-08-23T02:10:55.118964" elapsed="0.023519"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:55.154786" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:55.166987" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:55.179217" elapsed="0.000036"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:55.179418" 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-08-23T02:10:55.179588" 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-08-23T02:10:55.179960" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:55.179804" elapsed="0.000213"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:55.179790" 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-08-23T02:10:55.180176" 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-08-23T02:10:55.180337" 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-08-23T02:10:55.180497" elapsed="0.000019"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T02:10:55.179763" elapsed="0.000786"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T02:10:55.179665" 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-08-23T02:10:55.180716" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:55.180791" elapsed="0.000015"/>
</return>
<msg time="2026-08-23T02:10:55.180923" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</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-08-23T02:10:55.114693" elapsed="0.066256"/>
</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-08-23T02:10:55.209157" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1.vanadium/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-08-23T02:10:55.208753" elapsed="0.000433"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T02:10:55.209936" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamod1.vanadium/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-08-23T02:10:55.209680" elapsed="0.000325">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamod1.vanadium/data.xml' does not exist.</status>
</kw>
<msg time="2026-08-23T02:10:55.210098" 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-08-23T02:10:55.209351" elapsed="0.000772"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:10:55.210663" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1/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-08-23T02:10:55.210283" elapsed="0.000407"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:10:55.210996" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamod1/data.xml"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamod1/data.xml&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:10:55.211248" level="INFO">${template} = &lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;
&lt;l&gt;Modified Content&lt;/l&gt;
&lt;/cont&gt;
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:10:55.210860" elapsed="0.000502"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:55.211769" level="INFO">&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;
&lt;l&gt;Modified Content&lt;/l&gt;
&lt;/cont&gt;
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:55.211521" 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-08-23T02:10:55.212203" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:55.211903" elapsed="0.000361"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:55.212727" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</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-08-23T02:10:55.212434" elapsed="0.000320"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:55.212291" elapsed="0.000498"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:55.211881" elapsed="0.000930"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:10:55.213409" level="INFO">${final_text} = &lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;
&lt;l&gt;Modified Content&lt;/l&gt;
&lt;/cont&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-08-23T02:10:55.212972" elapsed="0.000466"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T02:10:55.213488" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1/${file_name}.</doc>
<status status="PASS" start="2026-08-23T02:10:55.208123" elapsed="0.005490"/>
</kw>
<msg time="2026-08-23T02:10:55.213666" 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-08-23T02:10:55.195347" elapsed="0.018366"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:55.225946" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:55.238169" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:55.250688" 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-08-23T02:10:55.250895" 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-08-23T02:10:55.251067" 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-08-23T02:10:55.251443" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:55.251302" elapsed="0.000197"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:55.251287" 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-08-23T02:10:55.251658" 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-08-23T02:10:55.251820" 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-08-23T02:10:55.251999" elapsed="0.000019"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T02:10:55.251248" elapsed="0.000803"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T02:10:55.251145" elapsed="0.000966"/>
</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-08-23T02:10:55.252258" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:55.252333" elapsed="0.000015"/>
</return>
<msg time="2026-08-23T02:10:55.252451" level="INFO">${data} = &lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;
&lt;l&gt;Modified Content&lt;/l&gt;
&lt;/cont&gt;</msg>
<var>${data}</var>
<arg>folder=${folder}</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-08-23T02:10:55.192709" elapsed="0.059769"/>
</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-08-23T02:10:55.253767" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamod1/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-08-23T02:10:55.253532" elapsed="0.000298">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamod1/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-23T02:10:55.253939" 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-08-23T02:10:55.253144" elapsed="0.000819"/>
</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-08-23T02:10:55.254275" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:55.254033" elapsed="0.000299"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:55.254816" 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-08-23T02:10:55.254522" elapsed="0.000335"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:55.254356" elapsed="0.000538"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:55.254016" elapsed="0.000900"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:10:55.257245" 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-08-23T02:10:55.255064" elapsed="0.002207"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-23T02:10:55.257323" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:10:55.257480" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-23T02:10:55.252806" elapsed="0.004698"/>
</kw>
<kw name="Put_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:55.258882" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:55.258621" elapsed="0.000308"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:55.259346" level="INFO">&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;
&lt;l&gt;Modified Content&lt;/l&gt;
&lt;/cont&gt;</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:55.259080" elapsed="0.000313"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:55.259788" 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-08-23T02:10:55.259543" elapsed="0.000303"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:55.260237" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:55.259996" elapsed="0.000283"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-08-23T02:10:55.261090" 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-08-23T02:10:55.260892" elapsed="0.000224"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-08-23T02:10:55.261438" 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-08-23T02:10:55.261265" 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-08-23T02:10:55.261607" elapsed="0.000202"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:55.262224" 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-08-23T02:10:55.261978" elapsed="0.000290"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-08-23T02:10:55.262310" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:10:55.262463" 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-08-23T02:10:55.260477" 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="PUT On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:55.268730" level="INFO">PUT Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Content-Length': '81', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;
&lt;l&gt;Modified Content&lt;/l&gt;
&lt;/cont&gt; 
 </msg>
<msg time="2026-08-23T02:10:55.268782" level="INFO">PUT Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont 
 status=404, reason=Not Found 
 headers={'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:55.268902" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</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-08-23T02:10:55.264805" elapsed="0.004458">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:55.262556" elapsed="0.006792">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</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-08-23T02:10:55.269535" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:55.269385" elapsed="0.000218"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:55.262538" elapsed="0.007087">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</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-08-23T02:10:55.270008" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:55.270136" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:55.270101" elapsed="0.000077"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:55.270084" elapsed="0.000115"/>
</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-08-23T02:10:55.270337" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:55.270403" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>content_type=${content_type}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</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-08-23T02:10:55.257829" elapsed="0.012676">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:55.270577" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>extension=xml</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>content_type=${HEADERS_XML}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>endline=${\n}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve URI and data from folder, call Put_To_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:55.103528" elapsed="0.167141">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=response</arg>
<arg>mapping=${mapping}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:55.270963" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:55.270772" elapsed="0.000258"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:55.270756" elapsed="0.000298"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:55.271086" elapsed="0.000014"/>
</return>
<arg>${directory_with_template_folders}${/}datamod1</arg>
<arg>${mapping}</arg>
<doc>Add arguments sensible for XML data, return Put_Templated response text.
Optionally, verification against response.xml (no iteration) is called.</doc>
<status status="FAIL" start="2026-08-23T02:10:55.099190" elapsed="0.171988">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</status>
</kw>
<doc>Send a request to change the sample test data label and check that the request went OK.</doc>
<status status="FAIL" start="2026-08-23T02:10:55.017157" elapsed="0.254199">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</status>
</test>
<test id="s1-s4-s2-t10" name="Check_Device_Data_Label_Is_Modified" line="91">
<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-08-23T02:10:55.275636" elapsed="0.000316"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:10:55.275262" elapsed="0.000766"/>
</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-08-23T02:10:55.277439" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:55.277287" elapsed="0.000217"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:55.277261" elapsed="0.000275"/>
</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-08-23T02:10:55.283329" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:55.283212" elapsed="0.000162"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:55.283193" elapsed="0.000203"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:10:55.284379" 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-08-23T02:10:55.284003" elapsed="0.000402"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:10:55.284872" 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-08-23T02:10:55.284561" elapsed="0.000338"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:10:55.284944" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:10:55.285098" 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-08-23T02:10:55.283615" elapsed="0.001507"/>
</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-08-23T02:10:55.290712" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:55.290605" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:55.290586" 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-08-23T02:10:55.292062" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:55.291955" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:55.291936" elapsed="0.000194"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:10:55.292671" level="INFO">${karaf_connection_index} = 11</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-08-23T02:10:55.292272" elapsed="0.000425"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:10:55.293136" level="INFO">${current_connection_index} = 13</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-08-23T02:10:55.292869" elapsed="0.000293"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:10:55.322959" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:10:55.293716" elapsed="0.029426"/>
</kw>
<msg time="2026-08-23T02:10:55.323380" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:10:55.323427" 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 "n "e "t "c "o "n "f "...</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-08-23T02:10:55.293318" elapsed="0.030146"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:10:55.343284" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "L "a "b "e "l "_ "I "s "_ "M "o "d "i "f "i "e "d "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-08-23T02:10:55.324058" elapsed="0.019443"/>
</kw>
<msg time="2026-08-23T02:10:55.343686" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:10:55.343731" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "L ...</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-08-23T02:10:55.323632" elapsed="0.020135"/>
</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-08-23T02:10:55.344086" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:55.343864" elapsed="0.000303"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:55.343823" elapsed="0.000369"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:55.344724" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "L "a "b "e "l "_ "I "s "_ "M "o "d "i "f "i "e "d "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:55.344332" elapsed="0.000462"/>
</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-08-23T02:10:55.345090" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:55.344877" elapsed="0.000293"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:55.344858" elapsed="0.000336"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:10:55.345228" 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-08-23T02:10:55.348615" elapsed="0.000146"/>
</kw>
<msg time="2026-08-23T02:10:55.348859" 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-08-23T02:10:55.347921" elapsed="0.001046"/>
</kw>
<kw name="Open 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-08-23T02:10:55.350110" elapsed="0.000040"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:55.351253" elapsed="0.000042"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:10:55.346134" elapsed="0.005269"/>
</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-08-23T02:10:55.345482" elapsed="0.006054"/>
</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-08-23T02:10:55.291630" elapsed="0.060006"/>
</kw>
<msg time="2026-08-23T02:10:55.351727" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:10:55.351770" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "L ...</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-08-23T02:10:55.290947" elapsed="0.060860"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:10:55.352325" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:10:55.352216" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:55.352196" 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-08-23T02:10:55.352798" 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-08-23T02:10:55.353147" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:10:55.353219" 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-08-23T02:10:55.290268" elapsed="0.063059"/>
</kw>
<msg time="2026-08-23T02:10:55.353419" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:10:55.353462" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "L ...</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-08-23T02:10:55.285486" elapsed="0.068013"/>
</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-08-23T02:10:55.353817" elapsed="0.000092"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:55.353572" elapsed="0.000373"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:55.353555" elapsed="0.000414"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:10:55.285343" elapsed="0.068649"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:10:55.285174" elapsed="0.068847"/>
</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-08-23T02:10:55.282854" elapsed="0.071219"/>
</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-08-23T02:10:55.276816" elapsed="0.077311"/>
</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-08-23T02:10:55.276234" elapsed="0.077938"/>
</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-08-23T02:10:55.272285" elapsed="0.081939"/>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:55.355485" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:55.355090" elapsed="0.000422"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:55.362865" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:55.362602" elapsed="0.000310"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:55.363306" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:55.363063" elapsed="0.000297"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:55.369593" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:55.369675" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:55.369765" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:10:55.365474" elapsed="0.004635">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:55.363426" elapsed="0.006763">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:55.370371" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:55.370222" elapsed="0.000214"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:55.363408" elapsed="0.007051">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:55.370808" elapsed="0.000041"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:55.370958" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:55.370921" elapsed="0.000078"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:55.370904" elapsed="0.000116"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:55.371159" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:55.371229" elapsed="0.000014"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:10:55.358288" elapsed="0.013057">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:55.371414" elapsed="0.000017"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:55.355719" elapsed="0.015794">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:10:55.371565" elapsed="0.000015"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:10:55.354812" elapsed="0.016843">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:55.371886" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:55.371724" elapsed="0.000219"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:55.372105" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:55.371966" elapsed="0.000192"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:55.372312" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:55.372181" elapsed="0.000190"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:55.371708" elapsed="0.000683"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:10:55.354428" elapsed="0.018039">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<doc>Get the device data label and make sure it contains the modified content.</doc>
<status status="FAIL" start="2026-08-23T02:10:55.271699" elapsed="0.100897">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</test>
<test id="s1-s4-s2-t11" name="Deconfigure_Device_From_Netconf_Temporarily" line="96">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-08-23T02:10:55.376241" elapsed="0.000209"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:10:55.375970" elapsed="0.000535"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:10:55.377525" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:55.377410" elapsed="0.000161"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:55.377391" elapsed="0.000202"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:10:55.383666" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:55.383517" elapsed="0.000213"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:55.383491" elapsed="0.000270"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:10:55.385155" 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-08-23T02:10:55.384607" elapsed="0.000585"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:10:55.385825" 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-08-23T02:10:55.385417" elapsed="0.000465"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:10:55.385946" elapsed="0.000041"/>
</return>
<msg time="2026-08-23T02:10:55.386162" 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-08-23T02:10:55.384089" elapsed="0.002107"/>
</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-08-23T02:10:55.392338" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:55.392227" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:55.392208" 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-08-23T02:10:55.393626" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:55.393518" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:55.393499" elapsed="0.000195"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:10:55.394244" level="INFO">${karaf_connection_index} = 11</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-08-23T02:10:55.393854" elapsed="0.000417"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:10:55.394688" level="INFO">${current_connection_index} = 13</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-08-23T02:10:55.394428" elapsed="0.000286"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:10:55.425707" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:10:55.395287" elapsed="0.030633"/>
</kw>
<msg time="2026-08-23T02:10:55.426116" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:10:55.426162" 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 "n "e "t "c "o "n "f "...</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-08-23T02:10:55.394889" elapsed="0.031311"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:10:55.448736" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "D "e "c "o "n "f "i "g "u "r "e "_ "D "e "v "i "c "e "_ "F "r "o "m "_ "N "e "t "c "o "n "f "_ "T "e "m "p "o "r "a "r "i "l "y "[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-08-23T02:10:55.426795" elapsed="0.022164"/>
</kw>
<msg time="2026-08-23T02:10:55.449145" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:10:55.449191" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "D "e "c "o "n "f "i "g "u "r "e "_ "D "e "v "i "c "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-08-23T02:10:55.426379" elapsed="0.022848"/>
</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-08-23T02:10:55.449537" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:55.449309" elapsed="0.000307"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:55.449288" elapsed="0.000353"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:55.450203" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "D "e "c "o "n "f "i "g "u "r "e "_ "D "e "v "i "c "e "_ "F "r "o "m "_ "N "e "t "c "o "n "f "_ "T "e "m "p "o "r "a "r "i "l "y "[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-08-23T02:10:55.449786" elapsed="0.000493"/>
</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-08-23T02:10:55.450557" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:55.450346" elapsed="0.000289"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:55.450327" elapsed="0.000373"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:10:55.450737" elapsed="0.000033"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-23T02:10:55.454173" elapsed="0.000150"/>
</kw>
<msg time="2026-08-23T02:10:55.454398" 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-08-23T02:10:55.453434" elapsed="0.001069"/>
</kw>
<kw name="Open 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-08-23T02:10:55.455625" elapsed="0.000039"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:55.456784" elapsed="0.000039"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:10:55.451659" elapsed="0.005292"/>
</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-08-23T02:10:55.451034" elapsed="0.006048"/>
</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-08-23T02:10:55.393215" elapsed="0.063968"/>
</kw>
<msg time="2026-08-23T02:10:55.457277" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:10:55.457321" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "D "e "c "o "n "f "i "g "u "r "e "_ "D "e "v "i "c "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-08-23T02:10:55.392561" elapsed="0.064798"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:10:55.457723" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-08-23T02:10:55.457436" elapsed="0.000349"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:55.457417" elapsed="0.000392"/>
</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-08-23T02:10:55.458528" 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-08-23T02:10:55.458882" elapsed="0.000026"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:10:55.458956" 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-08-23T02:10:55.391887" elapsed="0.067178"/>
</kw>
<msg time="2026-08-23T02:10:55.459158" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:10:55.459201" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "D "e "c "o "n "f "i "g "u "r "e "_ "D "e "v "i "c "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-08-23T02:10:55.386690" elapsed="0.072547"/>
</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-08-23T02:10:55.459583" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:55.459312" elapsed="0.000325"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:55.459294" elapsed="0.000367"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:10:55.386498" elapsed="0.073185"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:10:55.386268" elapsed="0.073445"/>
</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-08-23T02:10:55.382992" elapsed="0.076774"/>
</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-08-23T02:10:55.377125" elapsed="0.082695"/>
</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-08-23T02:10:55.376688" elapsed="0.083206"/>
</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-08-23T02:10:55.373778" elapsed="0.086168"/>
</kw>
<kw name="Remove_Device_From_Netconf" owner="NetconfKeywords">
<kw name="Pop From Dictionary" owner="Collections">
<msg time="2026-08-23T02:10:55.460785" level="FAIL">Dictionary does not contain key 'netconf-test-device'.</msg>
<var>${device_type}</var>
<arg>${NetconfKeywords__mounted_device_types}</arg>
<arg>${device_name}</arg>
<doc>Pops the given ``key`` from the ``dictionary`` and returns its value.</doc>
<status status="FAIL" start="2026-08-23T02:10:55.460526" elapsed="0.000349">Dictionary does not contain key 'netconf-test-device'.</status>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<var>${mapping}</var>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:55.461053" elapsed="0.000021"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:55.469479" elapsed="0.000028"/>
</kw>
<kw name="Delete_Templated" owner="TemplatedRequests">
<arg>${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>${mapping}</arg>
<arg>session=${session}</arg>
<arg>location=${location}</arg>
<doc>Resolve URI from folder, issue DELETE request.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:55.469728" elapsed="0.000024"/>
</kw>
<arg>${device_name}</arg>
<doc>Tell Netconf to deconfigure the specified device</doc>
<status status="FAIL" start="2026-08-23T02:10:55.460165" elapsed="0.009744">Dictionary does not contain key 'netconf-test-device'.</status>
</kw>
<doc>Make request to deconfigure the testtool device on Netconf connector.
This is the first part of the "configure/deconfigure" cycle of the device
The purpose of cycling the device like this is to see that the configuration
data was really stored in the device.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-08-23T02:10:55.372902" elapsed="0.097146">Dictionary does not contain key 'netconf-test-device'.</status>
</test>
<test id="s1-s4-s2-t12" name="Wait_For_Device_To_Be_Gone" 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-08-23T02:10:55.473199" elapsed="0.000211"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:10:55.472938" elapsed="0.000527"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:10:55.474455" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:55.474340" elapsed="0.000161"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:55.474322" elapsed="0.000201"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:10:55.479590" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:55.479485" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:55.479467" elapsed="0.000191"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:10:55.480643" 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-08-23T02:10:55.480263" elapsed="0.000407"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:10:55.481141" 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-08-23T02:10:55.480827" elapsed="0.000340"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:10:55.481212" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:10:55.481365" 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-08-23T02:10:55.479891" elapsed="0.001498"/>
</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-08-23T02:10:55.486774" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:55.486666" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:55.486647" elapsed="0.000209"/>
</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-08-23T02:10:55.488092" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:55.487984" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:55.487966" elapsed="0.000193"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:10:55.488685" level="INFO">${karaf_connection_index} = 11</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-08-23T02:10:55.488300" elapsed="0.000412"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:10:55.489146" level="INFO">${current_connection_index} = 13</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-08-23T02:10:55.488885" elapsed="0.000287"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:10:55.518171" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:10:55.489724" elapsed="0.028637"/>
</kw>
<msg time="2026-08-23T02:10:55.518543" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:10:55.518589" 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 "n "e "t "c "o "n "f "...</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-08-23T02:10:55.489329" elapsed="0.029297"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:10:55.536487" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "W "a "i "t "_ "F "o "r "_ "D "e "v "i "c "e "_ "T "o "_ "B "e "_ "G "o "n "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-08-23T02:10:55.519217" elapsed="0.017466"/>
</kw>
<msg time="2026-08-23T02:10:55.536889" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:10:55.536937" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "W "a "i "t "_ "F "o "r "_ "D "e "v "i "c "e "_ "T "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-08-23T02:10:55.518793" elapsed="0.018181"/>
</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-08-23T02:10:55.537270" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:55.537050" elapsed="0.000335"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:55.537031" elapsed="0.000381"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:55.537970" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "W "a "i "t "_ "F "o "r "_ "D "e "v "i "c "e "_ "T "o "_ "B "e "_ "G "o "n "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-08-23T02:10:55.537553" elapsed="0.000485"/>
</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-08-23T02:10:55.538319" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:55.538104" elapsed="0.000294"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:55.538087" elapsed="0.000336"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:10:55.538457" 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-08-23T02:10:55.541722" elapsed="0.000175"/>
</kw>
<msg time="2026-08-23T02:10:55.541972" 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-08-23T02:10:55.541095" elapsed="0.000983"/>
</kw>
<kw name="Open 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-08-23T02:10:55.543236" elapsed="0.000041"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:55.544604" elapsed="0.000039"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:10:55.539323" elapsed="0.005403"/>
</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-08-23T02:10:55.538710" elapsed="0.006159"/>
</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-08-23T02:10:55.487658" elapsed="0.057311"/>
</kw>
<msg time="2026-08-23T02:10:55.545060" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:10:55.545103" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "W "a "i "t "_ "F "o "r "_ "D "e "v "i "c "e "_ "T "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-08-23T02:10:55.487007" elapsed="0.058133"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:10:55.545484" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-23T02:10:55.545215" elapsed="0.000330"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:55.545197" elapsed="0.000373"/>
</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-08-23T02:10:55.546066" 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-08-23T02:10:55.546398" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:10:55.546469" 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-08-23T02:10:55.486330" elapsed="0.060246"/>
</kw>
<msg time="2026-08-23T02:10:55.546666" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:10:55.546709" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "W "a "i "t "_ "F "o "r "_ "D "e "v "i "c "e "_ "T "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-08-23T02:10:55.481752" elapsed="0.064993"/>
</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-08-23T02:10:55.547085" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:55.546817" elapsed="0.000323"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:55.546800" elapsed="0.000365"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:10:55.481612" elapsed="0.065576"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:10:55.481442" elapsed="0.065774"/>
</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-08-23T02:10:55.479118" elapsed="0.068149"/>
</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-08-23T02:10:55.474051" elapsed="0.073270"/>
</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-08-23T02:10:55.473611" elapsed="0.073752"/>
</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-08-23T02:10:55.470802" elapsed="0.076645"/>
</kw>
<kw name="Wait_Device_Fully_Removed" owner="NetconfKeywords">
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Completely_Gone" owner="NetconfKeywords">
<kw name="Check_Device_Has_No_Netconf_Connector" owner="NetconfKeywords">
<kw name="Count_Netconf_Connectors_For_Device" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:55.560165" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:55.557984" elapsed="0.002207"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:55.560508" elapsed="0.000021"/>
</kw>
<var name="${nv}"/>
<status status="NOT RUN" start="2026-08-23T02:10:55.560358" elapsed="0.000207"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="NOT RUN" start="2026-08-23T02:10:55.560244" elapsed="0.000347"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:55.560904" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:55.560653" elapsed="0.000309"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:55.561680" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:55.561213" elapsed="0.000494"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:55.560986" elapsed="0.000756"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:55.561943" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:55.561768" elapsed="0.000232"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:55.560636" elapsed="0.001385"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:55.562055" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:10:55.562201" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:10:55.557522" elapsed="0.004704"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:55.562272" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:10:55.562413" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:10:55.557047" elapsed="0.005390"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:55.569595" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:55.569345" elapsed="0.000296"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:55.570052" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:55.569790" elapsed="0.000305"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:55.576721" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:55.576778" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '407'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:10:55.576904" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:10:55.572216" elapsed="0.005041">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:55.570161" elapsed="0.007175">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:55.577516" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:55.577369" elapsed="0.000210"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:55.570143" elapsed="0.007459">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:55.577988" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:55.578152" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:55.578083" elapsed="0.000113"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:55.578066" elapsed="0.000152"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:55.578358" elapsed="0.000024"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:55.578433" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:10:55.565072" elapsed="0.013466">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:55.578608" elapsed="0.000015"/>
</return>
<var>${mounts}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:55.562649" elapsed="0.016054">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${mounts}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:55.578889" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${actual_count}</var>
<arg>len('''${mounts}'''.split('"node-id": "${device_name}"'))-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:55.579056" elapsed="0.000021"/>
</kw>
<return>
<value>${actual_count}</value>
<status status="NOT RUN" start="2026-08-23T02:10:55.579120" elapsed="0.000015"/>
</return>
<var>${count}</var>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Count all instances of the specified device in the Netconf topology (usually 0 or 1).</doc>
<status status="FAIL" start="2026-08-23T02:10:55.549716" elapsed="0.029502">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${count}</arg>
<arg>0</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:55.579380" elapsed="0.000023"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Check that there are no instances of the specified device in the Netconf topology.</doc>
<status status="FAIL" start="2026-08-23T02:10:55.549269" elapsed="0.030250">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Generate URI" owner="Restconf">
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>config</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="NOT RUN" start="2026-08-23T02:10:55.589146" elapsed="0.000028"/>
</kw>
<kw name="No Content From URI" owner="Utils">
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Issue a Get On Session and return on error 404 (No content) or will fail and log the content.
Issues a Get On Session for ${uri} in default using headers from
{'Content-Type': 'application/json'}. If the request returns a HTTP error, fails. Otherwise
returns the data obtained by the request.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:55.592660" elapsed="0.000028"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device has no Netconf connectors nor associated data.</doc>
<status status="FAIL" start="2026-08-23T02:10:55.548750" elapsed="0.044038">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Check_Device_Completely_Gone" owner="NetconfKeywords">
<kw name="Check_Device_Has_No_Netconf_Connector" owner="NetconfKeywords">
<kw name="Count_Netconf_Connectors_For_Device" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:56.611605" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:56.609419" elapsed="0.002222"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:56.612054" elapsed="0.000024"/>
</kw>
<var name="${nv}"/>
<status status="NOT RUN" start="2026-08-23T02:10:56.611878" elapsed="0.000239"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="NOT RUN" start="2026-08-23T02:10:56.611720" elapsed="0.000431"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:56.612499" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:56.612230" elapsed="0.000327"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:56.613318" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:56.612822" elapsed="0.000523"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:56.612582" elapsed="0.000799"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:56.613567" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:56.613405" elapsed="0.000217"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:56.612209" elapsed="0.001434"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:56.613684" elapsed="0.000046"/>
</return>
<msg time="2026-08-23T02:10:56.613897" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:10:56.608924" elapsed="0.005003"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:56.614069" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:10:56.614218" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:10:56.608393" elapsed="0.005850"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:56.621789" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:56.621526" elapsed="0.000325"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:56.622249" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:56.622003" elapsed="0.000290"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:56.629004" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:56.629083" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '407'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:10:56.629242" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:10:56.624411" elapsed="0.005463">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:56.622361" elapsed="0.007632">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:56.630250" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:56.630041" elapsed="0.000300"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:56.622342" elapsed="0.008032">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:56.630926" elapsed="0.000037"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:56.631111" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:56.631059" elapsed="0.000109"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:56.631036" elapsed="0.000162"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:56.631391" elapsed="0.000030"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:56.631487" elapsed="0.000021"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:10:56.616877" elapsed="0.014760">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:56.631734" elapsed="0.000021"/>
</return>
<var>${mounts}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:56.614464" elapsed="0.017433">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${mounts}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:56.632147" elapsed="0.000029"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${actual_count}</var>
<arg>len('''${mounts}'''.split('"node-id": "${device_name}"'))-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:56.632377" elapsed="0.000027"/>
</kw>
<return>
<value>${actual_count}</value>
<status status="NOT RUN" start="2026-08-23T02:10:56.632462" elapsed="0.000020"/>
</return>
<var>${count}</var>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Count all instances of the specified device in the Netconf topology (usually 0 or 1).</doc>
<status status="FAIL" start="2026-08-23T02:10:56.596192" elapsed="0.036406">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${count}</arg>
<arg>0</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:56.632826" elapsed="0.000049"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Check that there are no instances of the specified device in the Netconf topology.</doc>
<status status="FAIL" start="2026-08-23T02:10:56.595084" elapsed="0.037964">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Generate URI" owner="Restconf">
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>config</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="NOT RUN" start="2026-08-23T02:10:56.642304" elapsed="0.000027"/>
</kw>
<kw name="No Content From URI" owner="Utils">
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Issue a Get On Session and return on error 404 (No content) or will fail and log the content.
Issues a Get On Session for ${uri} in default using headers from
{'Content-Type': 'application/json'}. If the request returns a HTTP error, fails. Otherwise
returns the data obtained by the request.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:56.645915" elapsed="0.000027"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device has no Netconf connectors nor associated data.</doc>
<status status="FAIL" start="2026-08-23T02:10:56.593654" elapsed="0.052394">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Check_Device_Completely_Gone" owner="NetconfKeywords">
<kw name="Check_Device_Has_No_Netconf_Connector" owner="NetconfKeywords">
<kw name="Count_Netconf_Connectors_For_Device" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:57.667991" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:57.665873" elapsed="0.002150"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:57.668379" elapsed="0.000022"/>
</kw>
<var name="${nv}"/>
<status status="NOT RUN" start="2026-08-23T02:10:57.668224" elapsed="0.000216"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="NOT RUN" start="2026-08-23T02:10:57.668095" elapsed="0.000377"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:57.668829" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:57.668563" elapsed="0.000340"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:57.669631" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:57.669157" elapsed="0.000501"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:57.668928" elapsed="0.000767"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:57.669895" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:57.669719" elapsed="0.000234"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:57.668543" elapsed="0.001430"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:57.670013" elapsed="0.000035"/>
</return>
<msg time="2026-08-23T02:10:57.670172" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:10:57.665379" elapsed="0.004819"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:57.670245" elapsed="0.000025"/>
</return>
<msg time="2026-08-23T02:10:57.670385" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:10:57.664883" elapsed="0.005527"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:57.677556" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:57.677300" elapsed="0.000303"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:57.678015" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:57.677753" elapsed="0.000305"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:57.684663" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:57.684719" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '407'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:10:57.684862" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:10:57.680196" elapsed="0.005056">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:57.678124" elapsed="0.007265">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:57.685648" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:57.685433" elapsed="0.000306"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:57.678106" elapsed="0.007666">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:57.686309" elapsed="0.000035"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:57.686499" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:57.686445" elapsed="0.000113"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:57.686418" elapsed="0.000169"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:57.686780" elapsed="0.000030"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:57.686911" elapsed="0.000023"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:10:57.673025" elapsed="0.014038">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:57.687164" elapsed="0.000021"/>
</return>
<var>${mounts}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:57.670622" elapsed="0.016677">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${mounts}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:57.687532" elapsed="0.000029"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${actual_count}</var>
<arg>len('''${mounts}'''.split('"node-id": "${device_name}"'))-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:57.687763" elapsed="0.000029"/>
</kw>
<return>
<value>${actual_count}</value>
<status status="NOT RUN" start="2026-08-23T02:10:57.687881" elapsed="0.000024"/>
</return>
<var>${count}</var>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Count all instances of the specified device in the Netconf topology (usually 0 or 1).</doc>
<status status="FAIL" start="2026-08-23T02:10:57.649335" elapsed="0.038688">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${count}</arg>
<arg>0</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:57.688248" elapsed="0.000029"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Check that there are no instances of the specified device in the Netconf topology.</doc>
<status status="FAIL" start="2026-08-23T02:10:57.648229" elapsed="0.040170">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Generate URI" owner="Restconf">
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>config</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="NOT RUN" start="2026-08-23T02:10:57.697335" elapsed="0.000029"/>
</kw>
<kw name="No Content From URI" owner="Utils">
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Issue a Get On Session and return on error 404 (No content) or will fail and log the content.
Issues a Get On Session for ${uri} in default using headers from
{'Content-Type': 'application/json'}. If the request returns a HTTP error, fails. Otherwise
returns the data obtained by the request.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:57.700884" elapsed="0.000027"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device has no Netconf connectors nor associated data.</doc>
<status status="FAIL" start="2026-08-23T02:10:57.646909" elapsed="0.054101">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Check_Device_Completely_Gone" owner="NetconfKeywords">
<kw name="Check_Device_Has_No_Netconf_Connector" owner="NetconfKeywords">
<kw name="Count_Netconf_Connectors_For_Device" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:58.717936" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:58.715778" elapsed="0.002189"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:58.718305" elapsed="0.000022"/>
</kw>
<var name="${nv}"/>
<status status="NOT RUN" start="2026-08-23T02:10:58.718154" elapsed="0.000209"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="NOT RUN" start="2026-08-23T02:10:58.718028" elapsed="0.000363"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:58.718718" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:58.718463" elapsed="0.000400"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:58.719603" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:58.719124" elapsed="0.000507"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:58.718890" elapsed="0.000777"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:58.719868" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:58.719692" elapsed="0.000234"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:58.718443" elapsed="0.001504"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:58.719985" elapsed="0.000033"/>
</return>
<msg time="2026-08-23T02:10:58.720142" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:10:58.715190" elapsed="0.004978"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:58.720214" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:10:58.720355" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:10:58.714653" elapsed="0.005727"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:58.727771" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:58.727511" elapsed="0.000306"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:58.728232" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:58.727987" elapsed="0.000290"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:58.734867" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:58.734928" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '407'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:10:58.735042" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:10:58.730647" elapsed="0.004779">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:58.728343" elapsed="0.007168">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:58.735706" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:58.735549" elapsed="0.000223"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:58.728324" elapsed="0.007472">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:58.736199" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:58.736332" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:58.736294" elapsed="0.000080"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:58.736277" elapsed="0.000118"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:58.736539" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:58.736607" elapsed="0.000014"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:10:58.723028" elapsed="0.013685">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:58.736824" elapsed="0.000040"/>
</return>
<var>${mounts}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:58.720599" elapsed="0.016353">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${mounts}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:58.737147" elapsed="0.000023"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${actual_count}</var>
<arg>len('''${mounts}'''.split('"node-id": "${device_name}"'))-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:58.737316" elapsed="0.000021"/>
</kw>
<return>
<value>${actual_count}</value>
<status status="NOT RUN" start="2026-08-23T02:10:58.737379" elapsed="0.000015"/>
</return>
<var>${count}</var>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Count all instances of the specified device in the Netconf topology (usually 0 or 1).</doc>
<status status="FAIL" start="2026-08-23T02:10:58.704137" elapsed="0.033340">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${count}</arg>
<arg>0</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:58.737636" elapsed="0.000022"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Check that there are no instances of the specified device in the Netconf topology.</doc>
<status status="FAIL" start="2026-08-23T02:10:58.703107" elapsed="0.034646">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Generate URI" owner="Restconf">
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>config</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="NOT RUN" start="2026-08-23T02:10:58.747227" elapsed="0.000027"/>
</kw>
<kw name="No Content From URI" owner="Utils">
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Issue a Get On Session and return on error 404 (No content) or will fail and log the content.
Issues a Get On Session for ${uri} in default using headers from
{'Content-Type': 'application/json'}. If the request returns a HTTP error, fails. Otherwise
returns the data obtained by the request.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:58.750747" elapsed="0.000026"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device has no Netconf connectors nor associated data.</doc>
<status status="FAIL" start="2026-08-23T02:10:58.701815" elapsed="0.049070">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Check_Device_Completely_Gone" owner="NetconfKeywords">
<kw name="Check_Device_Has_No_Netconf_Connector" owner="NetconfKeywords">
<kw name="Count_Netconf_Connectors_For_Device" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:59.771960" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:59.769778" elapsed="0.002216"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:59.772358" elapsed="0.000023"/>
</kw>
<var name="${nv}"/>
<status status="NOT RUN" start="2026-08-23T02:10:59.772206" elapsed="0.000211"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="NOT RUN" start="2026-08-23T02:10:59.772069" elapsed="0.000379"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:59.772793" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:59.772524" elapsed="0.000341"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:10:59.773600" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:10:59.773124" elapsed="0.000526"/>
</kw>
<status status="PASS" start="2026-08-23T02:10:59.772891" elapsed="0.000796"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:59.773893" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:59.773716" elapsed="0.000235"/>
</branch>
<status status="PASS" start="2026-08-23T02:10:59.772504" elapsed="0.001468"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:59.774014" elapsed="0.000044"/>
</return>
<msg time="2026-08-23T02:10:59.774187" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:10:59.769280" elapsed="0.004933"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:10:59.774260" elapsed="0.000025"/>
</return>
<msg time="2026-08-23T02:10:59.774400" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:10:59.768741" elapsed="0.005685"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:59.781644" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:59.781364" elapsed="0.000329"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:10:59.782115" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:10:59.781859" elapsed="0.000300"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:10:59.788879" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:10:59.788940" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '407'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:10:59.789068" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:10:59.784363" elapsed="0.005135">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:10:59.782234" elapsed="0.007373">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:59.789910" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:10:59.789687" elapsed="0.000313"/>
</branch>
<status status="FAIL" start="2026-08-23T02:10:59.782206" elapsed="0.007827">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:59.790457" elapsed="0.000028"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:59.790663" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:10:59.790599" elapsed="0.000135"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:10:59.790569" elapsed="0.000197"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:59.790997" elapsed="0.000031"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:10:59.791097" elapsed="0.000021"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:10:59.777098" elapsed="0.014168">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:10:59.791368" elapsed="0.000022"/>
</return>
<var>${mounts}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:10:59.774645" elapsed="0.016859">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${mounts}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:59.791740" elapsed="0.000030"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${actual_count}</var>
<arg>len('''${mounts}'''.split('"node-id": "${device_name}"'))-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:59.792002" elapsed="0.000030"/>
</kw>
<return>
<value>${actual_count}</value>
<status status="NOT RUN" start="2026-08-23T02:10:59.792093" elapsed="0.000021"/>
</return>
<var>${count}</var>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Count all instances of the specified device in the Netconf topology (usually 0 or 1).</doc>
<status status="FAIL" start="2026-08-23T02:10:59.754270" elapsed="0.037962">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${count}</arg>
<arg>0</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:59.792455" elapsed="0.000029"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Check that there are no instances of the specified device in the Netconf topology.</doc>
<status status="FAIL" start="2026-08-23T02:10:59.753153" elapsed="0.039452">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Generate URI" owner="Restconf">
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>config</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="NOT RUN" start="2026-08-23T02:10:59.801829" elapsed="0.000043"/>
</kw>
<kw name="No Content From URI" owner="Utils">
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Issue a Get On Session and return on error 404 (No content) or will fail and log the content.
Issues a Get On Session for ${uri} in default using headers from
{'Content-Type': 'application/json'}. If the request returns a HTTP error, fails. Otherwise
returns the data obtained by the request.</doc>
<status status="NOT RUN" start="2026-08-23T02:10:59.805338" elapsed="0.000026"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device has no Netconf connectors nor associated data.</doc>
<status status="FAIL" start="2026-08-23T02:10:59.751743" elapsed="0.053721">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Check_Device_Completely_Gone" owner="NetconfKeywords">
<kw name="Check_Device_Has_No_Netconf_Connector" owner="NetconfKeywords">
<kw name="Count_Netconf_Connectors_For_Device" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:00.823344" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:00.821146" elapsed="0.002233"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:00.823750" elapsed="0.000021"/>
</kw>
<var name="${nv}"/>
<status status="NOT RUN" start="2026-08-23T02:11:00.823593" elapsed="0.000216"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="NOT RUN" start="2026-08-23T02:11:00.823454" elapsed="0.000402"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:00.824206" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:00.823938" elapsed="0.000325"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:00.825008" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:00.824518" elapsed="0.000518"/>
</kw>
<status status="PASS" start="2026-08-23T02:11:00.824289" elapsed="0.000782"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:00.825259" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:00.825096" elapsed="0.000218"/>
</branch>
<status status="PASS" start="2026-08-23T02:11:00.823916" elapsed="0.001419"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:11:00.825377" elapsed="0.000041"/>
</return>
<msg time="2026-08-23T02:11:00.825677" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:11:00.820647" elapsed="0.005057"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:11:00.825753" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:11:00.825915" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:11:00.820137" elapsed="0.005804"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:00.833391" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:00.833125" elapsed="0.000314"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:00.833872" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:00.833591" elapsed="0.000326"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:11:00.840217" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:00.840275" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '407'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:11:00.840395" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:11:00.836072" elapsed="0.004726">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:11:00.833985" elapsed="0.006920">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:00.841094" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:00.840940" elapsed="0.000219"/>
</branch>
<status status="FAIL" start="2026-08-23T02:11:00.833966" elapsed="0.007216">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:00.841561" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:00.841757" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:00.841718" elapsed="0.000081"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:00.841700" elapsed="0.000120"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:00.841986" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:11:00.842057" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:11:00.828648" elapsed="0.013538">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:00.842260" elapsed="0.000017"/>
</return>
<var>${mounts}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:11:00.826171" elapsed="0.016189">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${mounts}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:00.842527" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${actual_count}</var>
<arg>len('''${mounts}'''.split('"node-id": "${device_name}"'))-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:00.842695" elapsed="0.000021"/>
</kw>
<return>
<value>${actual_count}</value>
<status status="NOT RUN" start="2026-08-23T02:11:00.842758" elapsed="0.000015"/>
</return>
<var>${count}</var>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Count all instances of the specified device in the Netconf topology (usually 0 or 1).</doc>
<status status="FAIL" start="2026-08-23T02:11:00.809889" elapsed="0.032988">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${count}</arg>
<arg>0</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:00.843041" elapsed="0.000022"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Check that there are no instances of the specified device in the Netconf topology.</doc>
<status status="FAIL" start="2026-08-23T02:11:00.808461" elapsed="0.034691">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Generate URI" owner="Restconf">
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>config</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="NOT RUN" start="2026-08-23T02:11:00.852035" elapsed="0.000042"/>
</kw>
<kw name="No Content From URI" owner="Utils">
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Issue a Get On Session and return on error 404 (No content) or will fail and log the content.
Issues a Get On Session for ${uri} in default using headers from
{'Content-Type': 'application/json'}. If the request returns a HTTP error, fails. Otherwise
returns the data obtained by the request.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:00.856248" elapsed="0.000027"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device has no Netconf connectors nor associated data.</doc>
<status status="FAIL" start="2026-08-23T02:11:00.806707" elapsed="0.049671">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Check_Device_Completely_Gone" owner="NetconfKeywords">
<kw name="Check_Device_Has_No_Netconf_Connector" owner="NetconfKeywords">
<kw name="Count_Netconf_Connectors_For_Device" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:01.877243" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:01.875093" elapsed="0.002183"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:01.877629" elapsed="0.000021"/>
</kw>
<var name="${nv}"/>
<status status="NOT RUN" start="2026-08-23T02:11:01.877476" elapsed="0.000211"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="NOT RUN" start="2026-08-23T02:11:01.877345" elapsed="0.000372"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:01.878076" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:01.877789" elapsed="0.000344"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:01.878896" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:01.878384" elapsed="0.000539"/>
</kw>
<status status="PASS" start="2026-08-23T02:11:01.878158" elapsed="0.000800"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:01.879142" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:01.878983" elapsed="0.000214"/>
</branch>
<status status="PASS" start="2026-08-23T02:11:01.877770" elapsed="0.001447"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:11:01.879259" elapsed="0.000040"/>
</return>
<msg time="2026-08-23T02:11:01.879423" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:11:01.874589" elapsed="0.004860"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:11:01.879568" elapsed="0.000032"/>
</return>
<msg time="2026-08-23T02:11:01.879724" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:11:01.874089" elapsed="0.005661"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:01.886966" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:01.886647" elapsed="0.000367"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:01.887425" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:01.887167" elapsed="0.000303"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:11:01.893712" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:01.893769" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '407'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:11:01.893907" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:11:01.889713" elapsed="0.004604">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:11:01.887549" elapsed="0.006852">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:01.894584" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:01.894435" elapsed="0.000214"/>
</branch>
<status status="FAIL" start="2026-08-23T02:11:01.887526" elapsed="0.007147">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:01.895410" elapsed="0.000027"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:01.895554" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:01.895508" elapsed="0.000096"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:01.895491" elapsed="0.000149"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:01.895894" elapsed="0.000031"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:11:01.895994" elapsed="0.000021"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:11:01.882362" elapsed="0.013781">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:01.896240" elapsed="0.000022"/>
</return>
<var>${mounts}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:11:01.879983" elapsed="0.016391">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${mounts}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:01.896608" elapsed="0.000029"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${actual_count}</var>
<arg>len('''${mounts}'''.split('"node-id": "${device_name}"'))-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:01.896860" elapsed="0.000031"/>
</kw>
<return>
<value>${actual_count}</value>
<status status="NOT RUN" start="2026-08-23T02:11:01.896952" elapsed="0.000021"/>
</return>
<var>${count}</var>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Count all instances of the specified device in the Netconf topology (usually 0 or 1).</doc>
<status status="FAIL" start="2026-08-23T02:11:01.859894" elapsed="0.037194">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${count}</arg>
<arg>0</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:01.897316" elapsed="0.000029"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Check that there are no instances of the specified device in the Netconf topology.</doc>
<status status="FAIL" start="2026-08-23T02:11:01.858651" elapsed="0.038865">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Generate URI" owner="Restconf">
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>config</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="NOT RUN" start="2026-08-23T02:11:01.906672" elapsed="0.000028"/>
</kw>
<kw name="No Content From URI" owner="Utils">
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Issue a Get On Session and return on error 404 (No content) or will fail and log the content.
Issues a Get On Session for ${uri} in default using headers from
{'Content-Type': 'application/json'}. If the request returns a HTTP error, fails. Otherwise
returns the data obtained by the request.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:01.910227" elapsed="0.000027"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device has no Netconf connectors nor associated data.</doc>
<status status="FAIL" start="2026-08-23T02:11:01.857280" elapsed="0.053071">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Check_Device_Completely_Gone" owner="NetconfKeywords">
<kw name="Check_Device_Has_No_Netconf_Connector" owner="NetconfKeywords">
<kw name="Count_Netconf_Connectors_For_Device" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:02.930050" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:02.927933" elapsed="0.002149"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:02.930435" elapsed="0.000021"/>
</kw>
<var name="${nv}"/>
<status status="NOT RUN" start="2026-08-23T02:11:02.930283" elapsed="0.000210"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="NOT RUN" start="2026-08-23T02:11:02.930151" elapsed="0.000372"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:02.930873" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:02.930595" elapsed="0.000336"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:02.931665" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:02.931181" elapsed="0.000511"/>
</kw>
<status status="PASS" start="2026-08-23T02:11:02.930956" elapsed="0.000772"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:02.931928" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:02.931753" elapsed="0.000232"/>
</branch>
<status status="PASS" start="2026-08-23T02:11:02.930575" elapsed="0.001431"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:11:02.932045" elapsed="0.000038"/>
</return>
<msg time="2026-08-23T02:11:02.932209" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:11:02.927358" elapsed="0.004877"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:11:02.932282" elapsed="0.000025"/>
</return>
<msg time="2026-08-23T02:11:02.932424" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:11:02.926575" elapsed="0.005874"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:02.939895" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:02.939618" elapsed="0.000325"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:02.940399" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:02.940106" elapsed="0.000343"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:11:02.946817" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:02.946901" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '407'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:11:02.947014" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:11:02.942714" elapsed="0.004774">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:11:02.940522" elapsed="0.007051">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:02.947757" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:02.947607" elapsed="0.000216"/>
</branch>
<status status="FAIL" start="2026-08-23T02:11:02.940502" elapsed="0.007367">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:02.948249" elapsed="0.000027"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:02.948383" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:02.948345" elapsed="0.000079"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:02.948328" elapsed="0.000118"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:02.948588" elapsed="0.000024"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:11:02.948661" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:11:02.935152" elapsed="0.013617">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:02.948863" elapsed="0.000017"/>
</return>
<var>${mounts}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:11:02.932664" elapsed="0.016300">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${mounts}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:02.949130" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${actual_count}</var>
<arg>len('''${mounts}'''.split('"node-id": "${device_name}"'))-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:02.949293" elapsed="0.000020"/>
</kw>
<return>
<value>${actual_count}</value>
<status status="NOT RUN" start="2026-08-23T02:11:02.949355" elapsed="0.000015"/>
</return>
<var>${count}</var>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Count all instances of the specified device in the Netconf topology (usually 0 or 1).</doc>
<status status="FAIL" start="2026-08-23T02:11:02.913645" elapsed="0.035806">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${count}</arg>
<arg>0</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:02.949615" elapsed="0.000021"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Check that there are no instances of the specified device in the Netconf topology.</doc>
<status status="FAIL" start="2026-08-23T02:11:02.912616" elapsed="0.037106">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Generate URI" owner="Restconf">
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>config</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="NOT RUN" start="2026-08-23T02:11:02.958983" elapsed="0.000038"/>
</kw>
<kw name="No Content From URI" owner="Utils">
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Issue a Get On Session and return on error 404 (No content) or will fail and log the content.
Issues a Get On Session for ${uri} in default using headers from
{'Content-Type': 'application/json'}. If the request returns a HTTP error, fails. Otherwise
returns the data obtained by the request.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:02.962747" elapsed="0.000028"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device has no Netconf connectors nor associated data.</doc>
<status status="FAIL" start="2026-08-23T02:11:02.911237" elapsed="0.051650">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Check_Device_Completely_Gone" owner="NetconfKeywords">
<kw name="Check_Device_Has_No_Netconf_Connector" owner="NetconfKeywords">
<kw name="Count_Netconf_Connectors_For_Device" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:03.980436" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:03.978284" elapsed="0.002185"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:03.980828" elapsed="0.000037"/>
</kw>
<var name="${nv}"/>
<status status="NOT RUN" start="2026-08-23T02:11:03.980675" elapsed="0.000226"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="NOT RUN" start="2026-08-23T02:11:03.980540" elapsed="0.000391"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:03.981261" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:03.981001" elapsed="0.000391"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:03.982149" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:03.981652" elapsed="0.000524"/>
</kw>
<status status="PASS" start="2026-08-23T02:11:03.981419" elapsed="0.000794"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:03.982402" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:03.982239" elapsed="0.000219"/>
</branch>
<status status="PASS" start="2026-08-23T02:11:03.980981" elapsed="0.001498"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:11:03.982518" elapsed="0.000036"/>
</return>
<msg time="2026-08-23T02:11:03.982679" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:11:03.977794" elapsed="0.004911"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:11:03.982752" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:11:03.982912" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:11:03.977294" elapsed="0.005644"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:03.990128" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:03.989868" elapsed="0.000307"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:03.990573" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:03.990328" elapsed="0.000289"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:11:03.996729" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:03.996785" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '407'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:11:03.996921" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:11:03.992734" elapsed="0.004572">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:11:03.990684" elapsed="0.006705">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:03.997572" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:03.997423" elapsed="0.000213"/>
</branch>
<status status="FAIL" start="2026-08-23T02:11:03.990665" elapsed="0.006994">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:03.998048" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:03.998181" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:03.998144" elapsed="0.000078"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:03.998127" elapsed="0.000116"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:03.998382" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:11:03.998450" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:11:03.985548" elapsed="0.013009">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:03.998664" elapsed="0.000017"/>
</return>
<var>${mounts}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:11:03.983154" elapsed="0.015612">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${mounts}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:03.998958" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${actual_count}</var>
<arg>len('''${mounts}'''.split('"node-id": "${device_name}"'))-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:03.999125" elapsed="0.000020"/>
</kw>
<return>
<value>${actual_count}</value>
<status status="NOT RUN" start="2026-08-23T02:11:03.999187" elapsed="0.000015"/>
</return>
<var>${count}</var>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Count all instances of the specified device in the Netconf topology (usually 0 or 1).</doc>
<status status="FAIL" start="2026-08-23T02:11:03.966143" elapsed="0.033142">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${count}</arg>
<arg>0</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:03.999444" elapsed="0.000021"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Check that there are no instances of the specified device in the Netconf topology.</doc>
<status status="FAIL" start="2026-08-23T02:11:03.965109" elapsed="0.034443">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Generate URI" owner="Restconf">
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>config</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="NOT RUN" start="2026-08-23T02:11:04.006802" elapsed="0.000028"/>
</kw>
<kw name="No Content From URI" owner="Utils">
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Issue a Get On Session and return on error 404 (No content) or will fail and log the content.
Issues a Get On Session for ${uri} in default using headers from
{'Content-Type': 'application/json'}. If the request returns a HTTP error, fails. Otherwise
returns the data obtained by the request.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:04.010298" elapsed="0.000027"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device has no Netconf connectors nor associated data.</doc>
<status status="FAIL" start="2026-08-23T02:11:03.963717" elapsed="0.046705">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Check_Device_Completely_Gone" owner="NetconfKeywords">
<kw name="Check_Device_Has_No_Netconf_Connector" owner="NetconfKeywords">
<kw name="Count_Netconf_Connectors_For_Device" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:05.028144" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:05.026019" elapsed="0.002156"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:05.028542" elapsed="0.000022"/>
</kw>
<var name="${nv}"/>
<status status="NOT RUN" start="2026-08-23T02:11:05.028391" elapsed="0.000209"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="NOT RUN" start="2026-08-23T02:11:05.028251" elapsed="0.000377"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:05.028974" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:05.028699" elapsed="0.000332"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:05.029748" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:05.029281" elapsed="0.000494"/>
</kw>
<status status="PASS" start="2026-08-23T02:11:05.029056" elapsed="0.000755"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:05.030012" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:05.029850" elapsed="0.000218"/>
</branch>
<status status="PASS" start="2026-08-23T02:11:05.028680" elapsed="0.001408"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:11:05.030127" elapsed="0.000039"/>
</return>
<msg time="2026-08-23T02:11:05.030290" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:11:05.025528" elapsed="0.004788"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:11:05.030363" elapsed="0.000025"/>
</return>
<msg time="2026-08-23T02:11:05.030503" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:11:05.025039" elapsed="0.005488"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:05.037807" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:05.037542" elapsed="0.000327"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:05.038268" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:05.038021" elapsed="0.000290"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:11:05.044826" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:05.044907" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '407'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:11:05.045025" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:11:05.040577" elapsed="0.004848">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:11:05.038378" elapsed="0.007131">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:05.045694" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:05.045542" elapsed="0.000220"/>
</branch>
<status status="FAIL" start="2026-08-23T02:11:05.038359" elapsed="0.007427">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:05.046179" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:05.046313" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:05.046276" elapsed="0.000078"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:05.046258" elapsed="0.000117"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:05.046514" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:11:05.046583" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:11:05.033157" elapsed="0.013533">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:05.046758" elapsed="0.000016"/>
</return>
<var>${mounts}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:11:05.030740" elapsed="0.016138">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${mounts}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:05.047043" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${actual_count}</var>
<arg>len('''${mounts}'''.split('"node-id": "${device_name}"'))-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:05.047205" elapsed="0.000020"/>
</kw>
<return>
<value>${actual_count}</value>
<status status="NOT RUN" start="2026-08-23T02:11:05.047266" elapsed="0.000016"/>
</return>
<var>${count}</var>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Count all instances of the specified device in the Netconf topology (usually 0 or 1).</doc>
<status status="FAIL" start="2026-08-23T02:11:05.013863" elapsed="0.033500">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${count}</arg>
<arg>0</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:05.047520" elapsed="0.000021"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Check that there are no instances of the specified device in the Netconf topology.</doc>
<status status="FAIL" start="2026-08-23T02:11:05.012796" elapsed="0.034831">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Generate URI" owner="Restconf">
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>config</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="NOT RUN" start="2026-08-23T02:11:05.056147" elapsed="0.000044"/>
</kw>
<kw name="No Content From URI" owner="Utils">
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Issue a Get On Session and return on error 404 (No content) or will fail and log the content.
Issues a Get On Session for ${uri} in default using headers from
{'Content-Type': 'application/json'}. If the request returns a HTTP error, fails. Otherwise
returns the data obtained by the request.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:05.061011" elapsed="0.000026"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device has no Netconf connectors nor associated data.</doc>
<status status="FAIL" start="2026-08-23T02:11:05.011399" elapsed="0.049736">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Check_Device_Completely_Gone" owner="NetconfKeywords">
<kw name="Check_Device_Has_No_Netconf_Connector" owner="NetconfKeywords">
<kw name="Count_Netconf_Connectors_For_Device" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:06.079928" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:06.077752" elapsed="0.002211"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:06.080324" elapsed="0.000022"/>
</kw>
<var name="${nv}"/>
<status status="NOT RUN" start="2026-08-23T02:11:06.080171" elapsed="0.000211"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="NOT RUN" start="2026-08-23T02:11:06.080036" elapsed="0.000377"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:06.080752" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:06.080485" elapsed="0.000324"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:06.081563" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:06.081091" elapsed="0.000498"/>
</kw>
<status status="PASS" start="2026-08-23T02:11:06.080849" elapsed="0.000776"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:06.081816" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:06.081651" elapsed="0.000239"/>
</branch>
<status status="PASS" start="2026-08-23T02:11:06.080465" elapsed="0.001446"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:11:06.081950" elapsed="0.000040"/>
</return>
<msg time="2026-08-23T02:11:06.082116" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:11:06.077277" elapsed="0.004864"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:11:06.082188" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:11:06.082329" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:11:06.076736" elapsed="0.005618"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:06.089568" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:06.089309" elapsed="0.000307"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:06.090028" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:06.089766" elapsed="0.000305"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:11:06.096136" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:06.096192" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '407'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:11:06.096313" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:11:06.092163" elapsed="0.004555">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:11:06.090138" elapsed="0.006664">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:06.097023" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:06.096852" elapsed="0.000236"/>
</branch>
<status status="FAIL" start="2026-08-23T02:11:06.090120" elapsed="0.006991">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:06.097473" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:06.097705" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:06.097636" elapsed="0.000127"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:06.097614" elapsed="0.000177"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:06.097967" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:11:06.098040" elapsed="0.000016"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:11:06.084980" elapsed="0.013169">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:06.098219" elapsed="0.000016"/>
</return>
<var>${mounts}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:11:06.082568" elapsed="0.015749">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${mounts}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:06.098480" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${actual_count}</var>
<arg>len('''${mounts}'''.split('"node-id": "${device_name}"'))-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:06.098641" elapsed="0.000021"/>
</kw>
<return>
<value>${actual_count}</value>
<status status="NOT RUN" start="2026-08-23T02:11:06.098710" elapsed="0.000014"/>
</return>
<var>${count}</var>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Count all instances of the specified device in the Netconf topology (usually 0 or 1).</doc>
<status status="FAIL" start="2026-08-23T02:11:06.064687" elapsed="0.034120">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${count}</arg>
<arg>0</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:06.098990" elapsed="0.000021"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Check that there are no instances of the specified device in the Netconf topology.</doc>
<status status="FAIL" start="2026-08-23T02:11:06.063563" elapsed="0.035534">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Generate URI" owner="Restconf">
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>config</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="NOT RUN" start="2026-08-23T02:11:06.108223" elapsed="0.000039"/>
</kw>
<kw name="No Content From URI" owner="Utils">
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Issue a Get On Session and return on error 404 (No content) or will fail and log the content.
Issues a Get On Session for ${uri} in default using headers from
{'Content-Type': 'application/json'}. If the request returns a HTTP error, fails. Otherwise
returns the data obtained by the request.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:06.112141" elapsed="0.000027"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device has no Netconf connectors nor associated data.</doc>
<status status="FAIL" start="2026-08-23T02:11:06.062104" elapsed="0.050164">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<msg time="2026-08-23T02:11:06.112366" level="FAIL">Keyword 'Check_Device_Completely_Gone' failed after retrying for 10 seconds. The last error was: HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${timeout}</arg>
<arg>${period}</arg>
<arg>Check_Device_Completely_Gone</arg>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-08-23T02:10:55.548175" elapsed="10.564284">Keyword 'Check_Device_Completely_Gone' failed after retrying for 10 seconds. The last error was: HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<arg>${device_name}</arg>
<doc>Wait until all netconf connectors for the device with the given name disappear.
Call of Remove_Device_From_Netconf returns before netconf gets
around deleting the device's connector. To ensure the device is
really gone from netconf, use this keyword to make sure all
connectors disappear. If a call to Remove_Device_From_Netconf
is not made before using this keyword, the wait will fail.
Using this keyword is more readable than putting the WUKS below
into a test case.</doc>
<status status="FAIL" start="2026-08-23T02:10:55.547649" elapsed="10.564922">Keyword 'Check_Device_Completely_Gone' failed after retrying for 10 seconds. The last error was: HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<doc>Wait for the device to completely disappear.</doc>
<status status="FAIL" start="2026-08-23T02:10:55.470347" elapsed="10.642405">Keyword 'Check_Device_Completely_Gone' failed after retrying for 10 seconds. The last error was: HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</test>
<test id="s1-s4-s2-t13" name="Configure_The_Device_Back" line="109">
<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-08-23T02:11:06.116246" elapsed="0.000217"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:11:06.115988" elapsed="0.000529"/>
</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-08-23T02:11:06.117537" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:06.117425" elapsed="0.000160"/>
</branch>
<status status="PASS" start="2026-08-23T02:11:06.117406" elapsed="0.000233"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:11:06.122525" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:06.122419" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-08-23T02:11:06.122400" elapsed="0.000192"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:11:06.123587" 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-08-23T02:11:06.123206" elapsed="0.000407"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:11:06.124082" 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-08-23T02:11:06.123770" elapsed="0.000337"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:11:06.124153" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:11:06.124306" 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-08-23T02:11:06.122816" 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-08-23T02:11:06.129943" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:06.129818" elapsed="0.000172"/>
</branch>
<status status="PASS" start="2026-08-23T02:11:06.129800" 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-08-23T02:11:06.131260" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:06.131154" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-08-23T02:11:06.131136" elapsed="0.000191"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:11:06.131889" level="INFO">${karaf_connection_index} = 11</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-08-23T02:11:06.131470" elapsed="0.000447"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:11:06.132343" level="INFO">${current_connection_index} = 13</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-08-23T02:11:06.132074" elapsed="0.000295"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:11:06.167005" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:11:06.132974" elapsed="0.034229"/>
</kw>
<msg time="2026-08-23T02:11:06.167393" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:11:06.167440" 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 "n "e "t "c "o "n "f "...</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-08-23T02:11:06.132525" elapsed="0.034951"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:11:06.188257" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "o "n "f "i "g "u "r "e "_ "T "h "e "_ "D "e "v "i "c "e "_ "B "a "c "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-08-23T02:11:06.168061" elapsed="0.020390"/>
</kw>
<msg time="2026-08-23T02:11:06.188632" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:11:06.188677" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "o "n "f "i "g "u "r "e "_ "T "h "e "_ "D "e "v "i "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-08-23T02:11:06.167643" elapsed="0.021070"/>
</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-08-23T02:11:06.189054" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:06.188789" elapsed="0.000346"/>
</branch>
<status status="PASS" start="2026-08-23T02:11:06.188770" elapsed="0.000391"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:06.189703" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "o "n "f "i "g "u "r "e "_ "T "h "e "_ "D "e "v "i "c "e "_ "B "a "c "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-08-23T02:11:06.189301" elapsed="0.000469"/>
</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-08-23T02:11:06.190066" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:06.189852" elapsed="0.000293"/>
</branch>
<status status="PASS" start="2026-08-23T02:11:06.189818" elapsed="0.000352"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:11:06.190203" 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-08-23T02:11:06.193585" elapsed="0.000147"/>
</kw>
<msg time="2026-08-23T02:11:06.193880" 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-08-23T02:11:06.192875" elapsed="0.001115"/>
</kw>
<kw name="Open 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-08-23T02:11:06.195109" elapsed="0.000040"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:06.196474" elapsed="0.000040"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:11:06.191084" elapsed="0.005511"/>
</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-08-23T02:11:06.190467" elapsed="0.006261"/>
</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-08-23T02:11:06.130825" elapsed="0.066001"/>
</kw>
<msg time="2026-08-23T02:11:06.196938" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:11:06.197007" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "o "n "f "i "g "u "r "e "_ "T "h "e "_ "D "e "v "i "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-08-23T02:11:06.130161" elapsed="0.066884"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:11:06.197228" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-08-23T02:11:06.197121" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-08-23T02:11:06.197103" 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-08-23T02:11:06.197700" 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-08-23T02:11:06.198142" elapsed="0.000027"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:11:06.198215" 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-08-23T02:11:06.129472" elapsed="0.068851"/>
</kw>
<msg time="2026-08-23T02:11:06.198414" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:11:06.198458" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "o "n "f "i "g "u "r "e "_ "T "h "e "_ "D "e "v "i "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-08-23T02:11:06.124694" elapsed="0.073800"/>
</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-08-23T02:11:06.198820" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:06.198567" elapsed="0.000325"/>
</branch>
<status status="PASS" start="2026-08-23T02:11:06.198550" elapsed="0.000366"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:11:06.124554" elapsed="0.074385"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:11:06.124382" elapsed="0.074588"/>
</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-08-23T02:11:06.122061" elapsed="0.076964"/>
</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-08-23T02:11:06.117139" elapsed="0.081941"/>
</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-08-23T02:11:06.116668" elapsed="0.082456"/>
</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-08-23T02:11:06.113893" elapsed="0.085283"/>
</kw>
<kw name="Configure_Device_In_Netconf" owner="NetconfKeywords">
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T02:11:06.220281" elapsed="0.000423"/>
</kw>
<msg time="2026-08-23T02:11:06.220756" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:11:06.219922" elapsed="0.000883"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return scandium if vanadium is at least ${lower_bound},
return calcium otherwise.</doc>
<status status="PASS" start="2026-08-23T02:11:06.219519" elapsed="0.001379"/>
</kw>
<msg time="2026-08-23T02:11:06.220941" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:11:06.210992" elapsed="0.010017"/>
</kw>
<msg time="2026-08-23T02:11:06.221115" level="INFO">${version} = scandium</msg>
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-08-23T02:11:06.210653" elapsed="0.010486"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:11:06.222088" level="INFO">${mapping} = {'DEVICE_IP': '10.30.170.120', 'DEVICE_NAME': 'netconf-test-device', 'DEVICE_PORT': '17830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'topsecret', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/t...</msg>
<var>${mapping}</var>
<arg>DEVICE_IP=${device_address}</arg>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>DEVICE_PORT=${device_port}</arg>
<arg>DEVICE_USER=${device_user}</arg>
<arg>DEVICE_PASSWORD=${device_password}</arg>
<arg>DEVICE_KEY=${device_key}</arg>
<arg>SCHEMA_DIRECTORY=${schema_directory}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-23T02:11:06.221344" elapsed="0.000772"/>
</kw>
<if>
<branch type="IF" condition="'${http_method}'=='post'">
<kw name="Post_As_Xml_Templated" owner="TemplatedRequests">
<arg>folder=${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</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="NOT RUN" start="2026-08-23T02:11:06.222511" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:06.222204" elapsed="0.000374"/>
</branch>
<branch type="ELSE">
<kw name="Put_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Put_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-08-23T02:11:06.254198" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:06.253798" elapsed="0.000428"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T02:11:06.255006" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-23T02:11:06.254721" elapsed="0.000361">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-23T02:11:06.255176" 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-08-23T02:11:06.254390" elapsed="0.000811"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:11:06.255744" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/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-08-23T02:11:06.255362" elapsed="0.000410"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:11:06.256087" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/location.uri"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:11:06.256252" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:11:06.255946" elapsed="0.000331"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:06.256701" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:06.256432" elapsed="0.000327"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:06.257732" level="INFO">mapping: {'DEVICE_IP': '10.30.170.120', 'DEVICE_NAME': 'netconf-test-device', 'DEVICE_PORT': '17830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'topsecret', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:06.257473" elapsed="0.000305"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:11:06.258244" 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-08-23T02:11:06.257977" elapsed="0.000293"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:11:06.259227" level="INFO">${value} = 10.30.170.120</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:11:06.258634" elapsed="0.000620"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:11:06.260496" level="INFO">${encoded} = 10.30.170.120</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-08-23T02:11:06.259928" elapsed="0.000611"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:11:06.260672" elapsed="0.000035"/>
</return>
<msg time="2026-08-23T02:11:06.260947" level="INFO">${encoded_value} = 10.30.170.120</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-08-23T02:11:06.259438" elapsed="0.001535"/>
</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-08-23T02:11:06.261147" elapsed="0.000573"/>
</kw>
<var name="${key}">DEVICE_IP</var>
<var name="${value}">10.30.170.120</var>
<status status="PASS" start="2026-08-23T02:11:06.258501" elapsed="0.003261"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:11:06.262973" level="INFO">${value} = netconf-test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:11:06.262287" elapsed="0.000715"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:11:06.264269" level="INFO">${encoded} = netconf-test-device</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-08-23T02:11:06.263654" elapsed="0.000659"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:11:06.264446" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T02:11:06.264692" level="INFO">${encoded_value} = netconf-test-device</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-08-23T02:11:06.263185" elapsed="0.001534"/>
</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-08-23T02:11:06.264909" elapsed="0.000553"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:11:06.262153" elapsed="0.003352"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:11:06.266328" level="INFO">${value} = 17830</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:11:06.265750" elapsed="0.000606"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:11:06.267591" level="INFO">${encoded} = 17830</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-08-23T02:11:06.267034" elapsed="0.000601"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:11:06.267772" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T02:11:06.268169" level="INFO">${encoded_value} = 17830</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-08-23T02:11:06.266541" elapsed="0.001654"/>
</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-08-23T02:11:06.268344" elapsed="0.000558"/>
</kw>
<var name="${key}">DEVICE_PORT</var>
<var name="${value}">17830</var>
<status status="PASS" start="2026-08-23T02:11:06.265618" elapsed="0.003327"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:11:06.270015" level="INFO">${value} = admin</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:11:06.269210" elapsed="0.000832"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:11:06.271248" level="INFO">${encoded} = admin</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-08-23T02:11:06.270685" elapsed="0.000607"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:11:06.271422" elapsed="0.000032"/>
</return>
<msg time="2026-08-23T02:11:06.271664" level="INFO">${encoded_value} = admin</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-08-23T02:11:06.270226" elapsed="0.001464"/>
</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-08-23T02:11:06.271923" elapsed="0.000533"/>
</kw>
<var name="${key}">DEVICE_USER</var>
<var name="${value}">admin</var>
<status status="PASS" start="2026-08-23T02:11:06.269080" elapsed="0.003419"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:11:06.273320" level="INFO">${value} = topsecret</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:11:06.272744" elapsed="0.000603"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:11:06.274626" level="INFO">${encoded} = topsecret</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-08-23T02:11:06.274084" elapsed="0.000585"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:11:06.274803" elapsed="0.000046"/>
</return>
<msg time="2026-08-23T02:11:06.275125" level="INFO">${encoded_value} = topsecret</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-08-23T02:11:06.273527" elapsed="0.001625"/>
</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-08-23T02:11:06.275304" elapsed="0.000627"/>
</kw>
<var name="${key}">DEVICE_PASSWORD</var>
<var name="${value}">topsecret</var>
<status status="PASS" start="2026-08-23T02:11:06.272613" elapsed="0.003362"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:11:06.276775" level="INFO">${value} = device-key</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:11:06.276221" elapsed="0.000580"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:11:06.278066" level="INFO">${encoded} = device-key</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-08-23T02:11:06.277495" elapsed="0.000614"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:11:06.278240" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T02:11:06.278482" level="INFO">${encoded_value} = device-key</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-08-23T02:11:06.277027" elapsed="0.001481"/>
</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-08-23T02:11:06.278656" elapsed="0.000701"/>
</kw>
<var name="${key}">DEVICE_KEY</var>
<var name="${value}">device-key</var>
<status status="PASS" start="2026-08-23T02:11:06.276090" elapsed="0.003309"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:11:06.280204" level="INFO">${value} = /tmp/schema</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:11:06.279641" elapsed="0.000589"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:11:06.281514" level="INFO">${encoded} = /tmp/schema</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-08-23T02:11:06.280919" elapsed="0.000638"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:11:06.281686" elapsed="0.000032"/>
</return>
<msg time="2026-08-23T02:11:06.281958" level="INFO">${encoded_value} = /tmp/schema</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-08-23T02:11:06.280412" elapsed="0.001573"/>
</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-08-23T02:11:06.282133" elapsed="0.000533"/>
</kw>
<var name="${key}">SCHEMA_DIRECTORY</var>
<var name="${value}">/tmp/schema</var>
<status status="PASS" start="2026-08-23T02:11:06.279511" elapsed="0.003197"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:11:06.283526" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:11:06.282983" elapsed="0.000569"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:11:06.284917" level="INFO">${encoded} = /rests</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-08-23T02:11:06.284356" elapsed="0.000606"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:11:06.285118" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T02:11:06.285363" level="INFO">${encoded_value} = /rests</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-08-23T02:11:06.283733" elapsed="0.001656"/>
</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-08-23T02:11:06.285537" elapsed="0.000581"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-23T02:11:06.282821" elapsed="0.003339"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-23T02:11:06.258321" elapsed="0.027876"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-23T02:11:06.286241" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:11:06.286404" level="INFO">${mapping_to_use} = {'DEVICE_IP': '10.30.170.120', 'DEVICE_NAME': 'netconf-test-device', 'DEVICE_PORT': '17830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'topsecret', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/t...</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-23T02:11:06.257153" elapsed="0.029279"/>
</kw>
<status status="PASS" start="2026-08-23T02:11:06.256829" elapsed="0.029634"/>
</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-08-23T02:11:06.286638" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:06.286490" elapsed="0.000203"/>
</branch>
<status status="PASS" start="2026-08-23T02:11:06.256809" elapsed="0.029905"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:11:06.287585" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device</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-08-23T02:11:06.286878" elapsed="0.000735"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T02:11:06.287664" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="PASS" start="2026-08-23T02:11:06.253177" elapsed="0.034612"/>
</kw>
<msg time="2026-08-23T02:11:06.287866" 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-08-23T02:11:06.240300" elapsed="0.047623"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:06.300793" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:06.313219" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:06.325558" 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-08-23T02:11:06.325796" 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-08-23T02:11:06.325990" 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-08-23T02:11:06.326364" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:06.326220" elapsed="0.000200"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:06.326205" 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-08-23T02:11:06.326579" 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-08-23T02:11:06.326741" 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-08-23T02:11:06.326916" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T02:11:06.326174" elapsed="0.000797"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T02:11:06.326071" 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-08-23T02:11:06.327142" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:06.327218" elapsed="0.000016"/>
</return>
<msg time="2026-08-23T02:11:06.327344" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device</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-08-23T02:11:06.236089" elapsed="0.091281"/>
</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-08-23T02:11:06.353703" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/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-08-23T02:11:06.353243" elapsed="0.000489"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T02:11:06.354491" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/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-08-23T02:11:06.354241" elapsed="0.000329">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device.vanadium/data.xml' does not exist.</status>
</kw>
<msg time="2026-08-23T02:11:06.354665" 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-08-23T02:11:06.353907" elapsed="0.000782"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:11:06.355253" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/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-08-23T02:11:06.354867" elapsed="0.000413"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:11:06.355575" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/data.xml"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/data.xml&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:11:06.355732" level="INFO">${template} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;$DEVICE_NAME&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;$DEVICE_IP&lt;/host&gt;
    &lt;port&gt;$DEVI...</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:11:06.355438" elapsed="0.000323"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:06.356178" level="INFO">&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;$DEVICE_NAME&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;$DEVICE_IP&lt;/host&gt;
    &lt;port&gt;$DEVICE_PORT&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;$DEVICE_USER&lt;/username&gt;
      &lt;password&gt;$DEVICE_PASSWORD&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt;
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:06.355930" elapsed="0.000338"/>
</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-08-23T02:11:06.356633" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:06.356338" elapsed="0.000359"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:06.357205" level="INFO">${mapping_to_use} = {'DEVICE_IP': '10.30.170.120', 'DEVICE_NAME': 'netconf-test-device', 'DEVICE_PORT': '17830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'topsecret', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/t...</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-08-23T02:11:06.356880" elapsed="0.000353"/>
</kw>
<status status="PASS" start="2026-08-23T02:11:06.356722" elapsed="0.000547"/>
</branch>
<status status="PASS" start="2026-08-23T02:11:06.356318" elapsed="0.000972"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:11:06.358201" level="INFO">${final_text} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;netconf-test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.120&lt;/host&gt;
    &lt;...</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-08-23T02:11:06.357433" elapsed="0.000799"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T02:11:06.358282" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="PASS" start="2026-08-23T02:11:06.352596" elapsed="0.005815"/>
</kw>
<msg time="2026-08-23T02:11:06.358467" 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-08-23T02:11:06.339960" elapsed="0.018556"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:06.371323" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:06.383710" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:06.396108" 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-08-23T02:11:06.396301" 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-08-23T02:11:06.396471" 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-08-23T02:11:06.396849" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:06.396697" elapsed="0.000210"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:06.396681" 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-08-23T02:11:06.397091" 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-08-23T02:11:06.397258" 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-08-23T02:11:06.397420" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T02:11:06.396653" elapsed="0.000819"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T02:11:06.396549" elapsed="0.000950"/>
</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-08-23T02:11:06.397688" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:06.397766" elapsed="0.000016"/>
</return>
<msg time="2026-08-23T02:11:06.397908" level="INFO">${data} = &lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;netconf-test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.120&lt;/host&gt;
    &lt;...</msg>
<var>${data}</var>
<arg>folder=${folder}</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-08-23T02:11:06.337318" elapsed="0.060618"/>
</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-08-23T02:11:06.399192" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/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-08-23T02:11:06.398944" elapsed="0.000312">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/full-uri-device/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-23T02:11:06.399349" 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-08-23T02:11:06.398591" 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-08-23T02:11:06.399684" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:06.399442" elapsed="0.000300"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:06.400250" 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-08-23T02:11:06.399956" elapsed="0.000320"/>
</kw>
<status status="PASS" start="2026-08-23T02:11:06.399767" elapsed="0.000544"/>
</branch>
<status status="PASS" start="2026-08-23T02:11:06.399424" elapsed="0.000908"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:11:06.402668" 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-08-23T02:11:06.400481" elapsed="0.002213"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-23T02:11:06.402745" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:11:06.402913" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/full-uri-device/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-23T02:11:06.398268" elapsed="0.004670"/>
</kw>
<kw name="Put_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:06.404369" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:06.404069" elapsed="0.000354"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:06.404826" level="INFO">&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;netconf-test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.120&lt;/host&gt;
    &lt;port&gt;17830&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;admin&lt;/username&gt;
      &lt;password&gt;topsecret&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt;</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:06.404581" elapsed="0.000314"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:06.405313" 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-08-23T02:11:06.405042" elapsed="0.000314"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:06.405743" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:06.405502" elapsed="0.000283"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-08-23T02:11:06.406598" 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-08-23T02:11:06.406401" elapsed="0.000222"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-08-23T02:11:06.406968" 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-08-23T02:11:06.406778" 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-08-23T02:11:06.407138" elapsed="0.000206"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:06.407747" 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-08-23T02:11:06.407501" elapsed="0.000289"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-08-23T02:11:06.407851" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T02:11:06.408045" 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-08-23T02:11:06.406001" elapsed="0.002069"/>
</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-08-23T02:11:06.416630" level="INFO">PUT Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Content-Length': '452', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;node xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;node-id&gt;netconf-test-device&lt;/node-id&gt;
  &lt;netconf-node xmlns="urn:opendaylight:netconf-node-topology"&gt;
    &lt;host&gt;10.30.170.120&lt;/host&gt;
    &lt;port&gt;17830&lt;/port&gt;
    &lt;login-password-unencrypted&gt;
      &lt;username&gt;admin&lt;/username&gt;
      &lt;password&gt;topsecret&lt;/password&gt;
    &lt;/login-password-unencrypted&gt;
    &lt;tcp-only&gt;false&lt;/tcp-only&gt;
    &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
  &lt;/netconf-node&gt;
&lt;/node&gt; 
 </msg>
<msg time="2026-08-23T02:11:06.416690" level="INFO">PUT Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device 
 status=404, reason=Not Found 
 headers={'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:06.416800" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device</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-08-23T02:11:06.410428" elapsed="0.006817">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device</status>
</kw>
<status status="FAIL" start="2026-08-23T02:11:06.408141" elapsed="0.009193">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device</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-08-23T02:11:06.417522" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:06.417369" elapsed="0.000220"/>
</branch>
<status status="FAIL" start="2026-08-23T02:11:06.408123" elapsed="0.009489">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device</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-08-23T02:11:06.418011" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:06.418142" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:06.418105" elapsed="0.000079"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:06.418087" elapsed="0.000118"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:06.418345" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:11:06.418412" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>content_type=${content_type}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</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-08-23T02:11:06.403263" elapsed="0.015255">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:06.418593" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>extension=xml</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>content_type=${HEADERS_XML}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>endline=${\n}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve URI and data from folder, call Put_To_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-23T02:11:06.225435" elapsed="0.193261">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=response</arg>
<arg>mapping=${mapping}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:06.418997" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:06.418804" elapsed="0.000261"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:06.418787" elapsed="0.000302"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:06.419122" elapsed="0.000014"/>
</return>
<arg>folder=${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Add arguments sensible for XML data, return Put_Templated response text.
Optionally, verification against response.xml (no iteration) is called.</doc>
<status status="FAIL" start="2026-08-23T02:11:06.222829" elapsed="0.196389">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device</status>
</kw>
<status status="FAIL" start="2026-08-23T02:11:06.222603" elapsed="0.196682">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device</status>
</branch>
<status status="FAIL" start="2026-08-23T02:11:06.222186" elapsed="0.197162">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device</status>
</if>
<kw name="Set To Dictionary" owner="Collections">
<arg>${NetconfKeywords__mounted_device_types}</arg>
<arg>${device_name}</arg>
<arg>${device_type}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:06.419505" elapsed="0.000022"/>
</kw>
<arg>${device_name}</arg>
<arg>device_type=${device_type}</arg>
<doc>Tell Netconf about the specified device so it can add it into its configuration.</doc>
<status status="FAIL" start="2026-08-23T02:11:06.199444" elapsed="0.220175">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device</status>
</kw>
<doc>Configure the device again.
This is the second step of the device configuration.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-08-23T02:11:06.113249" elapsed="0.306534">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device</status>
</test>
<test id="s1-s4-s2-t14" name="Wait_For_Device_To_Reconnect" line="115">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-08-23T02:11:06.423143" elapsed="0.000215"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:11:06.422879" elapsed="0.000535"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:11:06.424411" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:06.424296" elapsed="0.000161"/>
</branch>
<status status="PASS" start="2026-08-23T02:11:06.424278" elapsed="0.000202"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:11:06.430873" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:06.430706" elapsed="0.000233"/>
</branch>
<status status="PASS" start="2026-08-23T02:11:06.430682" elapsed="0.000287"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:11:06.432350" 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-08-23T02:11:06.431792" elapsed="0.000594"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:11:06.433041" 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-08-23T02:11:06.432603" elapsed="0.000508"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:11:06.433175" elapsed="0.000041"/>
</return>
<msg time="2026-08-23T02:11:06.433393" 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-08-23T02:11:06.431275" elapsed="0.002153"/>
</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-08-23T02:11:06.439152" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:06.439044" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-23T02:11:06.439025" elapsed="0.000197"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:11:06.440490" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:06.440382" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T02:11:06.440364" elapsed="0.000194"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:11:06.441137" level="INFO">${karaf_connection_index} = 11</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-08-23T02:11:06.440702" elapsed="0.000462"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:11:06.441591" level="INFO">${current_connection_index} = 13</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-08-23T02:11:06.441321" elapsed="0.000296"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:11:06.472335" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:11:06.442195" elapsed="0.030338"/>
</kw>
<msg time="2026-08-23T02:11:06.472734" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:11:06.472782" 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 "n "e "t "c "o "n "f "...</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-08-23T02:11:06.441773" elapsed="0.031046"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:11:06.494711" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "W "a "i "t "_ "F "o "r "_ "D "e "v "i "c "e "_ "T "o "_ "R "e "c "o "n "n "e "c "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-08-23T02:11:06.473479" elapsed="0.021442"/>
</kw>
<msg time="2026-08-23T02:11:06.495101" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:11:06.495147" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "W "a "i "t "_ "F "o "r "_ "D "e "v "i "c "e "_ "T "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-08-23T02:11:06.473029" elapsed="0.022202"/>
</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-08-23T02:11:06.495531" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:06.495311" elapsed="0.000300"/>
</branch>
<status status="PASS" start="2026-08-23T02:11:06.495291" elapsed="0.000346"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:06.496195" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "W "a "i "t "_ "F "o "r "_ "D "e "v "i "c "e "_ "T "o "_ "R "e "c "o "n "n "e "c "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-08-23T02:11:06.495775" elapsed="0.000489"/>
</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-08-23T02:11:06.496540" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:06.496330" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-08-23T02:11:06.496312" elapsed="0.000331"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:11:06.496676" 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-08-23T02:11:06.500114" elapsed="0.000146"/>
</kw>
<msg time="2026-08-23T02:11:06.500335" 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-08-23T02:11:06.499368" elapsed="0.001072"/>
</kw>
<kw name="Open 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-08-23T02:11:06.501579" elapsed="0.000040"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:06.502929" elapsed="0.000040"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:11:06.497593" elapsed="0.005458"/>
</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-08-23T02:11:06.496971" elapsed="0.006210"/>
</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-08-23T02:11:06.440081" elapsed="0.063199"/>
</kw>
<msg time="2026-08-23T02:11:06.503371" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:11:06.503414" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "W "a "i "t "_ "F "o "r "_ "D "e "v "i "c "e "_ "T "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-08-23T02:11:06.439371" elapsed="0.064081"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:11:06.503632" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:11:06.503527" elapsed="0.000164"/>
</branch>
<status status="PASS" start="2026-08-23T02:11:06.503508" 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-08-23T02:11:06.504213" 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-08-23T02:11:06.504543" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:11:06.504616" 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-08-23T02:11:06.438688" elapsed="0.066040"/>
</kw>
<msg time="2026-08-23T02:11:06.504821" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:11:06.504882" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "W "a "i "t "_ "F "o "r "_ "D "e "v "i "c "e "_ "T "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-08-23T02:11:06.433962" elapsed="0.070958"/>
</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-08-23T02:11:06.505263" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:06.504995" elapsed="0.000321"/>
</branch>
<status status="PASS" start="2026-08-23T02:11:06.504978" elapsed="0.000361"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:11:06.433761" elapsed="0.071601"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:11:06.433500" elapsed="0.071893"/>
</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-08-23T02:11:06.430206" elapsed="0.075240"/>
</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-08-23T02:11:06.424008" elapsed="0.081491"/>
</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-08-23T02:11:06.423563" elapsed="0.081980"/>
</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-08-23T02:11:06.420714" elapsed="0.084918"/>
</kw>
<kw name="Wait_Device_Connected" owner="NetconfKeywords">
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:06.517653" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:06.515591" elapsed="0.002089"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:06.518348" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:06.518027" elapsed="0.000347"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:11:06.517876" elapsed="0.000534"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:06.518965" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:06.518635" elapsed="0.000357"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:11:06.518488" elapsed="0.000539"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:11:06.517731" elapsed="0.001325"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:06.519351" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:06.519119" elapsed="0.000289"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:06.520130" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:06.519656" elapsed="0.000502"/>
</kw>
<status status="PASS" start="2026-08-23T02:11:06.519432" elapsed="0.000761"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:06.520378" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:06.520219" elapsed="0.000213"/>
</branch>
<status status="PASS" start="2026-08-23T02:11:06.519101" elapsed="0.001351"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:11:06.520486" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:11:06.520631" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:11:06.515142" elapsed="0.005514"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:11:06.520702" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:11:06.520862" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:11:06.514576" elapsed="0.006314"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:06.528139" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:06.527887" elapsed="0.000299"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:06.528577" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:06.528335" elapsed="0.000285"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:11:06.535081" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:06.535137" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:11:06.535247" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:11:06.530726" elapsed="0.004899">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:11:06.528685" elapsed="0.007061">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:06.535950" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:06.535784" elapsed="0.000232"/>
</branch>
<status status="FAIL" start="2026-08-23T02:11:06.528667" elapsed="0.007372">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:06.536413" elapsed="0.000025"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:06.536544" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:06.536507" elapsed="0.000080"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:06.536489" elapsed="0.000119"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:06.536747" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:11:06.536817" elapsed="0.000029"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:11:06.523585" elapsed="0.013357">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:06.537010" elapsed="0.000016"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:11:06.521108" elapsed="0.015996">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:06.537310" elapsed="0.000022"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:11:06.506945" elapsed="0.030475">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:07.556006" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:07.553264" elapsed="0.002781"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:07.556742" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:07.556416" elapsed="0.000353"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:11:07.556264" elapsed="0.000545"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:07.557388" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:07.557063" elapsed="0.000351"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:11:07.556910" elapsed="0.000540"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:11:07.556115" elapsed="0.001364"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:07.557849" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:07.557550" elapsed="0.000359"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:07.558631" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:07.558163" elapsed="0.000495"/>
</kw>
<status status="PASS" start="2026-08-23T02:11:07.557934" elapsed="0.000759"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:07.558896" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:07.558718" elapsed="0.000235"/>
</branch>
<status status="PASS" start="2026-08-23T02:11:07.557530" elapsed="0.001444"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:11:07.559012" elapsed="0.000036"/>
</return>
<msg time="2026-08-23T02:11:07.559173" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:11:07.552589" elapsed="0.006610"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:11:07.559331" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:11:07.559477" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:11:07.551768" elapsed="0.007734"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:07.566852" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:07.566575" elapsed="0.000328"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:07.567296" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:07.567053" elapsed="0.000286"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:11:07.573826" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:07.573902" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:11:07.574023" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:11:07.569440" elapsed="0.005000">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:11:07.567405" elapsed="0.007118">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:07.574706" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:07.574556" elapsed="0.000214"/>
</branch>
<status status="FAIL" start="2026-08-23T02:11:07.567387" elapsed="0.007406">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:07.575178" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:07.575310" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:07.575272" elapsed="0.000079"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:07.575256" elapsed="0.000117"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:07.575510" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:11:07.575579" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:11:07.562197" elapsed="0.013486">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:07.575756" elapsed="0.000015"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:11:07.559725" elapsed="0.016141">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:07.576029" elapsed="0.000022"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:11:07.538562" elapsed="0.037576">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:08.595090" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:08.592903" elapsed="0.002220"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:08.595853" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:08.595511" elapsed="0.000371"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:11:08.595351" elapsed="0.000568"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:08.596479" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:08.596154" elapsed="0.000352"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:11:08.596005" elapsed="0.000537"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:11:08.595198" elapsed="0.001374"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:08.596929" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:08.596647" elapsed="0.000342"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:08.597713" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:08.597248" elapsed="0.000494"/>
</kw>
<status status="PASS" start="2026-08-23T02:11:08.597016" elapsed="0.000762"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:08.597981" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:08.597804" elapsed="0.000234"/>
</branch>
<status status="PASS" start="2026-08-23T02:11:08.596627" elapsed="0.001432"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:11:08.598100" elapsed="0.000041"/>
</return>
<msg time="2026-08-23T02:11:08.598292" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:11:08.592406" elapsed="0.005917"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:11:08.598372" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:11:08.598514" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:11:08.591806" elapsed="0.006734"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:08.605928" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:08.605653" elapsed="0.000322"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:08.606385" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:08.606126" elapsed="0.000303"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:11:08.612534" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:08.612591" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:11:08.612710" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:11:08.608531" elapsed="0.004585">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:11:08.606495" elapsed="0.006705">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:08.613443" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:08.613290" elapsed="0.000219"/>
</branch>
<status status="FAIL" start="2026-08-23T02:11:08.606477" elapsed="0.007055">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:08.613926" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:08.614059" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:08.614022" elapsed="0.000079"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:08.614004" elapsed="0.000119"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:08.614288" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:11:08.614360" elapsed="0.000014"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:11:08.601223" elapsed="0.013242">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:08.614534" elapsed="0.000015"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:11:08.598761" elapsed="0.015867">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:08.614792" elapsed="0.000021"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:11:08.577012" elapsed="0.037907">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:09.672548" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:09.670346" elapsed="0.002235"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:09.673313" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:09.672982" elapsed="0.000359"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:11:09.672793" elapsed="0.000584"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:09.673950" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:09.673605" elapsed="0.000381"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:11:09.673457" elapsed="0.000578"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:11:09.672650" elapsed="0.001427"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:09.674535" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:09.674175" elapsed="0.000423"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:09.675602" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:09.674917" elapsed="0.000725"/>
</kw>
<status status="PASS" start="2026-08-23T02:11:09.674625" elapsed="0.001067"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:09.676028" elapsed="0.000035"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:09.675726" elapsed="0.000384"/>
</branch>
<status status="PASS" start="2026-08-23T02:11:09.674147" elapsed="0.001987"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:11:09.676174" elapsed="0.000038"/>
</return>
<msg time="2026-08-23T02:11:09.676343" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:11:09.669865" elapsed="0.006506"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:11:09.676419" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:11:09.676708" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:11:09.669113" elapsed="0.007624"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:09.684228" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:09.683965" elapsed="0.000313"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:09.684670" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:09.684427" elapsed="0.000286"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:11:09.690708" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:09.690810" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:11:09.690991" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:11:09.686962" elapsed="0.004441">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:11:09.684780" elapsed="0.006705">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:09.691672" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:09.691519" elapsed="0.000218"/>
</branch>
<status status="FAIL" start="2026-08-23T02:11:09.684761" elapsed="0.006999">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:09.692269" elapsed="0.000036"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:09.692455" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:09.692403" elapsed="0.000109"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:09.692379" elapsed="0.000164"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:09.692737" elapsed="0.000033"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:11:09.692878" elapsed="0.000027"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:11:09.679530" elapsed="0.013515">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:09.693140" elapsed="0.000021"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:11:09.677026" elapsed="0.016242">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:09.693493" elapsed="0.000029"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:11:09.615755" elapsed="0.077886">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:10.711866" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:10.708777" elapsed="0.003145"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:10.712645" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:10.712320" elapsed="0.000351"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:11:10.712165" elapsed="0.000541"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:10.713372" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:10.712954" elapsed="0.000445"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:11:10.712789" elapsed="0.000646"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:11:10.712016" elapsed="0.001448"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:10.713804" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:10.713539" elapsed="0.000344"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:10.714605" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:10.714141" elapsed="0.000492"/>
</kw>
<status status="PASS" start="2026-08-23T02:11:10.713912" elapsed="0.000757"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:10.714869" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:10.714694" elapsed="0.000231"/>
</branch>
<status status="PASS" start="2026-08-23T02:11:10.713519" elapsed="0.001427"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:11:10.714987" elapsed="0.000039"/>
</return>
<msg time="2026-08-23T02:11:10.715152" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:11:10.708121" elapsed="0.007057"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:11:10.715224" elapsed="0.000025"/>
</return>
<msg time="2026-08-23T02:11:10.715381" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:11:10.707286" elapsed="0.008120"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:10.722896" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:10.722609" elapsed="0.000335"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:10.723372" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:10.723095" elapsed="0.000321"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:11:10.729595" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:10.729673" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:11:10.729827" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:11:10.725520" elapsed="0.004849">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:11:10.723481" elapsed="0.007000">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:10.730743" elapsed="0.000124"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:10.730531" elapsed="0.000407"/>
</branch>
<status status="FAIL" start="2026-08-23T02:11:10.723463" elapsed="0.007508">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:10.731520" elapsed="0.000037"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:10.731707" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:10.731654" elapsed="0.000111"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:10.731629" elapsed="0.000166"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:10.732018" elapsed="0.000030"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:11:10.732116" elapsed="0.000022"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:11:10.718271" elapsed="0.013993">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:10.732360" elapsed="0.000022"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:11:10.715627" elapsed="0.016863">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:10.732719" elapsed="0.000029"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:11:10.694524" elapsed="0.038374">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:11.750122" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:11.747208" elapsed="0.002947"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:11.750874" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:11.750529" elapsed="0.000374"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:11:11.750372" elapsed="0.000568"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:11.751495" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:11.751174" elapsed="0.000348"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:11:11.751023" elapsed="0.000534"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:11:11.750226" elapsed="0.001360"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:11.751948" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:11.751656" elapsed="0.000352"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:11.752732" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:11.752261" elapsed="0.000500"/>
</kw>
<status status="PASS" start="2026-08-23T02:11:11.752032" elapsed="0.000765"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:11.753001" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:11.752822" elapsed="0.000237"/>
</branch>
<status status="PASS" start="2026-08-23T02:11:11.751636" elapsed="0.001444"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:11:11.753118" elapsed="0.000036"/>
</return>
<msg time="2026-08-23T02:11:11.753281" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:11:11.746527" elapsed="0.006780"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:11:11.753355" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:11:11.753499" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:11:11.745704" elapsed="0.007821"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:11.760899" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:11.760620" elapsed="0.000327"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:11.761341" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:11.761099" elapsed="0.000285"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:11:11.767497" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:11.767555" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:11:11.767671" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:11:11.763485" elapsed="0.004622">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:11:11.761449" elapsed="0.006743">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:11.768378" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:11.768227" elapsed="0.000216"/>
</branch>
<status status="FAIL" start="2026-08-23T02:11:11.761431" elapsed="0.007035">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:11.768853" elapsed="0.000027"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:11.768987" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:11.768949" elapsed="0.000079"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:11.768932" elapsed="0.000117"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:11.769187" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:11:11.769256" elapsed="0.000014"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:11:11.756304" elapsed="0.013057">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:11.769429" elapsed="0.000015"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:11:11.753821" elapsed="0.015702">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:11.769685" elapsed="0.000021"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:11:11.733781" elapsed="0.036012">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:12.787885" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:12.785510" elapsed="0.002482"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:12.788900" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:12.788359" elapsed="0.000577"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:11:12.788204" elapsed="0.000770"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:12.789565" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:12.789236" elapsed="0.000356"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:11:12.789069" elapsed="0.000559"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:11:12.788061" elapsed="0.001597"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:12.790017" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:12.789728" elapsed="0.000348"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:12.790794" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:12.790329" elapsed="0.000494"/>
</kw>
<status status="PASS" start="2026-08-23T02:11:12.790101" elapsed="0.000774"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:12.791061" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:12.790902" elapsed="0.000214"/>
</branch>
<status status="PASS" start="2026-08-23T02:11:12.789709" elapsed="0.001428"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:11:12.791174" elapsed="0.000037"/>
</return>
<msg time="2026-08-23T02:11:12.791335" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:11:12.785031" elapsed="0.006329"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:11:12.791407" elapsed="0.000025"/>
</return>
<msg time="2026-08-23T02:11:12.791547" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:11:12.784426" elapsed="0.007146"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:12.798886" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:12.798617" elapsed="0.000318"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:12.799328" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:12.799087" elapsed="0.000283"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:11:12.805385" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:12.805442" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:11:12.805565" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:11:12.801481" elapsed="0.004529">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:11:12.799436" elapsed="0.006658">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:12.806283" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:12.806129" elapsed="0.000253"/>
</branch>
<status status="FAIL" start="2026-08-23T02:11:12.799417" elapsed="0.006992">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:12.806788" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:12.806943" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:12.806905" elapsed="0.000080"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:12.806885" elapsed="0.000123"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:12.807151" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:11:12.807223" elapsed="0.000016"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:11:12.794316" elapsed="0.013015">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:12.807401" elapsed="0.000017"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:11:12.791798" elapsed="0.015700">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:12.807664" elapsed="0.000021"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:11:12.770621" elapsed="0.037153">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:13.825152" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:13.822960" elapsed="0.002227"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:13.825909" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:13.825566" elapsed="0.000373"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:11:13.825410" elapsed="0.000566"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:13.826526" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:13.826210" elapsed="0.000342"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:11:13.826060" elapsed="0.000527"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:11:13.825260" elapsed="0.001356"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:13.826973" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:13.826693" elapsed="0.000340"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:13.827748" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:13.827285" elapsed="0.000490"/>
</kw>
<status status="PASS" start="2026-08-23T02:11:13.827058" elapsed="0.000754"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:13.828011" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:13.827850" elapsed="0.000216"/>
</branch>
<status status="PASS" start="2026-08-23T02:11:13.826671" elapsed="0.001416"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:11:13.828126" elapsed="0.000038"/>
</return>
<msg time="2026-08-23T02:11:13.828290" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:11:13.822446" elapsed="0.005869"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:11:13.828363" elapsed="0.000025"/>
</return>
<msg time="2026-08-23T02:11:13.828504" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:11:13.821630" elapsed="0.006899"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:13.835885" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:13.835615" elapsed="0.000322"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:13.836328" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:13.836087" elapsed="0.000284"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:11:13.842597" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:13.842654" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:11:13.842768" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:11:13.838610" elapsed="0.004586">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:11:13.836436" elapsed="0.006846">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:13.843467" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:13.843316" elapsed="0.000215"/>
</branch>
<status status="FAIL" start="2026-08-23T02:11:13.836418" elapsed="0.007137">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:13.843941" elapsed="0.000025"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:13.844073" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:13.844036" elapsed="0.000078"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:13.844019" elapsed="0.000116"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:13.844274" elapsed="0.000020"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:11:13.844341" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:11:13.831332" elapsed="0.013114">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:13.844513" elapsed="0.000016"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:11:13.828859" elapsed="0.015749">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:13.844771" elapsed="0.000021"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:11:13.808597" elapsed="0.036297">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:14.861283" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:14.859154" elapsed="0.002162"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:14.862123" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:14.861700" elapsed="0.000450"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:11:14.861546" elapsed="0.000640"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:14.862732" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:14.862417" elapsed="0.000341"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:11:14.862269" elapsed="0.000524"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:11:14.861388" elapsed="0.001434"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:14.863175" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:14.862912" elapsed="0.000321"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:14.863966" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:14.863485" elapsed="0.000512"/>
</kw>
<status status="PASS" start="2026-08-23T02:11:14.863258" elapsed="0.000777"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:14.864222" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:14.864060" elapsed="0.000217"/>
</branch>
<status status="PASS" start="2026-08-23T02:11:14.862892" elapsed="0.001407"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:11:14.864338" elapsed="0.000039"/>
</return>
<msg time="2026-08-23T02:11:14.864501" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:11:14.858650" elapsed="0.005877"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:11:14.864573" elapsed="0.000025"/>
</return>
<msg time="2026-08-23T02:11:14.864713" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:11:14.858076" elapsed="0.006663"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:14.872170" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:14.871911" elapsed="0.000306"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:14.872608" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:14.872366" elapsed="0.000285"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:11:14.878596" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:14.878653" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:11:14.878766" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:11:14.874778" elapsed="0.004402">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:11:14.872717" elapsed="0.006547">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:14.879450" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:14.879298" elapsed="0.000217"/>
</branch>
<status status="FAIL" start="2026-08-23T02:11:14.872699" elapsed="0.006840">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:14.879989" elapsed="0.000027"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:14.880124" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:14.880087" elapsed="0.000079"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:14.880069" elapsed="0.000119"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:14.880330" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:11:14.880400" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:11:14.867613" elapsed="0.012894">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:14.880577" elapsed="0.000016"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:11:14.864974" elapsed="0.015699">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:14.880855" elapsed="0.000023"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:11:14.846022" elapsed="0.034944">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:15.899278" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:15.895827" elapsed="0.003485"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:15.900035" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:15.899689" elapsed="0.000373"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:11:15.899531" elapsed="0.000568"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:15.900653" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:15.900332" elapsed="0.000348"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:11:15.900182" elapsed="0.000534"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:11:15.899385" elapsed="0.001360"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:15.901105" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:15.900819" elapsed="0.000343"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:15.901903" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:15.901417" elapsed="0.000515"/>
</kw>
<status status="PASS" start="2026-08-23T02:11:15.901188" elapsed="0.000780"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:15.902170" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:15.902006" elapsed="0.000220"/>
</branch>
<status status="PASS" start="2026-08-23T02:11:15.900798" elapsed="0.001449"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:11:15.902287" elapsed="0.000037"/>
</return>
<msg time="2026-08-23T02:11:15.902449" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:11:15.895168" elapsed="0.007307"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:11:15.902523" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:11:15.902664" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:11:15.894352" elapsed="0.008337"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:15.910038" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:15.909742" elapsed="0.000416"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:15.910557" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:15.910311" elapsed="0.000290"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:11:15.916729" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:15.916794" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:11:15.916927" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:11:15.912717" elapsed="0.004623">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:11:15.910667" elapsed="0.006754">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:15.917607" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:15.917455" elapsed="0.000218"/>
</branch>
<status status="FAIL" start="2026-08-23T02:11:15.910649" elapsed="0.007047">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:15.918096" elapsed="0.000027"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:15.918233" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:15.918195" elapsed="0.000080"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:15.918178" elapsed="0.000119"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:15.918436" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:11:15.918505" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:11:15.905363" elapsed="0.013247">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:15.918680" elapsed="0.000015"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:11:15.902926" elapsed="0.015848">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:15.918959" elapsed="0.000024"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:11:15.881747" elapsed="0.037323">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:16.935123" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:16.932854" elapsed="0.002302"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:16.935861" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:16.935521" elapsed="0.000368"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:11:16.935367" elapsed="0.000558"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:16.936550" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:16.936231" elapsed="0.000345"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:11:16.936081" elapsed="0.000530"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:11:16.935224" elapsed="0.001417"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:16.936998" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:16.936714" elapsed="0.000354"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:16.937788" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:16.937321" elapsed="0.000495"/>
</kw>
<status status="PASS" start="2026-08-23T02:11:16.937092" elapsed="0.000776"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:16.938060" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:16.937894" elapsed="0.000222"/>
</branch>
<status status="PASS" start="2026-08-23T02:11:16.936693" elapsed="0.001444"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:11:16.938176" elapsed="0.000036"/>
</return>
<msg time="2026-08-23T02:11:16.938336" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:11:16.932362" elapsed="0.006001"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:11:16.938411" elapsed="0.000025"/>
</return>
<msg time="2026-08-23T02:11:16.938581" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:11:16.931779" elapsed="0.006829"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:16.945780" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:16.945523" elapsed="0.000304"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:16.946234" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:16.945993" elapsed="0.000285"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:11:16.952375" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:16.952433" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:11:16.952545" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:11:16.948396" elapsed="0.004563">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:11:16.946342" elapsed="0.006705">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:16.953230" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:16.953080" elapsed="0.000213"/>
</branch>
<status status="FAIL" start="2026-08-23T02:11:16.946324" elapsed="0.006992">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:16.953682" elapsed="0.000025"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:16.953864" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:16.953810" elapsed="0.000098"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:16.953792" elapsed="0.000138"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:16.954070" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:11:16.954140" elapsed="0.000014"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:11:16.941278" elapsed="0.012967">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:16.954314" elapsed="0.000016"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:11:16.938829" elapsed="0.015581">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:16.954602" elapsed="0.000022"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:11:16.919904" elapsed="0.034809">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:17.971354" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:17.969207" elapsed="0.002179"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:17.972102" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:17.971760" elapsed="0.000369"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:11:17.971600" elapsed="0.000564"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:17.972716" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:17.972396" elapsed="0.000347"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:11:17.972246" elapsed="0.000531"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:11:17.971455" elapsed="0.001352"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:17.973165" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:17.972897" elapsed="0.000325"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:17.973957" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:17.973476" elapsed="0.000509"/>
</kw>
<status status="PASS" start="2026-08-23T02:11:17.973248" elapsed="0.000772"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:17.974204" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:17.974045" elapsed="0.000215"/>
</branch>
<status status="PASS" start="2026-08-23T02:11:17.972875" elapsed="0.001405"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:11:17.974318" elapsed="0.000037"/>
</return>
<msg time="2026-08-23T02:11:17.974478" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:11:17.968722" elapsed="0.005782"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:11:17.974551" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:11:17.974693" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:11:17.968157" elapsed="0.006561"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:17.981968" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:17.981694" elapsed="0.000322"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:17.982412" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:17.982171" elapsed="0.000283"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:11:17.988687" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:17.988744" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:11:17.988877" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:11:17.984755" elapsed="0.004601">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:11:17.982590" elapsed="0.006880">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:17.989730" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:17.989518" elapsed="0.000304"/>
</branch>
<status status="FAIL" start="2026-08-23T02:11:17.982571" elapsed="0.007308">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:17.990395" elapsed="0.000037"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:17.990583" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:17.990530" elapsed="0.000113"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:17.990506" elapsed="0.000167"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:17.990890" elapsed="0.000031"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:11:17.990990" elapsed="0.000021"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:11:17.977403" elapsed="0.013756">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:17.991257" elapsed="0.000022"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:11:17.974952" elapsed="0.016437">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:17.991620" elapsed="0.000030"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:11:17.955572" elapsed="0.036198">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:19.007637" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:19.005445" elapsed="0.002226"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:19.008383" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:19.008058" elapsed="0.000351"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:11:19.007901" elapsed="0.000544"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:19.009010" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:19.008674" elapsed="0.000362"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:11:19.008525" elapsed="0.000757"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:11:19.007740" elapsed="0.001576"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:19.009658" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:19.009391" elapsed="0.000325"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:19.010456" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:19.009987" elapsed="0.000496"/>
</kw>
<status status="PASS" start="2026-08-23T02:11:19.009741" elapsed="0.000778"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:19.010707" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:19.010544" elapsed="0.000219"/>
</branch>
<status status="PASS" start="2026-08-23T02:11:19.009370" elapsed="0.001414"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:11:19.010822" elapsed="0.000051"/>
</return>
<msg time="2026-08-23T02:11:19.010998" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:11:19.004965" elapsed="0.006060"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:11:19.011072" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T02:11:19.011220" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:11:19.004379" elapsed="0.006866"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:19.020182" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:19.019917" elapsed="0.000312"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:19.020621" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:19.020379" elapsed="0.000285"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:11:19.026565" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:19.026621" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:11:19.026738" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:11:19.022778" elapsed="0.004364">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:11:19.020728" elapsed="0.006496">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:19.027409" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:19.027258" elapsed="0.000215"/>
</branch>
<status status="FAIL" start="2026-08-23T02:11:19.020710" elapsed="0.006786">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:19.027895" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:19.028027" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:19.027991" elapsed="0.000139"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:19.027973" elapsed="0.000191"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:19.028360" elapsed="0.000029"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:11:19.028456" elapsed="0.000021"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:11:19.015534" elapsed="0.013068">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:19.028699" elapsed="0.000021"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:11:19.011466" elapsed="0.017384">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:19.029088" elapsed="0.000030"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:11:18.992643" elapsed="0.036595">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:20.047997" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:20.045500" elapsed="0.002535"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:20.048767" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:20.048442" elapsed="0.000352"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:11:20.048285" elapsed="0.000545"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:20.049406" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:20.049081" elapsed="0.000353"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:11:20.048929" elapsed="0.000542"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:11:20.048110" elapsed="0.001391"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:20.049851" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:20.049572" elapsed="0.000338"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:20.050634" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:20.050166" elapsed="0.000497"/>
</kw>
<status status="PASS" start="2026-08-23T02:11:20.049935" elapsed="0.000764"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:20.050903" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:20.050724" elapsed="0.000236"/>
</branch>
<status status="PASS" start="2026-08-23T02:11:20.049551" elapsed="0.001430"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:11:20.051020" elapsed="0.000035"/>
</return>
<msg time="2026-08-23T02:11:20.051185" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:11:20.044999" elapsed="0.006213"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:11:20.051259" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:11:20.051401" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:11:20.044413" elapsed="0.007014"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:20.058716" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:20.058461" elapsed="0.000303"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:20.059200" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:20.058928" elapsed="0.000317"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:11:20.065448" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:20.065533" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:11:20.065702" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:11:20.061379" elapsed="0.004948">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:11:20.059313" elapsed="0.007139">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:20.066730" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:20.066503" elapsed="0.000325"/>
</branch>
<status status="FAIL" start="2026-08-23T02:11:20.059294" elapsed="0.007592">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:20.067459" elapsed="0.000040"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:20.067664" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:20.067605" elapsed="0.000122"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:20.067579" elapsed="0.000181"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:20.067992" elapsed="0.000033"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:11:20.068099" elapsed="0.000022"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:11:20.054137" elapsed="0.014161">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:20.068407" elapsed="0.000023"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:11:20.051648" elapsed="0.016900">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:20.068793" elapsed="0.000032"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:11:20.030545" elapsed="0.038432">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:21.085098" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:21.082941" elapsed="0.002190"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:21.085829" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:21.085503" elapsed="0.000368"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:11:21.085347" elapsed="0.000560"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:21.086467" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:21.086145" elapsed="0.000349"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:11:21.085991" elapsed="0.000539"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:11:21.085201" elapsed="0.001450"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:21.087011" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:21.086731" elapsed="0.000338"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:21.087794" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:21.087327" elapsed="0.000496"/>
</kw>
<status status="PASS" start="2026-08-23T02:11:21.087094" elapsed="0.000779"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:21.088061" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:21.087899" elapsed="0.000217"/>
</branch>
<status status="PASS" start="2026-08-23T02:11:21.086709" elapsed="0.001428"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:11:21.088174" elapsed="0.000036"/>
</return>
<msg time="2026-08-23T02:11:21.088334" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:11:21.082450" elapsed="0.005911"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:11:21.088408" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:11:21.088550" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:11:21.081850" elapsed="0.006725"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:21.095880" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:21.095604" elapsed="0.000323"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:21.096321" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:21.096078" elapsed="0.000286"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:11:21.104415" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:21.104478" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:11:21.104604" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:11:21.098586" elapsed="0.006481">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:11:21.096429" elapsed="0.008760">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:21.105460" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:21.105240" elapsed="0.000311"/>
</branch>
<status status="FAIL" start="2026-08-23T02:11:21.096411" elapsed="0.009173">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:21.106135" elapsed="0.000038"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:21.106324" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:21.106271" elapsed="0.000114"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:21.106246" elapsed="0.000169"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:21.106611" elapsed="0.000030"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:11:21.106773" elapsed="0.000023"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:11:21.091286" elapsed="0.015662">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:21.107047" elapsed="0.000023"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:11:21.088820" elapsed="0.018369">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:21.107421" elapsed="0.000029"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:11:21.069793" elapsed="0.037779">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:22.123101" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:22.120696" elapsed="0.002440"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:22.123852" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:22.123509" elapsed="0.000372"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:11:22.123353" elapsed="0.000564"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:22.124476" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:22.124151" elapsed="0.000352"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:11:22.124000" elapsed="0.000539"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:11:22.123206" elapsed="0.001363"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:22.124921" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:22.124642" elapsed="0.000340"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:22.125742" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:22.125265" elapsed="0.000507"/>
</kw>
<status status="PASS" start="2026-08-23T02:11:22.125008" elapsed="0.000801"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:22.126017" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:22.125850" elapsed="0.000225"/>
</branch>
<status status="PASS" start="2026-08-23T02:11:22.124621" elapsed="0.001474"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:11:22.126133" elapsed="0.000034"/>
</return>
<msg time="2026-08-23T02:11:22.126317" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:11:22.120221" elapsed="0.006123"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:11:22.126394" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:11:22.126539" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:11:22.119637" elapsed="0.006927"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:22.134037" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:22.133759" elapsed="0.000325"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:22.134479" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:22.134236" elapsed="0.000286"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:11:22.140909" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:22.141049" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:11:22.141168" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:11:22.136618" elapsed="0.004966">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:11:22.134588" elapsed="0.007079">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:22.141875" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:22.141702" elapsed="0.000240"/>
</branch>
<status status="FAIL" start="2026-08-23T02:11:22.134569" elapsed="0.007398">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:22.142435" elapsed="0.000036"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:22.142624" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:22.142570" elapsed="0.000115"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:22.142545" elapsed="0.000171"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:22.142937" elapsed="0.000031"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:11:22.143039" elapsed="0.000022"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:11:22.129295" elapsed="0.013894">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:22.143288" elapsed="0.000022"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:11:22.126785" elapsed="0.016639">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:22.143656" elapsed="0.000030"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:11:22.108438" elapsed="0.035370">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:23.161689" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:23.159532" elapsed="0.002190"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:23.162448" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:23.162121" elapsed="0.000354"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:11:23.161964" elapsed="0.000547"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:23.163085" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:23.162749" elapsed="0.000363"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:11:23.162595" elapsed="0.000552"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:11:23.161803" elapsed="0.001374"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:23.163514" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:23.163252" elapsed="0.000396"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:23.164408" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:23.163929" elapsed="0.000509"/>
</kw>
<status status="PASS" start="2026-08-23T02:11:23.163676" elapsed="0.000797"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:23.164663" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:23.164499" elapsed="0.000220"/>
</branch>
<status status="PASS" start="2026-08-23T02:11:23.163230" elapsed="0.001510"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:11:23.164779" elapsed="0.000038"/>
</return>
<msg time="2026-08-23T02:11:23.164959" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:11:23.159047" elapsed="0.005939"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:11:23.165034" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:11:23.165177" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:11:23.158421" elapsed="0.006782"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:23.172470" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:23.172213" elapsed="0.000305"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:23.172926" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:23.172668" elapsed="0.000302"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:11:23.178929" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:23.178988" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:11:23.179109" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:11:23.175091" elapsed="0.004427">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:11:23.173035" elapsed="0.006568">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:23.179789" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:23.179638" elapsed="0.000232"/>
</branch>
<status status="FAIL" start="2026-08-23T02:11:23.173017" elapsed="0.006877">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:23.180265" elapsed="0.000025"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:23.180395" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:23.180358" elapsed="0.000078"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:23.180341" elapsed="0.000116"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:23.180598" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:11:23.180666" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:11:23.167893" elapsed="0.012880">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:23.180901" elapsed="0.000018"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:11:23.165427" elapsed="0.015576">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:23.181168" elapsed="0.000021"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:11:23.144656" elapsed="0.036621">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:24.198397" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:24.196246" elapsed="0.002183"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:24.199138" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:24.198796" elapsed="0.000370"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:11:24.198639" elapsed="0.000563"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:24.199748" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:24.199432" elapsed="0.000342"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:11:24.199284" elapsed="0.000525"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:11:24.198496" elapsed="0.001357"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:24.200189" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:24.199928" elapsed="0.000326"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:24.200997" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:24.200508" elapsed="0.000519"/>
</kw>
<status status="PASS" start="2026-08-23T02:11:24.200279" elapsed="0.000784"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:24.201251" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:24.201088" elapsed="0.000220"/>
</branch>
<status status="PASS" start="2026-08-23T02:11:24.199907" elapsed="0.001422"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:11:24.201366" elapsed="0.000034"/>
</return>
<msg time="2026-08-23T02:11:24.201524" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:11:24.195751" elapsed="0.005800"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:11:24.201597" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:11:24.201741" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:11:24.195070" elapsed="0.006698"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:24.209023" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:24.208750" elapsed="0.000321"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:24.209461" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:24.209221" elapsed="0.000283"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:11:24.215557" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:24.215614" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:11:24.215786" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:11:24.211627" elapsed="0.004564">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:11:24.209569" elapsed="0.006704">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:24.216461" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:24.216308" elapsed="0.000220"/>
</branch>
<status status="FAIL" start="2026-08-23T02:11:24.209551" elapsed="0.007006">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:24.216955" elapsed="0.000027"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:24.217091" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:24.217053" elapsed="0.000080"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:24.217035" elapsed="0.000119"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:24.217300" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:11:24.217369" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:11:24.204465" elapsed="0.013009">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:24.217543" elapsed="0.000016"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:11:24.202004" elapsed="0.015634">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:24.217803" elapsed="0.000021"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:11:24.182091" elapsed="0.035838">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:25.235537" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:25.233314" elapsed="0.002260"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:25.236305" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:25.235978" elapsed="0.000354"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:11:25.235805" elapsed="0.000564"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:25.236968" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:25.236602" elapsed="0.000393"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:11:25.236454" elapsed="0.000577"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:11:25.235650" elapsed="0.001410"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:25.237413" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:25.237142" elapsed="0.000328"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:25.238253" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:25.237741" elapsed="0.000540"/>
</kw>
<status status="PASS" start="2026-08-23T02:11:25.237497" elapsed="0.000820"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:25.238503" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:25.238343" elapsed="0.000302"/>
</branch>
<status status="PASS" start="2026-08-23T02:11:25.237119" elapsed="0.001550"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:11:25.238713" elapsed="0.000043"/>
</return>
<msg time="2026-08-23T02:11:25.238929" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:11:25.232631" elapsed="0.006325"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:11:25.239005" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:11:25.239150" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:11:25.231981" elapsed="0.007195"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:25.246632" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:25.246368" elapsed="0.000311"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:25.247111" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:25.246830" elapsed="0.000326"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:11:25.253477" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:25.253537" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:11:25.253660" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:11:25.249281" elapsed="0.004818">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:11:25.247222" elapsed="0.006963">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:25.254379" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:25.254222" elapsed="0.000222"/>
</branch>
<status status="FAIL" start="2026-08-23T02:11:25.247203" elapsed="0.007265">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:25.254898" elapsed="0.000028"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:25.255046" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:25.255007" elapsed="0.000082"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:25.254989" elapsed="0.000121"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:25.255251" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:11:25.255320" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:11:25.241881" elapsed="0.013548">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:25.255499" elapsed="0.000015"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:11:25.239405" elapsed="0.016219">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:25.255987" elapsed="0.000033"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:11:25.218744" elapsed="0.037410">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:26.273986" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:26.271644" elapsed="0.002375"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:26.274720" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:26.274390" elapsed="0.000358"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:11:26.274229" elapsed="0.000556"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:26.275356" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:26.275034" elapsed="0.000378"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:11:26.274884" elapsed="0.000566"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:11:26.274086" elapsed="0.001394"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:26.275816" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:26.275551" elapsed="0.000340"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:26.276617" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:26.276147" elapsed="0.000498"/>
</kw>
<status status="PASS" start="2026-08-23T02:11:26.275916" elapsed="0.000765"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:26.276883" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:26.276707" elapsed="0.000233"/>
</branch>
<status status="PASS" start="2026-08-23T02:11:26.275531" elapsed="0.001430"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:11:26.276998" elapsed="0.000035"/>
</return>
<msg time="2026-08-23T02:11:26.277158" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:11:26.270829" elapsed="0.006356"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:11:26.277232" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:11:26.277378" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:11:26.269921" elapsed="0.007484"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:26.284680" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:26.284415" elapsed="0.000312"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:26.285136" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:26.284891" elapsed="0.000289"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:11:26.291463" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:26.291521" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:11:26.291638" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:11:26.287290" elapsed="0.004761">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:11:26.285248" elapsed="0.006953">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:26.292393" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:26.292238" elapsed="0.000220"/>
</branch>
<status status="FAIL" start="2026-08-23T02:11:26.285229" elapsed="0.007253">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:26.292894" elapsed="0.000028"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:26.293035" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:26.292994" elapsed="0.000084"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:26.292976" elapsed="0.000124"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:26.293243" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:11:26.293318" elapsed="0.000017"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:11:26.280109" elapsed="0.013321">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:26.293501" elapsed="0.000016"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:11:26.277634" elapsed="0.015964">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:26.293762" elapsed="0.000022"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:11:26.256977" elapsed="0.036913">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:27.311231" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:27.309085" elapsed="0.002179"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:27.311987" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:27.311633" elapsed="0.000381"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:11:27.311479" elapsed="0.000571"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:27.312604" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:27.312282" elapsed="0.000349"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:11:27.312131" elapsed="0.000534"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:11:27.311333" elapsed="0.001361"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:27.313047" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:27.312767" elapsed="0.000337"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:27.313825" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:27.313358" elapsed="0.000511"/>
</kw>
<status status="PASS" start="2026-08-23T02:11:27.313130" elapsed="0.000775"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:27.314091" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:27.313930" elapsed="0.000216"/>
</branch>
<status status="PASS" start="2026-08-23T02:11:27.312746" elapsed="0.001420"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:11:27.314203" elapsed="0.000038"/>
</return>
<msg time="2026-08-23T02:11:27.314365" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:11:27.308594" elapsed="0.005866"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:11:27.314509" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:11:27.314656" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:11:27.308016" elapsed="0.006667"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:27.321981" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:27.321699" elapsed="0.000331"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:27.322429" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:27.322183" elapsed="0.000292"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:11:27.329076" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:27.329141" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:11:27.329253" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:11:27.324674" elapsed="0.004968">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:11:27.322542" elapsed="0.007180">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:27.329924" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:27.329757" elapsed="0.000234"/>
</branch>
<status status="FAIL" start="2026-08-23T02:11:27.322523" elapsed="0.007492">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:27.330388" elapsed="0.000027"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:27.330523" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:27.330485" elapsed="0.000080"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:27.330468" elapsed="0.000119"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:27.330726" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:11:27.330795" elapsed="0.000014"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:11:27.317386" elapsed="0.013532">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:27.330989" elapsed="0.000016"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:11:27.314920" elapsed="0.016164">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:27.331248" elapsed="0.000022"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:11:27.294745" elapsed="0.036655">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<msg time="2026-08-23T02:11:27.331499" level="FAIL">Keyword 'Check_Device_Connected' failed after retrying for 20 seconds. The last error was: HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${timeout}</arg>
<arg>${period}</arg>
<arg>Check_Device_Connected</arg>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-08-23T02:11:06.506351" elapsed="20.825242">Keyword 'Check_Device_Connected' failed after retrying for 20 seconds. The last error was: HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<arg>${device_name}</arg>
<doc>Wait for the device to become connected.
It is more readable to use this keyword in a test case than to put the whole WUKS below into it.</doc>
<status status="FAIL" start="2026-08-23T02:11:06.505945" elapsed="20.825758">Keyword 'Check_Device_Connected' failed after retrying for 20 seconds. The last error was: HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<doc>Wait until the device becomes available through Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:11:06.420175" elapsed="20.911719">Keyword 'Check_Device_Connected' failed after retrying for 20 seconds. The last error was: HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</test>
<test id="s1-s4-s2-t15" name="Check_Modified_Device_Data_Is_Still_There" line="119">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-08-23T02:11:27.336967" elapsed="0.000301"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:11:27.336568" elapsed="0.000776"/>
</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-08-23T02:11:27.338726" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:27.338572" elapsed="0.000221"/>
</branch>
<status status="PASS" start="2026-08-23T02:11:27.338545" elapsed="0.000279"/>
</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-08-23T02:11:27.344302" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:27.344194" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-23T02:11:27.344176" elapsed="0.000195"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:11:27.345382" 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-08-23T02:11:27.344979" elapsed="0.000436"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:11:27.345896" 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-08-23T02:11:27.345580" elapsed="0.000342"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:11:27.345968" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:11:27.346121" 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-08-23T02:11:27.344592" elapsed="0.001554"/>
</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-08-23T02:11:27.351536" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:27.351428" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T02:11:27.351409" 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-08-23T02:11:27.353081" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:27.352972" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-23T02:11:27.352953" elapsed="0.000196"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:11:27.353696" level="INFO">${karaf_connection_index} = 11</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-08-23T02:11:27.353290" elapsed="0.000433"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:11:27.354171" level="INFO">${current_connection_index} = 13</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-08-23T02:11:27.353896" elapsed="0.000301"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:11:27.384933" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:11:27.354912" elapsed="0.030229"/>
</kw>
<msg time="2026-08-23T02:11:27.385329" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:11:27.385375" 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 "n "e "t "c "o "n "f "...</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-08-23T02:11:27.354353" elapsed="0.031060"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:11:27.405953" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "h "e "c "k "_ "M "o "d "i "f "i "e "d "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "I "s "_ "S "t "i "l "l "_ "T "h "e "r "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-08-23T02:11:27.386054" elapsed="0.020098"/>
</kw>
<msg time="2026-08-23T02:11:27.406338" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:11:27.406384" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "h "e "c "k "_ "M "o "d "i "f "i "e "d "_ "D "e "v "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-08-23T02:11:27.385619" elapsed="0.020802"/>
</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-08-23T02:11:27.406724" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:27.406498" elapsed="0.000305"/>
</branch>
<status status="PASS" start="2026-08-23T02:11:27.406479" elapsed="0.000351"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:27.407406" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "h "e "c "k "_ "M "o "d "i "f "i "e "d "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "I "s "_ "S "t "i "l "l "_ "T "h "e "r "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-08-23T02:11:27.407006" elapsed="0.000474"/>
</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-08-23T02:11:27.407760" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:27.407547" elapsed="0.000308"/>
</branch>
<status status="PASS" start="2026-08-23T02:11:27.407529" elapsed="0.000353"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:11:27.407917" 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-08-23T02:11:27.411308" elapsed="0.000149"/>
</kw>
<msg time="2026-08-23T02:11:27.411533" 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-08-23T02:11:27.410576" elapsed="0.001064"/>
</kw>
<kw name="Open 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-08-23T02:11:27.412795" elapsed="0.000059"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:27.414195" elapsed="0.000039"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:11:27.408812" elapsed="0.005504"/>
</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-08-23T02:11:27.408212" elapsed="0.006232"/>
</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-08-23T02:11:27.352644" elapsed="0.061899"/>
</kw>
<msg time="2026-08-23T02:11:27.414635" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:11:27.414678" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "h "e "c "k "_ "M "o "d "i "f "i "e "d "_ "D "e "v "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-08-23T02:11:27.351753" elapsed="0.062961"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:11:27.414913" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:11:27.414789" elapsed="0.000183"/>
</branch>
<status status="PASS" start="2026-08-23T02:11:27.414771" 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-08-23T02:11:27.415398" 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-08-23T02:11:27.415724" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:11:27.415796" 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-08-23T02:11:27.351093" elapsed="0.064953"/>
</kw>
<msg time="2026-08-23T02:11:27.416141" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:11:27.416185" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "h "e "c "k "_ "M "o "d "i "f "i "e "d "_ "D "e "v "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-08-23T02:11:27.346499" elapsed="0.069723"/>
</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-08-23T02:11:27.416542" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:27.416297" elapsed="0.000298"/>
</branch>
<status status="PASS" start="2026-08-23T02:11:27.416279" elapsed="0.000378"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:11:27.346361" elapsed="0.070322"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:11:27.346196" elapsed="0.070518"/>
</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-08-23T02:11:27.343805" elapsed="0.072963"/>
</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-08-23T02:11:27.338173" elapsed="0.078650"/>
</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-08-23T02:11:27.337555" elapsed="0.079331"/>
</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-08-23T02:11:27.333382" elapsed="0.083557"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:27.418681" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:27.418301" elapsed="0.000408"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:27.426051" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:27.425786" elapsed="0.000313"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:27.426499" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:27.426252" elapsed="0.000292"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:11:27.432336" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:27.432400" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:27.432530" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:11:27.428660" elapsed="0.004380">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:11:27.426611" elapsed="0.006542">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:27.433416" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:27.433201" elapsed="0.000306"/>
</branch>
<status status="FAIL" start="2026-08-23T02:11:27.426593" elapsed="0.006947">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:27.434062" elapsed="0.000036"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:27.434247" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:27.434195" elapsed="0.000112"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:27.434171" elapsed="0.000166"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:27.434532" elapsed="0.000030"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:11:27.434630" elapsed="0.000020"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:11:27.421468" elapsed="0.013307">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:27.434896" elapsed="0.000023"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:11:27.418937" elapsed="0.016094">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:11:27.435151" elapsed="0.000023"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:11:27.418039" elapsed="0.017248">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:27.435596" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:27.435391" elapsed="0.000283"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:27.435924" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:27.435708" elapsed="0.000314"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:27.436249" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:27.436058" elapsed="0.000273"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:27.435367" elapsed="0.000993"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:11:27.417618" elapsed="0.018852">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:28.440069" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:28.439093" elapsed="0.001047"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:28.454123" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:28.453830" elapsed="0.000357"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:28.454588" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:28.454342" elapsed="0.000291"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:11:28.460654" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:28.460704" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:28.460814" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:11:28.456983" elapsed="0.004233">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:11:28.454707" elapsed="0.006593">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:28.461494" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:28.461341" elapsed="0.000219"/>
</branch>
<status status="FAIL" start="2026-08-23T02:11:28.454685" elapsed="0.006898">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:28.461967" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:28.462110" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:28.462063" elapsed="0.000092"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:28.462046" elapsed="0.000131"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:28.462321" elapsed="0.000024"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:11:28.462393" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:11:28.449339" elapsed="0.013160">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:28.462631" elapsed="0.000017"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:11:28.440664" elapsed="0.022066">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:11:28.462792" elapsed="0.000019"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:11:28.438435" elapsed="0.024472">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:28.463129" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:28.462982" elapsed="0.000203"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:28.463349" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:28.463210" elapsed="0.000193"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:28.463561" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:28.463427" elapsed="0.000188"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:28.462965" elapsed="0.000672"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:11:28.437345" elapsed="0.026368">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:29.467422" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:29.466379" elapsed="0.001117"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:29.478384" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:29.478123" elapsed="0.000309"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:29.478828" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:29.478584" elapsed="0.000305"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:11:29.485131" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:29.485181" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:29.485287" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:11:29.481068" elapsed="0.004619">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:11:29.478973" elapsed="0.006797">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:29.485977" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:29.485808" elapsed="0.000235"/>
</branch>
<status status="FAIL" start="2026-08-23T02:11:29.478950" elapsed="0.007116">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:29.486441" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:29.486578" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:29.486537" elapsed="0.000087"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:29.486520" elapsed="0.000125"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:29.486786" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:11:29.486932" elapsed="0.000017"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:11:29.473727" elapsed="0.013316">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:29.487114" elapsed="0.000015"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:11:29.468052" elapsed="0.019159">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:11:29.487266" elapsed="0.000015"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:11:29.465650" elapsed="0.021710">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:29.487579" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:29.487433" elapsed="0.000203"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:29.487800" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:29.487660" elapsed="0.000210"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:29.488031" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:29.487895" elapsed="0.000191"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:29.487416" elapsed="0.000691"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:11:29.464491" elapsed="0.023695">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:30.491785" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:30.490792" elapsed="0.001094"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:30.503012" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:30.502735" elapsed="0.000327"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:30.503462" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:30.503214" elapsed="0.000293"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:11:30.509692" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:30.509746" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:30.509875" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:11:30.505673" elapsed="0.004597">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:11:30.503585" elapsed="0.006771">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:30.510554" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:30.510394" elapsed="0.000228"/>
</branch>
<status status="FAIL" start="2026-08-23T02:11:30.503560" elapsed="0.007087">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:30.511046" elapsed="0.000028"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:30.511252" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:30.511211" elapsed="0.000087"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:30.511191" elapsed="0.000128"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:30.511472" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:11:30.511545" elapsed="0.000016"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:11:30.498331" elapsed="0.013324">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:30.511729" elapsed="0.000016"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:11:30.492378" elapsed="0.019474">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:11:30.511912" elapsed="0.000016"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:11:30.490149" elapsed="0.021858">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:30.512247" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:30.512084" elapsed="0.000222"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:30.512490" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:30.512331" elapsed="0.000217"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:30.512711" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:30.512573" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:30.512066" elapsed="0.000724"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:11:30.489008" elapsed="0.023894">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:31.516460" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:31.515492" elapsed="0.001040"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:31.527697" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:31.527437" elapsed="0.000307"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:31.528160" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:31.527912" elapsed="0.000293"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:11:31.533946" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:31.533996" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:31.534100" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:11:31.530373" elapsed="0.004143">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:11:31.528282" elapsed="0.006322">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:31.534929" elapsed="0.000041"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:31.534657" elapsed="0.000448"/>
</branch>
<status status="FAIL" start="2026-08-23T02:11:31.528258" elapsed="0.006884">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:31.535713" elapsed="0.000036"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:31.535927" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:31.535867" elapsed="0.000122"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:31.535822" elapsed="0.000198"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:31.536216" elapsed="0.000029"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:11:31.536314" elapsed="0.000021"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:11:31.521490" elapsed="0.014991">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:31.536603" elapsed="0.000028"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:11:31.517051" elapsed="0.019699">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:11:31.536825" elapsed="0.000042"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:11:31.514854" elapsed="0.022124">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:31.537284" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:31.537080" elapsed="0.000283"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:31.537589" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:31.537396" elapsed="0.000268"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:31.537903" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:31.537697" elapsed="0.000283"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:31.537057" elapsed="0.000952"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:11:31.513700" elapsed="0.024431">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:32.541752" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:32.540784" elapsed="0.001039"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:32.553010" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:32.552609" elapsed="0.000471"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:32.553643" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:32.553299" elapsed="0.000407"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:11:32.560218" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:32.560268" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:32.560378" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:11:32.556503" elapsed="0.004269">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:11:32.553808" elapsed="0.007141">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:32.561141" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:32.560989" elapsed="0.000219"/>
</branch>
<status status="FAIL" start="2026-08-23T02:11:32.553777" elapsed="0.007455">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:32.561621" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:32.561759" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:32.561718" elapsed="0.000088"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:32.561700" elapsed="0.000128"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:32.561987" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:11:32.562059" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:11:32.546481" elapsed="0.015685">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:32.562237" elapsed="0.000016"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:11:32.542339" elapsed="0.019995">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:11:32.562389" elapsed="0.000015"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:11:32.540152" elapsed="0.022334">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:32.562779" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:32.562559" elapsed="0.000306"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:32.563038" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:32.562891" elapsed="0.000202"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:32.563251" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:32.563117" elapsed="0.000188"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:32.562543" elapsed="0.000783"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:11:32.539055" elapsed="0.024351">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:33.566938" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:33.565954" elapsed="0.001058"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:33.577266" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:33.577004" elapsed="0.000309"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:33.577712" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:33.577466" elapsed="0.000291"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:11:33.583976" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:33.584046" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:33.584267" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:11:33.579926" elapsed="0.004851">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:11:33.577849" elapsed="0.007066">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:33.585177" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:33.584967" elapsed="0.000303"/>
</branch>
<status status="FAIL" start="2026-08-23T02:11:33.577810" elapsed="0.007493">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:33.585818" elapsed="0.000057"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:33.586031" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:33.585976" elapsed="0.000117"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:33.585952" elapsed="0.000171"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:33.586319" elapsed="0.000030"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:11:33.586417" elapsed="0.000020"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:11:33.571285" elapsed="0.015279">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:33.586661" elapsed="0.000022"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:11:33.567587" elapsed="0.019209">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:11:33.586894" elapsed="0.000022"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:11:33.565263" elapsed="0.021762">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:33.587342" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:33.587126" elapsed="0.000294"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:33.587647" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:33.587454" elapsed="0.000268"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:33.587960" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:33.587755" elapsed="0.000284"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:33.587103" elapsed="0.000970"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:11:33.564226" elapsed="0.023957">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:34.591934" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:34.590895" elapsed="0.001114"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:34.602170" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:34.601905" elapsed="0.000314"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:34.602620" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:34.602372" elapsed="0.000293"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:11:34.608722" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:34.608867" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:34.608984" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:11:34.604859" elapsed="0.004527">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:11:34.602748" elapsed="0.006725">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:34.609749" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:34.609527" elapsed="0.000339"/>
</branch>
<status status="FAIL" start="2026-08-23T02:11:34.602720" elapsed="0.007184">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:34.610464" elapsed="0.000038"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:34.610668" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:34.610606" elapsed="0.000128"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:34.610580" elapsed="0.000185"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:34.610995" elapsed="0.000032"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:11:34.611100" elapsed="0.000022"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:11:34.597527" elapsed="0.013731">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:34.611360" elapsed="0.000023"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:11:34.592500" elapsed="0.019001">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:11:34.611578" elapsed="0.000021"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:11:34.590214" elapsed="0.021498">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:34.612095" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:34.611879" elapsed="0.000298"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:34.612416" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:34.612212" elapsed="0.000282"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:34.612721" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:34.612533" elapsed="0.000261"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:34.611853" elapsed="0.000970"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:11:34.589085" elapsed="0.023867">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:35.616573" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:35.615559" elapsed="0.001062"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:35.626367" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:35.626108" elapsed="0.000307"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:35.626808" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:35.626566" elapsed="0.000301"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:11:35.632934" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:35.632984" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:35.633091" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:11:35.629112" elapsed="0.004366">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:11:35.627018" elapsed="0.006563">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:35.633881" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:35.633642" elapsed="0.000332"/>
</branch>
<status status="FAIL" start="2026-08-23T02:11:35.626992" elapsed="0.007015">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:35.634517" elapsed="0.000035"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:35.634704" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:35.634649" elapsed="0.000118"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:35.634625" elapsed="0.000172"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:35.635011" elapsed="0.000031"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:11:35.635109" elapsed="0.000020"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:11:35.620643" elapsed="0.014611">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:35.635351" elapsed="0.000021"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:11:35.616952" elapsed="0.018530">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:11:35.635556" elapsed="0.000021"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:11:35.614932" elapsed="0.020752">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:35.636004" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:35.635783" elapsed="0.000300"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:35.636326" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:35.636117" elapsed="0.000285"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:35.636618" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:35.636435" elapsed="0.000257"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:35.635761" elapsed="0.000959"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:11:35.613807" elapsed="0.023020">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:36.640368" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:36.639398" elapsed="0.001041"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:36.651935" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:36.651555" elapsed="0.000447"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:36.652551" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:36.652213" elapsed="0.000398"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:11:36.658954" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:36.659004" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:36.659113" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:11:36.655145" elapsed="0.004363">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:11:36.652714" elapsed="0.006878">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:36.659784" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:36.659633" elapsed="0.000233"/>
</branch>
<status status="FAIL" start="2026-08-23T02:11:36.652683" elapsed="0.007209">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:36.660262" elapsed="0.000025"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:36.660397" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:36.660358" elapsed="0.000084"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:36.660340" elapsed="0.000123"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:36.660605" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:11:36.660675" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:11:36.645133" elapsed="0.015697">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:36.660920" elapsed="0.000016"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:11:36.641131" elapsed="0.019888">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:11:36.661073" elapsed="0.000015"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:11:36.638736" elapsed="0.022428">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:36.661381" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:36.661236" elapsed="0.000201"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:36.661620" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:36.661460" elapsed="0.000246"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:36.661947" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:36.661741" elapsed="0.000284"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:36.661219" elapsed="0.000834"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:11:36.637669" elapsed="0.024491">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:37.666647" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:37.665900" elapsed="0.000815"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:37.675674" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:37.675414" elapsed="0.000307"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:37.676140" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:37.675892" elapsed="0.000291"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:11:37.682159" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:37.682209" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:37.682320" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:11:37.678357" elapsed="0.004359">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:11:37.676263" elapsed="0.006538">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:37.683010" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:37.682856" elapsed="0.000220"/>
</branch>
<status status="FAIL" start="2026-08-23T02:11:37.676238" elapsed="0.006862">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:37.683469" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:37.683607" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:37.683565" elapsed="0.000086"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:37.683548" elapsed="0.000125"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:37.683813" elapsed="0.000035"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:11:37.683899" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:11:37.670904" elapsed="0.013102">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:37.684075" elapsed="0.000015"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:11:37.667117" elapsed="0.017052">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:11:37.684222" elapsed="0.000015"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:11:37.665156" elapsed="0.019157">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:37.684530" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:37.684384" elapsed="0.000203"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:37.684752" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:37.684614" elapsed="0.000192"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:37.684978" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:37.684829" elapsed="0.000262"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:37.684367" elapsed="0.000745"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:11:37.663746" elapsed="0.021444">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:38.688686" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:38.687727" elapsed="0.001045"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:38.700022" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:38.699745" elapsed="0.000325"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:38.700466" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:38.700220" elapsed="0.000290"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:11:38.706168" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:38.706218" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:38.706323" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:11:38.702669" elapsed="0.004104">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:11:38.700585" elapsed="0.006336">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:38.707197" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:38.706974" elapsed="0.000321"/>
</branch>
<status status="FAIL" start="2026-08-23T02:11:38.700563" elapsed="0.006767">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:38.707890" elapsed="0.000038"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:38.708090" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:38.708032" elapsed="0.000121"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:38.708007" elapsed="0.000178"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:38.708389" elapsed="0.000031"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:11:38.708492" elapsed="0.000021"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:11:38.693607" elapsed="0.015038">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:38.708748" elapsed="0.000023"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:11:38.689283" elapsed="0.019627">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:11:38.708990" elapsed="0.000022"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:11:38.687105" elapsed="0.022020">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:38.709443" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:38.709231" elapsed="0.000387"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:38.709902" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:38.709656" elapsed="0.000329"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:38.710221" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:38.710020" elapsed="0.000282"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:38.709207" elapsed="0.001125"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:11:38.686048" elapsed="0.024399">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:39.714150" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:39.713168" elapsed="0.001055"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:39.724181" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:39.723922" elapsed="0.000306"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:39.724623" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:39.724378" elapsed="0.000288"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:11:39.730666" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:39.730714" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:39.730823" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:11:39.726810" elapsed="0.004431">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:11:39.724748" elapsed="0.006576">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:39.731511" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:39.731361" elapsed="0.000215"/>
</branch>
<status status="FAIL" start="2026-08-23T02:11:39.724724" elapsed="0.006876">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:39.731985" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:39.732122" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:39.732082" elapsed="0.000085"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:39.732065" elapsed="0.000123"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:39.732328" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:11:39.732398" elapsed="0.000014"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:11:39.719625" elapsed="0.012878">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:39.732572" elapsed="0.000016"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:11:39.714744" elapsed="0.017926">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:11:39.732794" elapsed="0.000017"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:11:39.712502" elapsed="0.020406">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:39.733127" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:39.732982" elapsed="0.000201"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:39.733346" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:39.733206" elapsed="0.000195"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:39.733559" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:39.733425" elapsed="0.000189"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:39.732965" elapsed="0.000670"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:11:39.711388" elapsed="0.022325">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:40.737368" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:40.736382" elapsed="0.001057"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:40.750336" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:40.750074" elapsed="0.000310"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:40.750853" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:40.750535" elapsed="0.000366"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:11:40.757034" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:40.757083" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:40.757199" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:11:40.753139" elapsed="0.004458">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:11:40.751017" elapsed="0.006664">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:40.757885" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:40.757718" elapsed="0.000233"/>
</branch>
<status status="FAIL" start="2026-08-23T02:11:40.750991" elapsed="0.006983">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:40.758343" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:40.758482" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:40.758439" elapsed="0.000088"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:40.758423" elapsed="0.000126"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:40.758701" elapsed="0.000026"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:11:40.758786" elapsed="0.000018"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:11:40.745537" elapsed="0.013418">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:40.759093" elapsed="0.000018"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:11:40.737952" elapsed="0.021242">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:11:40.759248" elapsed="0.000015"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:11:40.735710" elapsed="0.023629">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:40.759573" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:40.759411" elapsed="0.000225"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:40.759906" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:40.759662" elapsed="0.000322"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:40.760205" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:40.760017" elapsed="0.000262"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:40.759394" elapsed="0.000915"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:11:40.734548" elapsed="0.025875">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:41.765103" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:41.763936" elapsed="0.001257"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:41.777535" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:41.777169" elapsed="0.000432"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:41.778038" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:41.777768" elapsed="0.000316"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:11:41.784690" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:41.784754" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:41.784926" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:11:41.780331" elapsed="0.005098">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:11:41.778178" elapsed="0.007352">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:41.785782" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:41.785580" elapsed="0.000290"/>
</branch>
<status status="FAIL" start="2026-08-23T02:11:41.778148" elapsed="0.007748">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:41.786409" elapsed="0.000031"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:41.786570" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:41.786521" elapsed="0.000099"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:41.786501" elapsed="0.000141"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:41.786986" elapsed="0.000024"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:11:41.787174" elapsed="0.000016"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:11:41.772289" elapsed="0.015022">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:41.787385" elapsed="0.000015"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:11:41.765740" elapsed="0.021779">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:11:41.787577" elapsed="0.000064"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:11:41.763131" elapsed="0.024597">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:41.787994" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:41.787819" elapsed="0.000233"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:41.788218" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:41.788076" elapsed="0.000198"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:41.788432" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:41.788297" elapsed="0.000190"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:41.787801" elapsed="0.000707"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:11:41.761635" elapsed="0.026953">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:42.792628" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:42.791559" elapsed="0.001146"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:42.803634" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:42.803363" elapsed="0.000323"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:42.804115" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:42.803851" elapsed="0.000312"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:11:42.810510" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:42.810563" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:42.810691" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:11:42.806369" elapsed="0.004802">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:11:42.804247" elapsed="0.007011">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:42.811449" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:42.811297" elapsed="0.000218"/>
</branch>
<status status="FAIL" start="2026-08-23T02:11:42.804222" elapsed="0.007316">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:42.811957" elapsed="0.000042"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:42.812270" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:42.812226" elapsed="0.000091"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:42.812206" elapsed="0.000134"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:42.812489" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:11:42.812560" elapsed="0.000016"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:11:42.798927" elapsed="0.013743">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:42.812741" elapsed="0.000017"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:11:42.793239" elapsed="0.019619">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:11:42.812917" elapsed="0.000016"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:11:42.790876" elapsed="0.022139">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:42.813244" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:42.813091" elapsed="0.000210"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:42.813470" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:42.813326" elapsed="0.000200"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:42.813695" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:42.813551" elapsed="0.000199"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:42.813073" elapsed="0.000698"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:11:42.789612" elapsed="0.024260">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:43.818048" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:43.816923" elapsed="0.001204"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:43.829812" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:43.829542" elapsed="0.000334"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:43.830279" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:43.830029" elapsed="0.000295"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:11:43.836806" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:43.836879" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:43.837005" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:11:43.832575" elapsed="0.004901">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:11:43.830407" elapsed="0.007155">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:43.837764" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:43.837603" elapsed="0.000354"/>
</branch>
<status status="FAIL" start="2026-08-23T02:11:43.830380" elapsed="0.007606">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:43.838375" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:43.838515" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:43.838472" elapsed="0.000090"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:43.838455" elapsed="0.000129"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:43.838729" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:11:43.838799" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:11:43.824676" elapsed="0.014250">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:43.838999" elapsed="0.000016"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:11:43.818637" elapsed="0.020459">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:11:43.839151" elapsed="0.000015"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:11:43.816161" elapsed="0.023083">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:43.839468" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:43.839318" elapsed="0.000206"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:43.839693" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:43.839548" elapsed="0.000200"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:43.839921" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:43.839772" elapsed="0.000205"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:43.839302" elapsed="0.000696"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:11:43.814949" elapsed="0.025128">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:44.844499" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:44.843301" elapsed="0.001286"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:44.855732" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:44.855427" elapsed="0.000365"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:44.856254" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:44.855982" elapsed="0.000322"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:11:44.863058" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:44.863112" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:44.863270" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:11:44.858625" elapsed="0.005253">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:11:44.856399" elapsed="0.007716">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:44.864334" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:44.864164" elapsed="0.000240"/>
</branch>
<status status="FAIL" start="2026-08-23T02:11:44.856367" elapsed="0.008064">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:44.864896" elapsed="0.000030"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:44.865087" elapsed="0.000025"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:44.865005" elapsed="0.000143"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:44.864986" elapsed="0.000189"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:44.865336" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:11:44.865409" elapsed="0.000016"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:11:44.850987" elapsed="0.014544">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:44.865604" elapsed="0.000016"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:11:44.845667" elapsed="0.020058">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:11:44.865802" elapsed="0.000021"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:11:44.842551" elapsed="0.023414">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:44.866282" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:44.866068" elapsed="0.000293"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:44.866590" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:44.866395" elapsed="0.000272"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:44.866914" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:44.866700" elapsed="0.000293"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:44.866045" elapsed="0.000978"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:11:44.841241" elapsed="0.025893">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:45.871286" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:45.870227" elapsed="0.001138"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:45.883061" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:45.882773" elapsed="0.000337"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:45.883515" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:45.883265" elapsed="0.000295"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:11:45.890108" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:45.890161" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:45.890402" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:11:45.885801" elapsed="0.005091">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:11:45.883643" elapsed="0.007339">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:45.891174" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:45.891020" elapsed="0.000221"/>
</branch>
<status status="FAIL" start="2026-08-23T02:11:45.883616" elapsed="0.007648">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:45.891646" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:45.891793" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:45.891749" elapsed="0.000108"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:45.891731" elapsed="0.000150"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:45.892026" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:11:45.892097" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:11:45.878072" elapsed="0.014136">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:45.892277" elapsed="0.000016"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:11:45.871896" elapsed="0.020479">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:11:45.892429" elapsed="0.000015"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:11:45.869467" elapsed="0.023055">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:45.892759" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:45.892594" elapsed="0.000222"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:45.893002" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:45.892860" elapsed="0.000197"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:45.893213" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:45.893080" elapsed="0.000188"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:45.892578" elapsed="0.000710"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:11:45.868246" elapsed="0.025120">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:46.897952" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:46.896765" elapsed="0.001278"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:46.909009" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:46.908706" elapsed="0.000353"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:46.909470" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:46.909214" elapsed="0.000301"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:11:46.917294" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:46.918066" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:46.918254" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:11:46.911986" elapsed="0.006775">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:11:46.909617" elapsed="0.009264">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:46.919123" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:46.918927" elapsed="0.000267"/>
</branch>
<status status="FAIL" start="2026-08-23T02:11:46.909580" elapsed="0.009640">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:46.919660" elapsed="0.000027"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:46.919812" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:46.919764" elapsed="0.000114"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:46.919746" elapsed="0.000154"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:46.920050" elapsed="0.000029"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:11:46.920141" elapsed="0.000017"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:11:46.904182" elapsed="0.016081">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:46.920335" elapsed="0.000017"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:11:46.898586" elapsed="0.021850">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:11:46.920491" elapsed="0.000015"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:11:46.896032" elapsed="0.024557">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:46.920819" elapsed="0.000038"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:46.920664" elapsed="0.000231"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:46.921074" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:46.920919" elapsed="0.000214"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:46.921295" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:46.921157" elapsed="0.000194"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:46.920647" elapsed="0.000724"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:11:46.894608" elapsed="0.026844">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:47.926917" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:47.925606" elapsed="0.001410"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:47.937682" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:47.937405" elapsed="0.000326"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:47.938153" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:47.937900" elapsed="0.000297"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:11:47.945090" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:47.945144" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:47.945304" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:11:47.940640" elapsed="0.005255">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:11:47.938469" elapsed="0.007528">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:47.946196" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:47.946044" elapsed="0.000217"/>
</branch>
<status status="FAIL" start="2026-08-23T02:11:47.938431" elapsed="0.007855">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:47.946719" elapsed="0.000027"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:47.946889" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:47.946826" elapsed="0.000117"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:47.946808" elapsed="0.000157"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:47.947113" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:11:47.947183" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:11:47.932974" elapsed="0.014329">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:47.947374" elapsed="0.000015"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:11:47.927654" elapsed="0.019814">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:11:47.947521" elapsed="0.000015"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:11:47.924758" elapsed="0.022854">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:47.947900" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:47.947685" elapsed="0.000295"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:47.948206" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:47.948012" elapsed="0.000268"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:47.948496" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:47.948312" elapsed="0.000257"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:47.947668" elapsed="0.000928"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:11:47.923245" elapsed="0.025459">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:48.952861" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:48.951783" elapsed="0.001160"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:48.964361" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:48.964092" elapsed="0.000317"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:48.964807" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:48.964560" elapsed="0.000313"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:11:48.971532" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:48.971584" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:48.971727" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:11:48.967063" elapsed="0.005148">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:11:48.964957" elapsed="0.007345">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:48.972493" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:48.972341" elapsed="0.000218"/>
</branch>
<status status="FAIL" start="2026-08-23T02:11:48.964931" elapsed="0.007652">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:48.972976" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:48.973116" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:48.973074" elapsed="0.000089"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:48.973057" elapsed="0.000127"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:48.973327" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:11:48.973397" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:11:48.959640" elapsed="0.013866">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:48.973576" elapsed="0.000016"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:11:48.953620" elapsed="0.020052">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:11:48.973727" elapsed="0.000015"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:11:48.951039" elapsed="0.022781">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:48.974057" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:48.973911" elapsed="0.000202"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:48.974276" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:48.974136" elapsed="0.000194"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:48.974487" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:48.974353" elapsed="0.000188"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:48.973894" elapsed="0.000667"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:11:48.949764" elapsed="0.024874">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:49.978736" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:49.977696" elapsed="0.001119"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:49.989906" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:49.989618" elapsed="0.000338"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:49.990360" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:49.990109" elapsed="0.000296"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:11:49.997893" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:49.997947" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:49.998071" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:11:49.992608" elapsed="0.005937">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:11:49.990489" elapsed="0.008146">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:49.998824" elapsed="0.000047"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:49.998672" elapsed="0.000249"/>
</branch>
<status status="FAIL" start="2026-08-23T02:11:49.990462" elapsed="0.008483">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:49.999327" elapsed="0.000025"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:49.999469" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:49.999424" elapsed="0.000093"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:49.999407" elapsed="0.000132"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:49.999681" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:11:49.999767" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:11:49.983774" elapsed="0.016134">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:49.999980" elapsed="0.000016"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:11:49.979351" elapsed="0.020726">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:11:50.000132" elapsed="0.000015"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:11:49.977023" elapsed="0.023202">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:50.000448" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:50.000298" elapsed="0.000205"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:50.000668" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:50.000527" elapsed="0.000195"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:50.000894" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:50.000745" elapsed="0.000304"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:50.000282" elapsed="0.000789"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:11:49.975744" elapsed="0.025407">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:51.005279" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:51.004191" elapsed="0.001171"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:51.017318" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:51.017045" elapsed="0.000321"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:51.017772" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:51.017520" elapsed="0.000298"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:11:51.024457" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:51.024509" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:51.024644" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:11:51.020047" elapsed="0.005280">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:11:51.017927" elapsed="0.007527">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:51.025722" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:51.025507" elapsed="0.000307"/>
</branch>
<status status="FAIL" start="2026-08-23T02:11:51.017897" elapsed="0.007974">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:51.026440" elapsed="0.000037"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:51.026636" elapsed="0.000026"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:51.026575" elapsed="0.000129"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:51.026551" elapsed="0.000183"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:51.026965" elapsed="0.000030"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:11:51.027064" elapsed="0.000020"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:11:51.010815" elapsed="0.016402">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:51.027314" elapsed="0.000021"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:11:51.005901" elapsed="0.021547">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:11:51.027521" elapsed="0.000021"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:11:51.003480" elapsed="0.024168">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:51.027975" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:51.027747" elapsed="0.000430"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:51.028433" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:51.028212" elapsed="0.000298"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:51.028730" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:51.028543" elapsed="0.000261"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:51.027724" elapsed="0.001133"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:11:51.002247" elapsed="0.026727">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:52.033956" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:52.031991" elapsed="0.002091"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:52.048447" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:52.048059" elapsed="0.000438"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:52.048942" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:52.048652" elapsed="0.000335"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:11:52.055071" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:52.055121" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:52.055245" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:11:52.051185" elapsed="0.004501">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:11:52.049086" elapsed="0.006690">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:52.055990" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:52.055819" elapsed="0.000237"/>
</branch>
<status status="FAIL" start="2026-08-23T02:11:52.049048" elapsed="0.007034">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:52.056471" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:52.056617" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:52.056572" elapsed="0.000096"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:52.056555" elapsed="0.000135"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:52.056878" elapsed="0.000024"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:11:52.056951" elapsed="0.000014"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:11:52.041548" elapsed="0.015523">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:52.057140" elapsed="0.000016"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:11:52.034992" elapsed="0.022243">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:11:52.057398" elapsed="0.000017"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:11:52.031286" elapsed="0.026215">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:52.057728" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:52.057578" elapsed="0.000205"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:52.057966" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:52.057807" elapsed="0.000215"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:52.058186" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:52.058046" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:52.057560" elapsed="0.000700"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:11:52.030053" elapsed="0.028288">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:53.061175" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:53.060504" elapsed="0.000720"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:53.074291" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:53.074011" elapsed="0.000329"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:53.074738" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:53.074493" elapsed="0.000289"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:11:53.080368" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:53.080418" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:53.080536" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:11:53.076950" elapsed="0.004009">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:11:53.074876" elapsed="0.006168">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:53.081232" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:53.081080" elapsed="0.000217"/>
</branch>
<status status="FAIL" start="2026-08-23T02:11:53.074850" elapsed="0.006529">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:53.081774" elapsed="0.000028"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:53.081934" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:53.081892" elapsed="0.000089"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:53.081874" elapsed="0.000129"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:53.082146" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:11:53.082215" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:11:53.067904" elapsed="0.014419">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:53.082454" elapsed="0.000017"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:11:53.061671" elapsed="0.020881">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:11:53.082605" elapsed="0.000015"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:11:53.060051" elapsed="0.022644">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:53.082927" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:53.082766" elapsed="0.000218"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:53.083145" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:53.083008" elapsed="0.000191"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:53.083353" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:53.083222" elapsed="0.000184"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:53.082750" elapsed="0.000677"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:11:53.059101" elapsed="0.024402">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:54.087365" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:54.086313" elapsed="0.001128"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:54.099541" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:54.099262" elapsed="0.000332"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:54.100012" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:54.099746" elapsed="0.000311"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:11:54.106291" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:54.106343" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:54.106459" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:11:54.102334" elapsed="0.004564">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:11:54.100140" elapsed="0.006848">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:54.107221" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:54.107027" elapsed="0.000268"/>
</branch>
<status status="FAIL" start="2026-08-23T02:11:54.100114" elapsed="0.007206">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:54.107711" elapsed="0.000027"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:54.107869" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:54.107809" elapsed="0.000108"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:54.107791" elapsed="0.000148"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:54.108082" elapsed="0.000024"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:11:54.108223" elapsed="0.000016"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:11:54.094599" elapsed="0.013735">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:54.108402" elapsed="0.000017"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:11:54.087993" elapsed="0.020507">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:11:54.108554" elapsed="0.000015"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:11:54.085565" elapsed="0.023098">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:54.108909" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:54.108746" elapsed="0.000221"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:54.109136" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:54.108990" elapsed="0.000215"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:54.109372" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:54.109228" elapsed="0.000198"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:54.108730" elapsed="0.000716"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:11:54.084412" elapsed="0.025113">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:55.113370" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:55.112360" elapsed="0.001082"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:55.124286" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:55.124018" elapsed="0.000317"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:55.124736" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:55.124487" elapsed="0.000293"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:11:55.130963" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:55.131021" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:55.131138" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:11:55.126980" elapsed="0.004581">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:11:55.124876" elapsed="0.006770">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:55.131851" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:55.131684" elapsed="0.000234"/>
</branch>
<status status="FAIL" start="2026-08-23T02:11:55.124850" elapsed="0.007092">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:55.132319" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:55.132526" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:55.132484" elapsed="0.000088"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:55.132466" elapsed="0.000128"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:55.132737" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:11:55.132807" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:11:55.119560" elapsed="0.013378">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:55.133009" elapsed="0.000016"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:11:55.113969" elapsed="0.019137">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:11:55.133163" elapsed="0.000015"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:11:55.111582" elapsed="0.021673">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:55.133473" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:55.133326" elapsed="0.000202"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:55.133691" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:55.133552" elapsed="0.000192"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:55.133918" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:55.133768" elapsed="0.000205"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:55.133310" elapsed="0.000684"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:11:55.110449" elapsed="0.023623">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:56.137740" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:56.136756" elapsed="0.001055"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:56.148510" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:56.148247" elapsed="0.000311"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:56.148975" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:56.148710" elapsed="0.000309"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:11:56.155079" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:56.155130" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:56.155288" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:11:56.151199" elapsed="0.004676">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:11:56.149100" elapsed="0.006893">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:56.156254" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:56.156044" elapsed="0.000388"/>
</branch>
<status status="FAIL" start="2026-08-23T02:11:56.149073" elapsed="0.007396">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:56.157019" elapsed="0.000036"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:56.157213" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:56.157155" elapsed="0.000121"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:56.157130" elapsed="0.000176"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:56.157503" elapsed="0.000030"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:11:56.157601" elapsed="0.000022"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:11:56.142494" elapsed="0.015255">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:56.157867" elapsed="0.000024"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:11:56.138332" elapsed="0.019673">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:11:56.158081" elapsed="0.000021"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:11:56.136115" elapsed="0.022094">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:56.158513" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:56.158309" elapsed="0.000282"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:56.158818" elapsed="0.000047"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:56.158624" elapsed="0.000300"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:56.159148" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:56.158958" elapsed="0.000265"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:56.158287" elapsed="0.000964"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:11:56.134985" elapsed="0.024376">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:57.162023" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:57.161344" elapsed="0.000729"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:57.172747" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:57.172485" elapsed="0.000310"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:57.173212" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:57.172964" elapsed="0.000293"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:11:57.179550" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:57.179600" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:57.179713" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:11:57.175427" elapsed="0.004721">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:11:57.173337" elapsed="0.007006">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:57.180628" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:57.180408" elapsed="0.000312"/>
</branch>
<status status="FAIL" start="2026-08-23T02:11:57.173312" elapsed="0.007442">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:57.181292" elapsed="0.000036"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:57.181485" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:57.181428" elapsed="0.000122"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:57.181403" elapsed="0.000178"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:57.181778" elapsed="0.000031"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:11:57.181901" elapsed="0.000023"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:11:57.166389" elapsed="0.015666">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:57.182154" elapsed="0.000023"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:11:57.162402" elapsed="0.019889">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:11:57.182364" elapsed="0.000022"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:11:57.160902" elapsed="0.021592">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:57.182796" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:57.182594" elapsed="0.000300"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:57.183121" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:57.182928" elapsed="0.000269"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:57.183418" elapsed="0.000039"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:57.183229" elapsed="0.000275"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:57.182571" elapsed="0.000961"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:11:57.160106" elapsed="0.023535">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:58.187272" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:58.186297" elapsed="0.001046"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:58.197732" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:58.197471" elapsed="0.000310"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:58.198198" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:58.197950" elapsed="0.000296"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:11:58.204666" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:58.204716" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:58.204914" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:11:58.200432" elapsed="0.004919">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:11:58.198332" elapsed="0.007144">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:58.205738" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:58.205527" elapsed="0.000302"/>
</branch>
<status status="FAIL" start="2026-08-23T02:11:58.198308" elapsed="0.007578">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:58.206410" elapsed="0.000036"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:58.206601" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:58.206545" elapsed="0.000118"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:58.206520" elapsed="0.000173"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:58.206914" elapsed="0.000031"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:11:58.207014" elapsed="0.000020"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:11:58.191723" elapsed="0.015438">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:58.207258" elapsed="0.000021"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:11:58.187822" elapsed="0.019569">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:11:58.207465" elapsed="0.000021"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:11:58.185632" elapsed="0.021960">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:58.207911" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:58.207691" elapsed="0.000312"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:58.208240" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:58.208041" elapsed="0.000274"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:58.208531" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:58.208347" elapsed="0.000258"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:58.207668" elapsed="0.000966"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:11:58.184557" elapsed="0.024184">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:11:59.212316" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:11:59.211336" elapsed="0.001053"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:59.224877" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:59.224599" elapsed="0.000327"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:11:59.225325" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:11:59.225078" elapsed="0.000291"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:11:59.231261" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:59.231379" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:11:59.231489" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:11:59.227516" elapsed="0.004388">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:11:59.225448" elapsed="0.006541">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:59.232178" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:59.232026" elapsed="0.000218"/>
</branch>
<status status="FAIL" start="2026-08-23T02:11:59.225423" elapsed="0.006848">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:59.232667" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:59.232807" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:11:59.232766" elapsed="0.000102"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:59.232748" elapsed="0.000144"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:59.233036" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:11:59.233108" elapsed="0.000016"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:11:59.218742" elapsed="0.014474">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:11:59.233286" elapsed="0.000016"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:11:59.212965" elapsed="0.020418">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:11:59.233437" elapsed="0.000015"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:11:59.210669" elapsed="0.022860">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:59.233747" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:59.233601" elapsed="0.000201"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:59.233984" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:59.233826" elapsed="0.000212"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:11:59.234195" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:11:59.234061" elapsed="0.000187"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:11:59.233585" elapsed="0.000686"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:11:59.209584" elapsed="0.024767">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:00.238097" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:00.236992" elapsed="0.001180"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:00.250248" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:00.249975" elapsed="0.000328"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:00.250703" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:00.250456" elapsed="0.000292"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:12:00.256811" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:00.256882" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:00.256995" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:12:00.253080" elapsed="0.004464">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:12:00.250975" elapsed="0.006687">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:00.257950" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:00.257713" elapsed="0.000333"/>
</branch>
<status status="FAIL" start="2026-08-23T02:12:00.250948" elapsed="0.007131">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:00.258619" elapsed="0.000039"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:00.258817" elapsed="0.000043"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:00.258760" elapsed="0.000144"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:00.258735" elapsed="0.000201"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:00.259140" elapsed="0.000030"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:12:00.259241" elapsed="0.000022"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:12:00.243540" elapsed="0.015854">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:00.259495" elapsed="0.000022"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:12:00.238753" elapsed="0.020877">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:12:00.259709" elapsed="0.000021"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:12:00.236320" elapsed="0.023541">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:00.260175" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:00.259969" elapsed="0.000287"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:00.260494" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:00.260291" elapsed="0.000281"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:00.260797" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:00.260607" elapsed="0.000290"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:00.259945" elapsed="0.000983"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:12:00.235213" elapsed="0.025827">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:01.264906" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:01.263897" elapsed="0.001084"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:01.275607" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:01.275347" elapsed="0.000308"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:01.276067" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:01.275806" elapsed="0.000306"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:12:01.282130" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:01.282182" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:01.282297" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:12:01.278276" elapsed="0.004616">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:12:01.276190" elapsed="0.006822">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:01.283273" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:01.283062" elapsed="0.000301"/>
</branch>
<status status="FAIL" start="2026-08-23T02:12:01.276166" elapsed="0.007230">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:01.283933" elapsed="0.000036"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:01.284124" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:01.284069" elapsed="0.000117"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:01.284045" elapsed="0.000170"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:01.284410" elapsed="0.000030"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:12:01.284507" elapsed="0.000020"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:12:01.269597" elapsed="0.015058">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:01.284751" elapsed="0.000021"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:12:01.265643" elapsed="0.019259">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:12:01.284979" elapsed="0.000020"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:12:01.263206" elapsed="0.021900">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:01.285405" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:01.285204" elapsed="0.000278"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:01.285723" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:01.285515" elapsed="0.000284"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:01.286038" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:01.285849" elapsed="0.000263"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:01.285181" elapsed="0.000960"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:12:01.262019" elapsed="0.024230">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:02.289787" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:02.288728" elapsed="0.001164"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:02.302184" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:02.301761" elapsed="0.000494"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:02.302809" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:02.302472" elapsed="0.000420"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:12:02.309012" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:02.309062" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:02.309163" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:12:02.305076" elapsed="0.004507">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:12:02.302977" elapsed="0.006698">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:02.309883" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:02.309712" elapsed="0.000240"/>
</branch>
<status status="FAIL" start="2026-08-23T02:12:02.302954" elapsed="0.007022">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:02.310398" elapsed="0.000040"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:02.310599" elapsed="0.000029"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:02.310539" elapsed="0.000142"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:02.310515" elapsed="0.000197"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:02.310942" elapsed="0.000033"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:12:02.311046" elapsed="0.000022"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:12:02.295662" elapsed="0.015537">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:02.311299" elapsed="0.000023"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:12:02.290439" elapsed="0.021020">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:12:02.311553" elapsed="0.000022"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:12:02.288114" elapsed="0.023571">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:02.312014" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:02.311789" elapsed="0.000306"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:02.312330" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:02.312131" elapsed="0.000283"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:02.312637" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:02.312448" elapsed="0.000336"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:02.311766" elapsed="0.001049"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:12:02.287064" elapsed="0.025887">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:03.316469" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:03.315483" elapsed="0.001056"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:03.327760" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:03.327503" elapsed="0.000304"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:03.328219" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:03.327975" elapsed="0.000289"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:12:03.334350" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:03.334418" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:03.334569" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:12:03.330398" elapsed="0.004737">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:12:03.328337" elapsed="0.006912">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:03.335507" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:03.335298" elapsed="0.000301"/>
</branch>
<status status="FAIL" start="2026-08-23T02:12:03.328315" elapsed="0.007317">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:03.336171" elapsed="0.000037"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:03.336359" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:03.336306" elapsed="0.000113"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:03.336281" elapsed="0.000167"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:03.336640" elapsed="0.000030"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:12:03.336737" elapsed="0.000020"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:12:03.322973" elapsed="0.013933">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:03.337006" elapsed="0.000022"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:12:03.317056" elapsed="0.020084">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:12:03.337214" elapsed="0.000020"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:12:03.314827" elapsed="0.022514">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:03.337643" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:03.337442" elapsed="0.000343"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:03.338037" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:03.337820" elapsed="0.000294"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:03.338332" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:03.338147" elapsed="0.000260"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:03.337418" elapsed="0.001017"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:12:03.313737" elapsed="0.024807">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:04.342391" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:04.341395" elapsed="0.001072"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:04.355897" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:04.355595" elapsed="0.000352"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:04.356352" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:04.356102" elapsed="0.000294"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:12:04.362621" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:04.362678" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:04.362794" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:12:04.358618" elapsed="0.004624">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:12:04.356477" elapsed="0.006853">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:04.363522" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:04.363367" elapsed="0.000221"/>
</branch>
<status status="FAIL" start="2026-08-23T02:12:04.356451" elapsed="0.007163">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:04.364056" elapsed="0.000027"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:04.364196" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:04.364156" elapsed="0.000088"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:04.364139" elapsed="0.000126"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:04.364407" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:12:04.364477" elapsed="0.000014"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:12:04.350105" elapsed="0.014479">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:04.364652" elapsed="0.000016"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:12:04.343008" elapsed="0.021739">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:12:04.364886" elapsed="0.000017"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:12:04.340714" elapsed="0.024269">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:04.365199" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:04.365054" elapsed="0.000200"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:04.365425" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:04.365278" elapsed="0.000213"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:04.365658" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:04.365520" elapsed="0.000192"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:04.365038" elapsed="0.000695"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:12:04.339532" elapsed="0.026279">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:05.369581" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:05.368587" elapsed="0.001066"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:05.384895" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:05.384617" elapsed="0.000328"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:05.385341" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:05.385096" elapsed="0.000288"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:12:05.391482" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:05.391533" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:05.391650" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:12:05.387538" elapsed="0.004551">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:12:05.385462" elapsed="0.006714">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:05.392373" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:05.392214" elapsed="0.000226"/>
</branch>
<status status="FAIL" start="2026-08-23T02:12:05.385437" elapsed="0.007026">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:05.392846" elapsed="0.000028"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:05.392987" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:05.392945" elapsed="0.000088"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:05.392927" elapsed="0.000127"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:05.393195" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:12:05.393265" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:12:05.379828" elapsed="0.013544">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:05.393502" elapsed="0.000017"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:12:05.370173" elapsed="0.023427">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:12:05.393653" elapsed="0.000015"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:12:05.367908" elapsed="0.025836">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:05.393977" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:05.393814" elapsed="0.000220"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:05.394195" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:05.394057" elapsed="0.000192"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:05.394405" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:05.394272" elapsed="0.000189"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:05.393798" elapsed="0.000686"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:12:05.366651" elapsed="0.027910">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:06.398254" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:06.397278" elapsed="0.001049"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:06.409322" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:06.409063" elapsed="0.000306"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:06.409764" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:06.409519" elapsed="0.000288"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:12:06.415560" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:06.415609" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:06.415714" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:12:06.411968" elapsed="0.004201">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:12:06.409900" elapsed="0.006383">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:06.416489" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:06.416322" elapsed="0.000277"/>
</branch>
<status status="FAIL" start="2026-08-23T02:12:06.409876" elapsed="0.006756">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:06.417172" elapsed="0.000037"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:06.417363" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:06.417308" elapsed="0.000116"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:06.417284" elapsed="0.000173"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:06.417653" elapsed="0.000030"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:12:06.417822" elapsed="0.000044"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:12:06.403183" elapsed="0.014812">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:06.418092" elapsed="0.000022"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:12:06.398810" elapsed="0.019415">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:12:06.418300" elapsed="0.000020"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:12:06.396609" elapsed="0.021819">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:06.418736" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:06.418534" elapsed="0.000279"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:06.419061" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:06.418866" elapsed="0.000271"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:06.419354" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:06.419169" elapsed="0.000260"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:06.418509" elapsed="0.000949"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:12:06.395444" elapsed="0.024126">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:07.423262" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:07.422269" elapsed="0.001066"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:07.434389" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:07.434127" elapsed="0.000311"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:07.434857" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:07.434592" elapsed="0.000312"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:12:07.440704" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:07.440754" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:07.440914" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:12:07.437072" elapsed="0.004233">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:12:07.434982" elapsed="0.006408">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:07.441614" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:07.441428" elapsed="0.000278"/>
</branch>
<status status="FAIL" start="2026-08-23T02:12:07.434958" elapsed="0.006781">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:07.442281" elapsed="0.000037"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:07.442553" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:07.442492" elapsed="0.000123"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:07.442466" elapsed="0.000180"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:07.442865" elapsed="0.000032"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:12:07.442968" elapsed="0.000021"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:12:07.428206" elapsed="0.014912">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:07.443217" elapsed="0.000022"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:12:07.423825" elapsed="0.019529">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:12:07.443430" elapsed="0.000021"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:12:07.421599" elapsed="0.021965">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:07.443894" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:07.443669" elapsed="0.000306"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:07.444206" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:07.444009" elapsed="0.000274"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:07.444503" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:07.444317" elapsed="0.000261"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:07.443646" elapsed="0.000961"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:12:07.420465" elapsed="0.024251">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:08.448503" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:08.447454" elapsed="0.001121"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:08.459479" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:08.459216" elapsed="0.000310"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:08.459940" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:08.459678" elapsed="0.000307"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:12:08.466019" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:08.466088" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:08.466226" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:12:08.462155" elapsed="0.004582">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:12:08.460064" elapsed="0.006810">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:08.467139" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:08.466928" elapsed="0.000377"/>
</branch>
<status status="FAIL" start="2026-08-23T02:12:08.460039" elapsed="0.007303">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:08.467888" elapsed="0.000038"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:08.468082" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:08.468026" elapsed="0.000117"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:08.468002" elapsed="0.000171"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:08.468370" elapsed="0.000039"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:12:08.468495" elapsed="0.000027"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:12:08.453405" elapsed="0.015265">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:08.468772" elapsed="0.000023"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:12:08.449093" elapsed="0.019839">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:12:08.469011" elapsed="0.000021"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:12:08.446775" elapsed="0.022365">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:08.469570" elapsed="0.000038"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:08.469241" elapsed="0.000419"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:08.469925" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:08.469699" elapsed="0.000304"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:08.470220" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:08.470035" elapsed="0.000260"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:08.469218" elapsed="0.001104"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:12:08.445594" elapsed="0.024838">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:09.472942" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:09.472298" elapsed="0.000694"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:09.483357" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:09.483095" elapsed="0.000310"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:09.483807" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:09.483558" elapsed="0.000310"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:12:09.489987" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:09.490042" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:09.490153" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:12:09.486176" elapsed="0.004392">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:12:09.483990" elapsed="0.006804">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:09.491086" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:09.490871" elapsed="0.000310"/>
</branch>
<status status="FAIL" start="2026-08-23T02:12:09.483923" elapsed="0.007291">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:09.491744" elapsed="0.000036"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:09.491959" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:09.491904" elapsed="0.000119"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:09.491878" elapsed="0.000183"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:09.492266" elapsed="0.000031"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:12:09.492367" elapsed="0.000021"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:12:09.477054" elapsed="0.015462">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:09.492616" elapsed="0.000023"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:12:09.473303" elapsed="0.019451">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:12:09.492831" elapsed="0.000044"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:12:09.471814" elapsed="0.021175">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:09.493297" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:09.493092" elapsed="0.000284"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:09.493606" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:09.493410" elapsed="0.000272"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:09.493954" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:09.493714" elapsed="0.000320"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:09.493069" elapsed="0.000994"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:12:09.471092" elapsed="0.023082">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:10.497984" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:10.497011" elapsed="0.001046"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:10.508819" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:10.508458" elapsed="0.000448"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:10.509464" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:10.509120" elapsed="0.000406"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:12:10.515904" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:10.515954" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:10.516127" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:12:10.512066" elapsed="0.004460">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:12:10.509632" elapsed="0.006981">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:10.516804" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:10.516653" elapsed="0.000235"/>
</branch>
<status status="FAIL" start="2026-08-23T02:12:10.509600" elapsed="0.007312">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:10.517285" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:10.517422" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:10.517381" elapsed="0.000087"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:10.517364" elapsed="0.000126"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:10.517630" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:12:10.517699" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:12:10.502432" elapsed="0.015374">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:10.517893" elapsed="0.000016"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:12:10.498611" elapsed="0.019379">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:12:10.518043" elapsed="0.000014"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:12:10.496324" elapsed="0.021809">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:10.518348" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:10.518205" elapsed="0.000228"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:10.518597" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:10.518457" elapsed="0.000199"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:10.518815" elapsed="0.000043"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:10.518678" elapsed="0.000229"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:10.518189" elapsed="0.000753"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:12:10.495211" elapsed="0.023852">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:11.522454" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:11.521499" elapsed="0.001024"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:11.533421" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:11.533154" elapsed="0.000315"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:11.533886" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:11.533621" elapsed="0.000310"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:12:11.539922" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:11.540046" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:11.540154" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:12:11.536108" elapsed="0.004435">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:12:11.534007" elapsed="0.006620">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:11.540926" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:11.540672" elapsed="0.000349"/>
</branch>
<status status="FAIL" start="2026-08-23T02:12:11.533983" elapsed="0.007071">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:11.541571" elapsed="0.000036"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:11.541763" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:11.541706" elapsed="0.000118"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:11.541681" elapsed="0.000195"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:11.542075" elapsed="0.000030"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:12:11.542174" elapsed="0.000021"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:12:11.527013" elapsed="0.015308">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:11.542417" elapsed="0.000022"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:12:11.523088" elapsed="0.019461">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:12:11.542621" elapsed="0.000021"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:12:11.520880" elapsed="0.021874">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:11.543112" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:11.542876" elapsed="0.000315"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:11.543416" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:11.543224" elapsed="0.000267"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:11.543706" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:11.543523" elapsed="0.000263"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:11.542851" elapsed="0.000963"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:12:11.519813" elapsed="0.024130">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:12.547227" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:12.546296" elapsed="0.000996"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:12.557693" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:12.557341" elapsed="0.000417"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:12.558363" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:12.557992" elapsed="0.000433"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:12:12.564429" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:12.564478" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:12.564575" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:12:12.561028" elapsed="0.003927">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:12:12.558588" elapsed="0.006449">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:12.565223" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:12.565073" elapsed="0.000216"/>
</branch>
<status status="FAIL" start="2026-08-23T02:12:12.558559" elapsed="0.006753">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:12.565672" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:12.565809" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:12.565772" elapsed="0.000095"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:12.565754" elapsed="0.000136"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:12.566028" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:12:12.566097" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:12:12.551311" elapsed="0.014888">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:12.566268" elapsed="0.000016"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:12:12.547766" elapsed="0.018596">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:12:12.566415" elapsed="0.000014"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:12:12.545609" elapsed="0.020896">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:12.566719" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:12.566575" elapsed="0.000199"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:12.566952" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:12.566798" elapsed="0.000209"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:12.567162" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:12.567030" elapsed="0.000184"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:12.566559" elapsed="0.000675"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:12:12.544613" elapsed="0.022698">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:13.571000" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:13.570026" elapsed="0.001045"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:13.582249" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:13.581890" elapsed="0.000425"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:13.582889" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:13.582528" elapsed="0.000428"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:12:13.589663" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:13.589713" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:13.589821" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:12:13.585707" elapsed="0.004526">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:12:13.583062" elapsed="0.007256">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:13.590508" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:13.590356" elapsed="0.000218"/>
</branch>
<status status="FAIL" start="2026-08-23T02:12:13.583032" elapsed="0.007566">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:13.591005" elapsed="0.000027"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:13.591145" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:13.591105" elapsed="0.000084"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:13.591086" elapsed="0.000125"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:13.591352" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:12:13.591422" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:12:13.575724" elapsed="0.015805">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:13.591599" elapsed="0.000015"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:12:13.571683" elapsed="0.020011">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:12:13.591750" elapsed="0.000017"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:12:13.569358" elapsed="0.022503">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:13.592109" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:13.591935" elapsed="0.000231"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:13.592327" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:13.592190" elapsed="0.000191"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:13.592539" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:13.592405" elapsed="0.000188"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:13.591919" elapsed="0.000694"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:12:13.568267" elapsed="0.024440">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:14.596612" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:14.595569" elapsed="0.001117"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:14.608685" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:14.608406" elapsed="0.000327"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:14.609146" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:14.608900" elapsed="0.000290"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:12:14.615176" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:14.615227" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:14.615337" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:12:14.611333" elapsed="0.004412">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:12:14.609269" elapsed="0.006560">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:14.616041" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:14.615889" elapsed="0.000218"/>
</branch>
<status status="FAIL" start="2026-08-23T02:12:14.609245" elapsed="0.006886">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:14.616529" elapsed="0.000027"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:14.616670" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:14.616628" elapsed="0.000087"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:14.616610" elapsed="0.000126"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:14.616899" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:12:14.616971" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:12:14.603102" elapsed="0.013977">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:14.617149" elapsed="0.000016"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:12:14.597209" elapsed="0.020036">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:12:14.617299" elapsed="0.000015"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:12:14.594891" elapsed="0.022501">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:14.617611" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:14.617464" elapsed="0.000202"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:14.617845" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:14.617691" elapsed="0.000212"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:14.618060" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:14.617926" elapsed="0.000257"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:14.617448" elapsed="0.000757"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:12:14.593718" elapsed="0.024566">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:15.621929" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:15.620903" elapsed="0.001100"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:15.633737" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:15.633477" elapsed="0.000308"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:15.634201" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:15.633955" elapsed="0.000291"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:12:15.640062" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:15.640111" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:15.640215" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:12:15.636381" elapsed="0.004298">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:12:15.634319" elapsed="0.006444">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:15.640967" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:15.640800" elapsed="0.000233"/>
</branch>
<status status="FAIL" start="2026-08-23T02:12:15.634297" elapsed="0.006772">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:15.641440" elapsed="0.000025"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:15.641576" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:15.641536" elapsed="0.000085"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:15.641519" elapsed="0.000124"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:15.641785" elapsed="0.000024"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:12:15.641874" elapsed="0.000016"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:12:15.628256" elapsed="0.013724">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:15.642050" elapsed="0.000016"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:12:15.622490" elapsed="0.019655">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:12:15.642199" elapsed="0.000015"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:12:15.620245" elapsed="0.022046">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:15.642508" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:15.642363" elapsed="0.000259"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:15.642795" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:15.642647" elapsed="0.000219"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:15.643029" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:15.642891" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:15.642346" elapsed="0.000759"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:12:15.619185" elapsed="0.023999">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:16.646465" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:16.645427" elapsed="0.001105"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:16.658083" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:16.657813" elapsed="0.000317"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:16.658524" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:16.658280" elapsed="0.000287"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:12:16.664517" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:16.664566" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:16.664665" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:12:16.660697" elapsed="0.004368">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:12:16.658638" elapsed="0.006511">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:16.665335" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:16.665185" elapsed="0.000215"/>
</branch>
<status status="FAIL" start="2026-08-23T02:12:16.658617" elapsed="0.006805">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:16.665815" elapsed="0.000042"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:16.665967" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:16.665929" elapsed="0.000082"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:16.665912" elapsed="0.000120"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:16.666173" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:12:16.666240" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:12:16.652644" elapsed="0.013701">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:16.666412" elapsed="0.000016"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:12:16.647042" elapsed="0.019464">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:12:16.666610" elapsed="0.000017"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:12:16.644789" elapsed="0.021919">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:16.666946" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:16.666781" elapsed="0.000222"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:16.667166" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:16.667027" elapsed="0.000192"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:16.667375" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:16.667243" elapsed="0.000185"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:16.666764" elapsed="0.000684"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:12:16.643830" elapsed="0.023695">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:17.671383" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:17.670383" elapsed="0.001081"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:17.684661" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:17.684402" elapsed="0.000307"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:17.685128" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:17.684878" elapsed="0.000295"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:12:17.691104" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:17.691154" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:17.691265" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:12:17.687330" elapsed="0.004342">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:12:17.685249" elapsed="0.006506">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:17.691964" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:17.691792" elapsed="0.000238"/>
</branch>
<status status="FAIL" start="2026-08-23T02:12:17.685226" elapsed="0.006829">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:17.692419" elapsed="0.000025"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:17.692554" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:17.692514" elapsed="0.000084"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:17.692497" elapsed="0.000123"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:17.692760" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:12:17.692829" elapsed="0.000030"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:12:17.680057" elapsed="0.012893">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:17.693102" elapsed="0.000017"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:12:17.671981" elapsed="0.021221">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:12:17.693256" elapsed="0.000016"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:12:17.669680" elapsed="0.023668">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:17.693566" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:17.693421" elapsed="0.000202"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:17.693785" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:17.693647" elapsed="0.000210"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:17.694022" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:17.693884" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:17.693404" elapsed="0.000693"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:12:17.668558" elapsed="0.025642">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:18.697392" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:18.696422" elapsed="0.001035"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:18.708280" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:18.708028" elapsed="0.000299"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:18.708723" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:18.708480" elapsed="0.000287"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:12:18.714330" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:18.714378" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:18.714471" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:12:18.710900" elapsed="0.003977">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:12:18.708847" elapsed="0.006161">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:18.715265" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:18.715058" elapsed="0.000297"/>
</branch>
<status status="FAIL" start="2026-08-23T02:12:18.708815" elapsed="0.006572">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:18.715912" elapsed="0.000036"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:18.716098" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:18.716046" elapsed="0.000110"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:18.716022" elapsed="0.000164"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:18.716380" elapsed="0.000030"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:12:18.716529" elapsed="0.000023"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:12:18.701971" elapsed="0.014706">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:18.716774" elapsed="0.000022"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:12:18.697955" elapsed="0.019004">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:12:18.717055" elapsed="0.000026"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:12:18.695793" elapsed="0.021402">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:18.717497" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:18.717295" elapsed="0.000281"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:18.717801" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:18.717609" elapsed="0.000291"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:18.718120" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:18.717933" elapsed="0.000262"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:18.717272" elapsed="0.000951"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:12:18.694884" elapsed="0.023446">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:19.722065" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:19.721067" elapsed="0.001071"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:19.733247" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:19.732983" elapsed="0.000312"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:19.733693" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:19.733447" elapsed="0.000291"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:12:19.740412" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:19.740525" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:19.740758" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:12:19.736129" elapsed="0.005459">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:12:19.733817" elapsed="0.007954">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:19.742224" elapsed="0.000051"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:19.741880" elapsed="0.000492"/>
</branch>
<status status="FAIL" start="2026-08-23T02:12:19.733792" elapsed="0.008632">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:19.743335" elapsed="0.000059"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:19.743763" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:19.743675" elapsed="0.000223"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:19.743631" elapsed="0.000319"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:19.744274" elapsed="0.000048"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:12:19.744431" elapsed="0.000032"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:12:19.728631" elapsed="0.016032">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:19.744818" elapsed="0.000063"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:12:19.722624" elapsed="0.022450">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:12:19.745196" elapsed="0.000033"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:12:19.720363" elapsed="0.025036">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:19.745916" elapsed="0.000048"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:19.745561" elapsed="0.000482"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:19.746403" elapsed="0.000044"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:19.746096" elapsed="0.000426"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:19.746899" elapsed="0.000047"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:19.746575" elapsed="0.000448"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:19.745524" elapsed="0.001545"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:12:19.719229" elapsed="0.028034">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:20.750955" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:20.749983" elapsed="0.001045"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:20.761787" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:20.761523" elapsed="0.000325"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:20.762253" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:20.762009" elapsed="0.000289"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:12:20.768243" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:20.768293" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:20.768397" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:12:20.764453" elapsed="0.004330">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:12:20.762374" elapsed="0.006520">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:20.769183" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:20.768942" elapsed="0.000406"/>
</branch>
<status status="FAIL" start="2026-08-23T02:12:20.762350" elapsed="0.007034">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:20.769926" elapsed="0.000037"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:20.770119" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:20.770063" elapsed="0.000118"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:20.770038" elapsed="0.000174"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:20.770411" elapsed="0.000030"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:12:20.770510" elapsed="0.000022"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:12:20.755814" elapsed="0.014843">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:20.770756" elapsed="0.000022"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:12:20.751513" elapsed="0.019403">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:12:20.770996" elapsed="0.000022"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:12:20.749327" elapsed="0.021798">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:20.771431" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:20.771227" elapsed="0.000283"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:20.771770" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:20.771544" elapsed="0.000328"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:20.772095" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:20.771907" elapsed="0.000266"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:20.771204" elapsed="0.000997"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:12:20.748234" elapsed="0.024077">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:21.775695" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:21.774722" elapsed="0.001043"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:21.786824" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:21.786465" elapsed="0.000448"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:21.787476" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:21.787128" elapsed="0.000410"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:12:21.793930" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:21.793986" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:21.794096" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:12:21.790158" elapsed="0.004322">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:12:21.787638" elapsed="0.006987">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:21.794814" elapsed="0.000038"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:21.794663" elapsed="0.000236"/>
</branch>
<status status="FAIL" start="2026-08-23T02:12:21.787609" elapsed="0.007314">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:21.795303" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:21.795441" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:21.795400" elapsed="0.000085"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:21.795382" elapsed="0.000125"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:21.795650" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:12:21.795720" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:12:21.780363" elapsed="0.015463">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:21.795913" elapsed="0.000017"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:12:21.776395" elapsed="0.019616">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:12:21.796065" elapsed="0.000015"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:12:21.774092" elapsed="0.022067">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:21.796408" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:21.796256" elapsed="0.000209"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:21.796643" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:21.796489" elapsed="0.000210"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:21.796878" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:21.796723" elapsed="0.000226"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:21.796216" elapsed="0.000764"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:12:21.773074" elapsed="0.024022">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:22.800620" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:22.799651" elapsed="0.001039"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:22.814247" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:22.813980" elapsed="0.000316"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:22.814698" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:22.814450" elapsed="0.000292"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:12:22.820830" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:22.820897" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:22.821086" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:12:22.816930" elapsed="0.004563">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:12:22.814820" elapsed="0.006758">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:22.821768" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:22.821616" elapsed="0.000234"/>
</branch>
<status status="FAIL" start="2026-08-23T02:12:22.814796" elapsed="0.007080">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:22.822253" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:22.822390" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:22.822350" elapsed="0.000085"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:22.822332" elapsed="0.000124"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:22.822599" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:12:22.822670" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:12:22.808959" elapsed="0.013821">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:22.822865" elapsed="0.000017"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:12:22.801288" elapsed="0.021677">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:12:22.823022" elapsed="0.000017"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:12:22.799011" elapsed="0.024107">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:22.823336" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:22.823192" elapsed="0.000200"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:22.823554" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:22.823416" elapsed="0.000193"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:22.823764" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:22.823631" elapsed="0.000187"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:22.823175" elapsed="0.000678"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:12:22.797921" elapsed="0.026013">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:23.827739" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:23.826711" elapsed="0.001103"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:23.839019" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:23.838735" elapsed="0.000332"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:23.839467" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:23.839219" elapsed="0.000293"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:12:23.845635" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:23.845767" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:23.845908" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:12:23.841701" elapsed="0.004771">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:12:23.839599" elapsed="0.006992">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:23.846877" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:23.846644" elapsed="0.000328"/>
</branch>
<status status="FAIL" start="2026-08-23T02:12:23.839569" elapsed="0.007437">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:23.847528" elapsed="0.000035"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:23.847719" elapsed="0.000023"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:23.847662" elapsed="0.000121"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:23.847638" elapsed="0.000175"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:23.848034" elapsed="0.000030"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:12:23.848132" elapsed="0.000020"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:12:23.832858" elapsed="0.015426">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:23.848380" elapsed="0.000021"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:12:23.828340" elapsed="0.020173">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:12:23.848587" elapsed="0.000021"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:12:23.826053" elapsed="0.022662">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:23.849041" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:23.848815" elapsed="0.000304"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:23.849374" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:23.849152" elapsed="0.000300"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:23.849670" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:23.849484" elapsed="0.000260"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:23.848792" elapsed="0.000980"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:12:23.824875" elapsed="0.025027">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:24.852015" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:24.851562" elapsed="0.000485"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:24.859502" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:24.859246" elapsed="0.000304"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:24.859967" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:24.859702" elapsed="0.000310"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:12:24.865936" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:24.865987" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:24.866098" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:12:24.862245" elapsed="0.004238">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:12:24.860148" elapsed="0.006419">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:24.866755" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:24.866604" elapsed="0.000216"/>
</branch>
<status status="FAIL" start="2026-08-23T02:12:24.860125" elapsed="0.006738">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:24.867237" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:24.867372" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:24.867333" elapsed="0.000083"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:24.867316" elapsed="0.000122"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:24.867578" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:12:24.867647" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:12:24.854934" elapsed="0.012818">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:24.867821" elapsed="0.000030"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:12:24.852266" elapsed="0.015667">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:12:24.867986" elapsed="0.000015"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:12:24.851282" elapsed="0.016800">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:24.868298" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:24.868152" elapsed="0.000201"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:24.868514" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:24.868376" elapsed="0.000190"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:24.868721" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:24.868589" elapsed="0.000184"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:24.868136" elapsed="0.000657"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:12:24.850520" elapsed="0.018366">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:25.872173" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:25.871255" elapsed="0.000984"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:25.885905" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:25.885640" elapsed="0.000312"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:25.886351" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:25.886104" elapsed="0.000302"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:12:25.892093" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:25.892140" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:25.892230" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:12:25.888531" elapsed="0.004030">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:12:25.886473" elapsed="0.006168">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:25.892826" elapsed="0.000043"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:25.892675" elapsed="0.000239"/>
</branch>
<status status="FAIL" start="2026-08-23T02:12:25.886454" elapsed="0.006484">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:25.893297" elapsed="0.000025"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:25.893427" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:25.893391" elapsed="0.000078"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:25.893374" elapsed="0.000116"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:25.893628" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:12:25.893698" elapsed="0.000014"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:12:25.878925" elapsed="0.014875">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:25.893884" elapsed="0.000016"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:12:25.872791" elapsed="0.021189">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:12:25.894033" elapsed="0.000015"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:12:25.870584" elapsed="0.023540">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:25.894339" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:25.894194" elapsed="0.000210"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:25.894565" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:25.894427" elapsed="0.000192"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:25.894774" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:25.894641" elapsed="0.000186"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:25.894178" elapsed="0.000687"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:12:25.869515" elapsed="0.025429">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:26.898059" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:26.897156" elapsed="0.000967"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:26.909129" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:26.908751" elapsed="0.000444"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:26.909746" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:26.909405" elapsed="0.000402"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:12:26.916308" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:26.916356" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:26.916446" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:12:26.912660" elapsed="0.004114">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:12:26.909922" elapsed="0.006953">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:26.917059" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:26.916910" elapsed="0.000213"/>
</branch>
<status status="FAIL" start="2026-08-23T02:12:26.909896" elapsed="0.007250">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:26.917505" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:26.917636" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:26.917599" elapsed="0.000079"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:26.917582" elapsed="0.000117"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:26.917852" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:12:26.917924" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:12:26.902705" elapsed="0.015322">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:26.918097" elapsed="0.000018"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:12:26.898592" elapsed="0.019603">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:12:26.918248" elapsed="0.000015"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:12:26.896525" elapsed="0.021814">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:26.918558" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:26.918410" elapsed="0.000202"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:26.918775" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:26.918637" elapsed="0.000191"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:26.919033" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:26.918869" elapsed="0.000254"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:26.918394" elapsed="0.000751"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:12:26.895591" elapsed="0.023635">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:27.922978" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:27.921949" elapsed="0.001103"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:27.934365" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:27.934018" elapsed="0.000395"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:27.934810" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:27.934563" elapsed="0.000307"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:12:27.941029" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:27.941080" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:27.941205" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:12:27.937065" elapsed="0.004571">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:12:27.934952" elapsed="0.006769">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:27.941928" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:27.941760" elapsed="0.000236"/>
</branch>
<status status="FAIL" start="2026-08-23T02:12:27.934926" elapsed="0.007093">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:27.942410" elapsed="0.000032"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:27.942557" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:27.942516" elapsed="0.000088"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:27.942498" elapsed="0.000128"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:27.942767" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:12:27.942853" elapsed="0.000016"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:12:27.927674" elapsed="0.015290">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:27.943032" elapsed="0.000015"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:12:27.923616" elapsed="0.019511">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:12:27.943183" elapsed="0.000015"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:12:27.921265" elapsed="0.022009">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:27.943517" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:27.943345" elapsed="0.000325"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:27.943865" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:27.943701" elapsed="0.000222"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:27.944082" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:27.943947" elapsed="0.000189"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:27.943328" elapsed="0.000829"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:12:27.920158" elapsed="0.024078">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<msg time="2026-08-23T02:12:27.944330" level="FAIL">Keyword 'Check_Config_Data' failed after retrying for 1 minute. The last error was: HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>60s</arg>
<arg>1s</arg>
<arg>Check_Config_Data</arg>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-08-23T02:11:27.417103" elapsed="60.527323">Keyword 'Check_Config_Data' failed after retrying for 1 minute. The last error was: HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<doc>Get the device data and make sure it contains the created content.</doc>
<status status="FAIL" start="2026-08-23T02:11:27.332327" elapsed="60.612275">Keyword 'Check_Config_Data' failed after retrying for 1 minute. The last error was: HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</test>
<test id="s1-s4-s2-t16" name="Modify_Device_Data_Again" line="127">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-08-23T02:12:27.948848" elapsed="0.000226"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:12:27.948406" elapsed="0.000723"/>
</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-08-23T02:12:27.950144" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:27.950022" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:27.950003" elapsed="0.000210"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:12:27.955353" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:27.955243" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:27.955224" elapsed="0.000197"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:12:27.956473" 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-08-23T02:12:27.956086" elapsed="0.000415"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:12:27.956981" 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-08-23T02:12:27.956660" elapsed="0.000346"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:12:27.957051" elapsed="0.000033"/>
</return>
<msg time="2026-08-23T02:12:27.957211" 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-08-23T02:12:27.955670" elapsed="0.001566"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:12:27.962662" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:27.962554" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:27.962535" 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-08-23T02:12:27.964042" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:27.963933" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:27.963914" elapsed="0.000196"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:12:27.964656" level="INFO">${karaf_connection_index} = 11</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-08-23T02:12:27.964256" elapsed="0.000427"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:12:27.965139" level="INFO">${current_connection_index} = 13</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-08-23T02:12:27.964859" elapsed="0.000306"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:12:27.997384" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:12:27.965719" elapsed="0.031850"/>
</kw>
<msg time="2026-08-23T02:12:27.997813" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:12:27.997880" 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 "n "e "t "c "o "n "f "...</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-08-23T02:12:27.965322" elapsed="0.032602"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:12:28.019069" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "M "o "d "i "f "y "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "A "g "a "i "n "[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-08-23T02:12:27.998512" elapsed="0.020855"/>
</kw>
<msg time="2026-08-23T02:12:28.019754" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:12:28.019828" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "M "o "d "i "f "y "_ "D "e "v "i "c "e "_ "D "a "t "a "_ ...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:12:27.998096" elapsed="0.021821"/>
</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-08-23T02:12:28.020378" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:28.020037" elapsed="0.000461"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:28.020007" elapsed="0.000530"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.021437" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "M "o "d "i "f "y "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "A "g "a "i "n "[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-08-23T02:12:28.020746" elapsed="0.000795"/>
</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-08-23T02:12:28.022014" elapsed="0.000037"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:28.021645" elapsed="0.000496"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:28.021617" elapsed="0.000564"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:12:28.022235" elapsed="0.000045"/>
</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-08-23T02:12:28.027468" elapsed="0.003341"/>
</kw>
<msg time="2026-08-23T02:12:28.030968" 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-08-23T02:12:28.026332" elapsed="0.004794"/>
</kw>
<kw name="Open 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-08-23T02:12:28.032613" elapsed="0.000042"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:28.033976" elapsed="0.000044"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:12:28.023665" elapsed="0.010442"/>
</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-08-23T02:12:28.022637" elapsed="0.011606"/>
</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-08-23T02:12:27.963600" elapsed="0.070746"/>
</kw>
<msg time="2026-08-23T02:12:28.034442" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:12:28.034498" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "M "o "d "i "f "y "_ "D "e "v "i "c "e "_ "D "a "t "a "_ ...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:12:27.962897" elapsed="0.071642"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:12:28.034732" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:12:28.034619" elapsed="0.000173"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:28.034599" elapsed="0.000218"/>
</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-08-23T02:12:28.035265" 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-08-23T02:12:28.035641" elapsed="0.000027"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:12:28.035716" 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-08-23T02:12:27.962219" elapsed="0.073605"/>
</kw>
<msg time="2026-08-23T02:12:28.035949" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:12:28.035992" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "M "o "d "i "f "y "_ "D "e "v "i "c "e "_ "D "a "t "a "_ ...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:12:27.957622" elapsed="0.078408"/>
</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-08-23T02:12:28.036426" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:28.036169" elapsed="0.000312"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:28.036149" elapsed="0.000356"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:12:27.957480" elapsed="0.079049"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:12:27.957297" elapsed="0.079265"/>
</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-08-23T02:12:27.954875" elapsed="0.081741"/>
</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-08-23T02:12:27.949717" elapsed="0.086954"/>
</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-08-23T02:12:27.949283" elapsed="0.087433"/>
</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-08-23T02:12:27.945899" elapsed="0.090868"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.037407" level="INFO">${mapping} = {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping}</var>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-23T02:12:28.036960" elapsed="0.000475"/>
</kw>
<kw name="Put_As_Xml_Templated" owner="TemplatedRequests">
<kw name="Put_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-08-23T02:12:28.073876" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod2.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:28.073482" elapsed="0.000424"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T02:12:28.074677" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamod2.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-23T02:12:28.074405" elapsed="0.000347">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamod2.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-23T02:12:28.074862" 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-08-23T02:12:28.074068" elapsed="0.000820"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.075440" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod2/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-08-23T02:12:28.075054" elapsed="0.000413"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:12:28.075804" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamod2/location.uri"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamod2/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:12:28.075975" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount/test:cont
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:12:28.075663" elapsed="0.000338"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.076540" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount/test:cont
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:28.076184" elapsed="0.000417"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.077946" level="INFO">mapping: {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:28.077569" elapsed="0.000438"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.078592" 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-08-23T02:12:28.078230" elapsed="0.000398"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.079914" level="INFO">${value} = netconf-test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:12:28.079153" elapsed="0.000797"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:12:28.080805" level="INFO">${encoded} = netconf-test-device</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-08-23T02:12:28.080551" elapsed="0.000280"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:12:28.080911" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T02:12:28.081068" level="INFO">${encoded_value} = netconf-test-device</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-08-23T02:12:28.080231" elapsed="0.000863"/>
</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-08-23T02:12:28.081256" elapsed="0.000251"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:12:28.078951" elapsed="0.002634"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.082152" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:12:28.081848" elapsed="0.000332"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:12:28.082942" level="INFO">${encoded} = /rests</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-08-23T02:12:28.082683" elapsed="0.000286"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:12:28.083020" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T02:12:28.083174" level="INFO">${encoded_value} = /rests</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-08-23T02:12:28.082366" elapsed="0.000832"/>
</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-08-23T02:12:28.083348" elapsed="0.000247"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-23T02:12:28.081703" elapsed="0.001934"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-23T02:12:28.078695" elapsed="0.004977"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-23T02:12:28.083716" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:12:28.083891" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-23T02:12:28.077121" elapsed="0.006797"/>
</kw>
<status status="PASS" start="2026-08-23T02:12:28.076694" elapsed="0.007257"/>
</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-08-23T02:12:28.084125" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:28.083977" elapsed="0.000204"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:28.076667" elapsed="0.007534"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.085025" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</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-08-23T02:12:28.084342" elapsed="0.000712"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T02:12:28.085107" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod2.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod2.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod2/${file_name}.</doc>
<status status="PASS" start="2026-08-23T02:12:28.072864" elapsed="0.012370"/>
</kw>
<msg time="2026-08-23T02:12:28.085289" 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-08-23T02:12:28.058872" elapsed="0.026465"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod2.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod2.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod2/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:28.097955" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod2.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod2.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod2/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:28.110197" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod2.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod2.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod2/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:28.122593" 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-08-23T02:12:28.122790" 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-08-23T02:12:28.122984" 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-08-23T02:12:28.123398" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:28.123255" elapsed="0.000200"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:28.123239" 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-08-23T02:12:28.123638" 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-08-23T02:12:28.123808" 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-08-23T02:12:28.123997" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T02:12:28.123211" elapsed="0.000841"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T02:12:28.123101" elapsed="0.000978"/>
</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-08-23T02:12:28.124225" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:28.124303" elapsed="0.000015"/>
</return>
<msg time="2026-08-23T02:12:28.124424" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</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-08-23T02:12:28.053747" elapsed="0.070703"/>
</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-08-23T02:12:28.151204" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod2.vanadium/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-08-23T02:12:28.150807" elapsed="0.000426"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T02:12:28.152011" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamod2.vanadium/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-08-23T02:12:28.151767" elapsed="0.000309">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamod2.vanadium/data.xml' does not exist.</status>
</kw>
<msg time="2026-08-23T02:12:28.152171" 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-08-23T02:12:28.151395" elapsed="0.000800"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.152740" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod2/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-08-23T02:12:28.152356" elapsed="0.000411"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:12:28.153079" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamod2/data.xml"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamod2/data.xml&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:12:28.153204" level="INFO">${template} = &lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;
&lt;l&gt;Another Modified Content&lt;/l&gt;
&lt;/cont&gt;
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:12:28.152943" elapsed="0.000288"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.153630" level="INFO">&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;
&lt;l&gt;Another Modified Content&lt;/l&gt;
&lt;/cont&gt;
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:28.153386" 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-08-23T02:12:28.154045" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:28.153742" elapsed="0.000363"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.154571" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</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-08-23T02:12:28.154277" elapsed="0.000320"/>
</kw>
<status status="PASS" start="2026-08-23T02:12:28.154130" elapsed="0.000502"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:28.153723" elapsed="0.000932"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.155246" level="INFO">${final_text} = &lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;
&lt;l&gt;Another Modified Content&lt;/l&gt;
&lt;/cont&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-08-23T02:12:28.154798" elapsed="0.000476"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T02:12:28.155358" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod2.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod2.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod2/${file_name}.</doc>
<status status="PASS" start="2026-08-23T02:12:28.150194" elapsed="0.005292"/>
</kw>
<msg time="2026-08-23T02:12:28.155552" 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-08-23T02:12:28.137279" elapsed="0.018324"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod2.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod2.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod2/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:28.167908" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod2.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod2.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod2/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:28.180161" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod2.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod2.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod2/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:28.192554" 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-08-23T02:12:28.192748" 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-08-23T02:12:28.192933" 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-08-23T02:12:28.193294" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:28.193153" elapsed="0.000196"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:28.193138" 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-08-23T02:12:28.193508" 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-08-23T02:12:28.193671" 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-08-23T02:12:28.193830" elapsed="0.000035"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T02:12:28.193111" elapsed="0.000788"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T02:12:28.193009" 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-08-23T02:12:28.194065" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:28.194140" elapsed="0.000015"/>
</return>
<msg time="2026-08-23T02:12:28.194256" level="INFO">${data} = &lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;
&lt;l&gt;Another Modified Content&lt;/l&gt;
&lt;/cont&gt;</msg>
<var>${data}</var>
<arg>folder=${folder}</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-08-23T02:12:28.134419" elapsed="0.059866"/>
</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-08-23T02:12:28.195575" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamod2/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-08-23T02:12:28.195331" elapsed="0.000309">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamod2/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-23T02:12:28.195734" 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-08-23T02:12:28.194955" 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-08-23T02:12:28.196088" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:28.195828" elapsed="0.000317"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.196635" 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-08-23T02:12:28.196340" elapsed="0.000321"/>
</kw>
<status status="PASS" start="2026-08-23T02:12:28.196170" elapsed="0.000525"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:28.195810" elapsed="0.000907"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.199232" 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-08-23T02:12:28.196879" elapsed="0.002380"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-23T02:12:28.199312" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:12:28.199467" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod2/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-23T02:12:28.194618" elapsed="0.004874"/>
</kw>
<kw name="Put_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.200925" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:28.200658" elapsed="0.000314"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.201362" level="INFO">&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;
&lt;l&gt;Another Modified Content&lt;/l&gt;
&lt;/cont&gt;</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:28.201122" elapsed="0.000286"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.201801" 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-08-23T02:12:28.201557" elapsed="0.000306"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.202257" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:28.202014" elapsed="0.000286"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-08-23T02:12:28.203116" 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-08-23T02:12:28.202920" elapsed="0.000222"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-08-23T02:12:28.203467" 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-08-23T02:12:28.203293" 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-08-23T02:12:28.203654" elapsed="0.000214"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.204269" 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-08-23T02:12:28.204022" elapsed="0.000291"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-08-23T02:12:28.204356" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:12:28.204511" 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-08-23T02:12:28.202503" elapsed="0.002033"/>
</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-08-23T02:12:28.210564" level="INFO">PUT Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Content-Length': '89', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;
&lt;l&gt;Another Modified Content&lt;/l&gt;
&lt;/cont&gt; 
 </msg>
<msg time="2026-08-23T02:12:28.210617" level="INFO">PUT Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont 
 status=404, reason=Not Found 
 headers={'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:28.210708" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</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-08-23T02:12:28.206706" elapsed="0.004419">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</status>
</kw>
<status status="FAIL" start="2026-08-23T02:12:28.204606" elapsed="0.006614">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</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-08-23T02:12:28.211447" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:28.211292" elapsed="0.000226"/>
</branch>
<status status="FAIL" start="2026-08-23T02:12:28.204588" elapsed="0.006953">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</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-08-23T02:12:28.211955" elapsed="0.000028"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:28.212090" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:28.212053" elapsed="0.000079"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:28.212035" elapsed="0.000120"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:28.212297" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:12:28.212366" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>content_type=${content_type}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</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-08-23T02:12:28.199877" elapsed="0.012596">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:28.212548" elapsed="0.000016"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>extension=xml</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>content_type=${HEADERS_XML}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>endline=${\n}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve URI and data from folder, call Put_To_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-23T02:12:28.042346" elapsed="0.170298">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=response</arg>
<arg>mapping=${mapping}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:28.212948" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:28.212752" elapsed="0.000268"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:28.212736" elapsed="0.000308"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:28.213078" elapsed="0.000014"/>
</return>
<arg>${DIRECTORY_WITH_TEMPLATE_FOLDERS}${/}datamod2</arg>
<arg>${mapping}</arg>
<doc>Add arguments sensible for XML data, return Put_Templated response text.
Optionally, verification against response.xml (no iteration) is called.</doc>
<status status="FAIL" start="2026-08-23T02:12:28.037689" elapsed="0.175488">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</status>
</kw>
<doc>Send a request to change the sample test data and check that the request went OK.</doc>
<status status="FAIL" start="2026-08-23T02:12:27.945262" elapsed="0.268069">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</status>
</test>
<test id="s1-s4-s2-t17" name="Check_Device_Data_Is_Modified_Again" line="132">
<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-08-23T02:12:28.216818" elapsed="0.000233"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:12:28.216554" elapsed="0.000554"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:12:28.218100" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:28.217987" elapsed="0.000160"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:28.217967" elapsed="0.000205"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:12:28.223150" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:28.223039" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:28.223019" elapsed="0.000202"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.224263" 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-08-23T02:12:28.223872" elapsed="0.000419"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.224759" 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-08-23T02:12:28.224449" elapsed="0.000336"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:12:28.224847" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T02:12:28.225008" 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-08-23T02:12:28.223446" elapsed="0.001588"/>
</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-08-23T02:12:28.230625" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:28.230513" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:28.230492" 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-08-23T02:12:28.232012" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:28.231899" elapsed="0.000160"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:28.231877" elapsed="0.000204"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:12:28.232623" level="INFO">${karaf_connection_index} = 11</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-08-23T02:12:28.232224" elapsed="0.000427"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:12:28.233096" level="INFO">${current_connection_index} = 13</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-08-23T02:12:28.232808" elapsed="0.000315"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:12:28.263503" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:12:28.233686" elapsed="0.030048"/>
</kw>
<msg time="2026-08-23T02:12:28.263965" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:12:28.264012" 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 "n "e "t "c "o "n "f "...</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-08-23T02:12:28.233287" elapsed="0.030763"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:12:28.284247" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "I "s "_ "M "o "d "i "f "i "e "d "_ "A "g "a "i "n "[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-08-23T02:12:28.264630" elapsed="0.019818"/>
</kw>
<msg time="2026-08-23T02:12:28.284638" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:12:28.284685" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "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-08-23T02:12:28.264221" elapsed="0.020501"/>
</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-08-23T02:12:28.285070" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:28.284801" elapsed="0.000353"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:28.284781" elapsed="0.000400"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.285728" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "I "s "_ "M "o "d "i "f "i "e "d "_ "A "g "a "i "n "[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-08-23T02:12:28.285325" elapsed="0.000476"/>
</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-08-23T02:12:28.286116" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:28.285896" elapsed="0.000304"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:28.285876" elapsed="0.000350"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:12:28.286261" 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-08-23T02:12:28.289616" elapsed="0.000149"/>
</kw>
<msg time="2026-08-23T02:12:28.289865" 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-08-23T02:12:28.288969" elapsed="0.001015"/>
</kw>
<kw name="Open 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-08-23T02:12:28.291373" elapsed="0.000044"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:28.292588" elapsed="0.000044"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:12:28.287163" elapsed="0.005557"/>
</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-08-23T02:12:28.286525" elapsed="0.006441"/>
</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-08-23T02:12:28.231529" elapsed="0.061545"/>
</kw>
<msg time="2026-08-23T02:12:28.293172" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:12:28.293217" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "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-08-23T02:12:28.230861" elapsed="0.062394"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:12:28.293486" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-23T02:12:28.293375" elapsed="0.000172"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:28.293354" elapsed="0.000217"/>
</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-08-23T02:12:28.294015" elapsed="0.000029"/>
</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-08-23T02:12:28.294357" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:12:28.294460" elapsed="0.000023"/>
</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-08-23T02:12:28.230165" elapsed="0.064436"/>
</kw>
<msg time="2026-08-23T02:12:28.294709" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:12:28.294759" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "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-08-23T02:12:28.225461" elapsed="0.069341"/>
</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-08-23T02:12:28.295368" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:28.295071" elapsed="0.000362"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:28.295049" elapsed="0.000408"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:12:28.225319" elapsed="0.070162"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:12:28.225140" elapsed="0.070373"/>
</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-08-23T02:12:28.222645" elapsed="0.072923"/>
</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-08-23T02:12:28.217678" elapsed="0.077976"/>
</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-08-23T02:12:28.217257" elapsed="0.078457"/>
</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-08-23T02:12:28.214139" elapsed="0.081630"/>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.297078" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:28.296663" elapsed="0.000443"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.304588" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:28.304334" elapsed="0.000303"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.305059" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:28.304791" elapsed="0.000314"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:12:28.310627" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:28.310678" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:28.310775" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:12:28.307237" elapsed="0.003925">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:12:28.305173" elapsed="0.006072">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:28.311431" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:28.311280" elapsed="0.000254"/>
</branch>
<status status="FAIL" start="2026-08-23T02:12:28.305154" elapsed="0.006405">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:28.312008" elapsed="0.000029"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:28.312162" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:28.312116" elapsed="0.000107"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:28.312094" elapsed="0.000166"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:28.312467" elapsed="0.000030"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:12:28.312565" elapsed="0.000022"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:12:28.299965" elapsed="0.012767">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:28.312903" elapsed="0.000027"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:12:28.297318" elapsed="0.015735">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:12:28.313130" elapsed="0.000021"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:12:28.296401" elapsed="0.016856">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:28.313564" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:28.313357" elapsed="0.000284"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:28.313891" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:28.313674" elapsed="0.000295"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:28.314187" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:28.314001" elapsed="0.000259"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:28.313334" elapsed="0.000954"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Another Modified Content&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:12:28.296005" elapsed="0.018392">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<doc>Get the device data and make sure it contains the created content.</doc>
<status status="FAIL" start="2026-08-23T02:12:28.213552" elapsed="0.101035">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</test>
<test id="s1-s4-s2-t18" name="Modify_Device_Data_Label_Via_Json" line="137">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-08-23T02:12:28.319587" elapsed="0.000406"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:12:28.319220" elapsed="0.000855"/>
</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-08-23T02:12:28.321192" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:28.321081" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:28.321061" elapsed="0.000200"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:12:28.326343" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:28.326234" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:28.326215" elapsed="0.000197"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.327440" 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-08-23T02:12:28.327033" elapsed="0.000435"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.328040" 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-08-23T02:12:28.327664" elapsed="0.000403"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:12:28.328114" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:12:28.328275" 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-08-23T02:12:28.326642" elapsed="0.001657"/>
</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-08-23T02:12:28.333900" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:28.333759" elapsed="0.000190"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:28.333738" elapsed="0.000234"/>
</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-08-23T02:12:28.335246" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:28.335136" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:28.335116" elapsed="0.000200"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:12:28.335930" level="INFO">${karaf_connection_index} = 11</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-08-23T02:12:28.335461" elapsed="0.000502"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:12:28.336394" level="INFO">${current_connection_index} = 13</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-08-23T02:12:28.336125" elapsed="0.000296"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:12:28.368709" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:12:28.337012" elapsed="0.032144"/>
</kw>
<msg time="2026-08-23T02:12:28.369575" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:12:28.369680" 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 "n "e "t "c "o "n "f "...</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-08-23T02:12:28.336580" elapsed="0.033183"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:12:28.389014" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "M "o "d "i "f "y "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "L "a "b "e "l "_ "V "i "a "_ "J "s "o "n "[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-08-23T02:12:28.371116" elapsed="0.018101"/>
</kw>
<msg time="2026-08-23T02:12:28.389402" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:12:28.389448" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "M "o "d "i "f "y "_ "D "e "v "i "c "e "_ "D "a "t "a "_ ...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:12:28.370175" elapsed="0.019310"/>
</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-08-23T02:12:28.389785" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:28.389562" elapsed="0.000322"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:28.389542" elapsed="0.000369"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.390457" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "M "o "d "i "f "y "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "L "a "b "e "l "_ "V "i "a "_ "J "s "o "n "[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-08-23T02:12:28.390052" elapsed="0.000477"/>
</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-08-23T02:12:28.390810" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:28.390595" elapsed="0.000314"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:28.390577" elapsed="0.000357"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:12:28.390968" 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-08-23T02:12:28.394320" elapsed="0.000284"/>
</kw>
<msg time="2026-08-23T02:12:28.394684" 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-08-23T02:12:28.393615" elapsed="0.001174"/>
</kw>
<kw name="Open 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-08-23T02:12:28.395947" elapsed="0.000041"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:28.397106" elapsed="0.000041"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:12:28.391869" elapsed="0.005360"/>
</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-08-23T02:12:28.391230" elapsed="0.006128"/>
</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-08-23T02:12:28.334781" elapsed="0.062676"/>
</kw>
<msg time="2026-08-23T02:12:28.397550" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:12:28.397594" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "M "o "d "i "f "y "_ "D "e "v "i "c "e "_ "D "a "t "a "_ ...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:12:28.334124" elapsed="0.063507"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:12:28.398092" elapsed="0.000029"/>
</return>
<status status="PASS" start="2026-08-23T02:12:28.397743" elapsed="0.000413"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:28.397723" elapsed="0.000457"/>
</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-08-23T02:12:28.398571" 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-08-23T02:12:28.398915" elapsed="0.000026"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:12:28.398988" 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-08-23T02:12:28.333360" elapsed="0.065737"/>
</kw>
<msg time="2026-08-23T02:12:28.399190" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:12:28.399234" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "M "o "d "i "f "y "_ "D "e "v "i "c "e "_ "D "a "t "a "_ ...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:12:28.328733" elapsed="0.070538"/>
</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-08-23T02:12:28.399594" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:28.399346" elapsed="0.000301"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:28.399329" elapsed="0.000372"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:12:28.328590" elapsed="0.071143"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:12:28.328409" elapsed="0.071356"/>
</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-08-23T02:12:28.325867" elapsed="0.073952"/>
</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-08-23T02:12:28.320773" elapsed="0.079241"/>
</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-08-23T02:12:28.320314" elapsed="0.079744"/>
</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-08-23T02:12:28.316030" elapsed="0.084079"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.400709" level="INFO">${mapping} = {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping}</var>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-23T02:12:28.400275" elapsed="0.000461"/>
</kw>
<kw name="Put_As_Json_Templated" owner="TemplatedRequests">
<kw name="Put_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-08-23T02:12:28.437336" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamodjson.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:28.436963" elapsed="0.000401"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T02:12:28.438115" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamodjson.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-23T02:12:28.437868" elapsed="0.000318">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamodjson.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-23T02:12:28.438287" 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-08-23T02:12:28.437523" elapsed="0.000788"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.438874" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamodjson/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-08-23T02:12:28.438473" elapsed="0.000457"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:12:28.439238" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamodjson/location.uri"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamodjson/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:12:28.439422" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount/test:cont
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:12:28.439099" elapsed="0.000349"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.439876" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount/test:cont
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:28.439602" elapsed="0.000358"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.440922" level="INFO">mapping: {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:28.440647" elapsed="0.000321"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.441579" 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-08-23T02:12:28.441123" elapsed="0.000483"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.442284" level="INFO">${value} = netconf-test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:12:28.441982" elapsed="0.000329"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:12:28.443133" level="INFO">${encoded} = netconf-test-device</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-08-23T02:12:28.442875" elapsed="0.000284"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:12:28.443210" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T02:12:28.443363" level="INFO">${encoded_value} = netconf-test-device</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-08-23T02:12:28.442496" elapsed="0.000892"/>
</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-08-23T02:12:28.443539" elapsed="0.000268"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:12:28.441826" elapsed="0.002055"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.444446" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:12:28.444144" elapsed="0.000328"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:12:28.445251" level="INFO">${encoded} = /rests</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-08-23T02:12:28.445006" elapsed="0.000271"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:12:28.445326" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:12:28.445477" level="INFO">${encoded_value} = /rests</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-08-23T02:12:28.444654" elapsed="0.000848"/>
</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-08-23T02:12:28.445649" elapsed="0.000243"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-23T02:12:28.444011" elapsed="0.001922"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-23T02:12:28.441657" elapsed="0.004311"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-23T02:12:28.446011" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:12:28.446168" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-23T02:12:28.440325" elapsed="0.005868"/>
</kw>
<status status="PASS" start="2026-08-23T02:12:28.440029" elapsed="0.006196"/>
</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-08-23T02:12:28.446397" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:28.446250" elapsed="0.000215"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:28.440010" elapsed="0.006476"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.447244" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</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-08-23T02:12:28.446632" elapsed="0.000640"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T02:12:28.447320" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamodjson.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamodjson.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamodjson/${file_name}.</doc>
<status status="PASS" start="2026-08-23T02:12:28.436338" elapsed="0.011107"/>
</kw>
<msg time="2026-08-23T02:12:28.447498" 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-08-23T02:12:28.423864" elapsed="0.023681"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamodjson.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamodjson.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamodjson/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:28.460885" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamodjson.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamodjson.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamodjson/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:28.473195" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamodjson.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamodjson.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamodjson/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:28.485446" 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-08-23T02:12:28.485641" 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-08-23T02:12:28.485813" elapsed="0.000036"/>
</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-08-23T02:12:28.486203" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:28.486054" elapsed="0.000204"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:28.486039" 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-08-23T02:12:28.486419" 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-08-23T02:12:28.486582" 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-08-23T02:12:28.486741" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T02:12:28.486011" elapsed="0.000783"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T02:12:28.485909" 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-08-23T02:12:28.486980" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:28.487056" elapsed="0.000016"/>
</return>
<msg time="2026-08-23T02:12:28.487175" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</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-08-23T02:12:28.419535" elapsed="0.067666"/>
</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-08-23T02:12:28.515830" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamodjson.vanadium/data.json</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-08-23T02:12:28.515370" elapsed="0.000511"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T02:12:28.516674" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamodjson.vanadium/data.json' 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-08-23T02:12:28.516400" elapsed="0.000359">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamodjson.vanadium/data.json' does not exist.</status>
</kw>
<msg time="2026-08-23T02:12:28.516868" 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-08-23T02:12:28.516058" elapsed="0.000836"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.517451" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamodjson/data.json</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-08-23T02:12:28.517060" elapsed="0.000418"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:12:28.517778" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamodjson/data.json"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamodjson/data.json&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:12:28.518044" level="INFO">${template} = {
  "test:cont": {
    "l":"Content Modified via JSON"
  }
}
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:12:28.517636" elapsed="0.000435"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.518479" level="INFO">{
  "test:cont": {
    "l":"Content Modified via JSON"
  }
}
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:28.518231" 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-08-23T02:12:28.518955" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:28.518604" elapsed="0.000414"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.519502" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</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-08-23T02:12:28.519192" elapsed="0.000340"/>
</kw>
<status status="PASS" start="2026-08-23T02:12:28.519046" elapsed="0.000522"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:28.518579" elapsed="0.001012"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.520251" level="INFO">${final_text} = {
  "test:cont": {
    "l":"Content Modified via JSON"
  }
}</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-08-23T02:12:28.519761" elapsed="0.000518"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T02:12:28.520333" elapsed="0.000037"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamodjson.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamodjson.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamodjson/${file_name}.</doc>
<status status="PASS" start="2026-08-23T02:12:28.514651" elapsed="0.005820"/>
</kw>
<msg time="2026-08-23T02:12:28.520525" 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-08-23T02:12:28.500863" elapsed="0.019712"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamodjson.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamodjson.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamodjson/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:28.532879" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamodjson.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamodjson.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamodjson/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:28.545132" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamodjson.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamodjson.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamodjson/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:28.557691" 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-08-23T02:12:28.557897" 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-08-23T02:12:28.558071" 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-08-23T02:12:28.558453" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:28.558312" elapsed="0.000197"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:28.558297" 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-08-23T02:12:28.558667" 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-08-23T02:12:28.558828" 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-08-23T02:12:28.559006" elapsed="0.000019"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T02:12:28.558267" elapsed="0.000830"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T02:12:28.558155" 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-08-23T02:12:28.559279" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:28.559356" elapsed="0.000016"/>
</return>
<msg time="2026-08-23T02:12:28.559471" level="INFO">${data} = {
  "test:cont": {
    "l":"Content Modified via JSON"
  }
}</msg>
<var>${data}</var>
<arg>folder=${folder}</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-08-23T02:12:28.497503" elapsed="0.061994"/>
</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-08-23T02:12:28.560784" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamodjson/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-08-23T02:12:28.560540" elapsed="0.000326">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamodjson/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-23T02:12:28.560961" 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-08-23T02:12:28.560204" 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-08-23T02:12:28.561302" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:28.561055" elapsed="0.000304"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.561871" 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-08-23T02:12:28.561561" elapsed="0.000338"/>
</kw>
<status status="PASS" start="2026-08-23T02:12:28.561383" elapsed="0.000551"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:28.561037" elapsed="0.000918"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.564270" 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-08-23T02:12:28.562103" elapsed="0.002193"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-23T02:12:28.564347" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:12:28.564500" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamodjson/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-23T02:12:28.559876" elapsed="0.004650"/>
</kw>
<kw name="Put_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.566044" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:28.565779" elapsed="0.000313"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.566478" level="INFO">{
  "test:cont": {
    "l":"Content Modified via JSON"
  }
}</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:28.566241" elapsed="0.000281"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.566924" 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-08-23T02:12:28.566666" elapsed="0.000302"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.567350" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:28.567113" elapsed="0.000280"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-08-23T02:12:28.568232" 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-08-23T02:12:28.568030" elapsed="0.000228"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-08-23T02:12:28.568578" 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-08-23T02:12:28.568407" 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-08-23T02:12:28.568749" elapsed="0.000221"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.569375" 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-08-23T02:12:28.569123" elapsed="0.000296"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-08-23T02:12:28.569460" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:12:28.569613" 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-08-23T02:12:28.567591" elapsed="0.002047"/>
</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-08-23T02:12:28.577479" level="INFO">PUT Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Type': 'application/json', 'Content-Length': '60', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body={
  "test:cont": {
    "l":"Content Modified via JSON"
  }
} 
 </msg>
<msg time="2026-08-23T02:12:28.577561" level="INFO">PUT Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont 
 status=404, reason=Not Found 
 headers={'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:28.577663" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</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-08-23T02:12:28.573702" elapsed="0.004367">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</status>
</kw>
<status status="FAIL" start="2026-08-23T02:12:28.569706" elapsed="0.008452">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</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-08-23T02:12:28.578340" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:28.578192" elapsed="0.000216"/>
</branch>
<status status="FAIL" start="2026-08-23T02:12:28.569688" elapsed="0.008743">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</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-08-23T02:12:28.578797" elapsed="0.000025"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:28.578943" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:28.578907" elapsed="0.000077"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:28.578888" elapsed="0.000117"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:28.579149" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:12:28.579216" elapsed="0.000014"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>content_type=${content_type}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>jmes_path=${jmes_expression}</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-08-23T02:12:28.564997" elapsed="0.014322">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:28.579392" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>extension=json</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>content_type=${HEADERS_YANG_JSON}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>endline=${\n}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve URI and data from folder, call Put_To_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-23T02:12:28.408867" elapsed="0.170616">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Json_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=response</arg>
<arg>mapping=${mapping}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected JSON data, should be equal to provided ${response}.
JSON normalization is used, endlines enabled for readability.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:28.579784" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:28.579587" elapsed="0.000287"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:28.579571" elapsed="0.000328"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:28.579932" elapsed="0.000014"/>
</return>
<arg>${directory_with_template_folders}${/}datamodjson</arg>
<arg>${mapping}</arg>
<doc>Add arguments sensible for JSON data, return Put_Templated response text.
Optionally, verification against response.json (no iteration) is called.
Only subset of JSON data is verified and returned if JMES path is specified in
file ${folder}/jmespath.expr.</doc>
<status status="FAIL" start="2026-08-23T02:12:28.404666" elapsed="0.175359">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</status>
</kw>
<doc>Send a JSON request to change the sample test data label and check that the request went OK.</doc>
<status status="FAIL" start="2026-08-23T02:12:28.315089" elapsed="0.265101">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</status>
</test>
<test id="s1-s4-s2-t19" name="Check_Device_Data_Label_Is_Modified_Via_Json" line="144">
<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-08-23T02:12:28.583588" elapsed="0.000237"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:12:28.583331" elapsed="0.000570"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:12:28.584915" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:28.584785" elapsed="0.000177"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:28.584734" elapsed="0.000250"/>
</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-08-23T02:12:28.589864" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:28.589742" elapsed="0.000170"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:28.589724" elapsed="0.000209"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.590921" 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-08-23T02:12:28.590527" elapsed="0.000422"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.591402" 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-08-23T02:12:28.591105" elapsed="0.000322"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:12:28.591472" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:12:28.591627" 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-08-23T02:12:28.590158" elapsed="0.001494"/>
</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-08-23T02:12:28.597283" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:28.597176" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:28.597156" 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-08-23T02:12:28.598608" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:28.598501" elapsed="0.000208"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:28.598482" elapsed="0.000253"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:12:28.599313" level="INFO">${karaf_connection_index} = 11</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-08-23T02:12:28.598903" elapsed="0.000437"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:12:28.599794" level="INFO">${current_connection_index} = 13</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-08-23T02:12:28.599495" elapsed="0.000327"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:12:28.630111" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:12:28.600533" elapsed="0.029768"/>
</kw>
<msg time="2026-08-23T02:12:28.630486" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:12:28.630533" 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 "n "e "t "c "o "n "f "...</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-08-23T02:12:28.599995" elapsed="0.030575"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:12:28.659329" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "L "a "b "e "l "_ "I "s "_ "M "o "d "i "f "i "e "d "_ "V "i "a "_ "J "s "o "n "[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-08-23T02:12:28.631158" elapsed="0.028370"/>
</kw>
<msg time="2026-08-23T02:12:28.659710" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:12:28.659756" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "L ...</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-08-23T02:12:28.630737" elapsed="0.029056"/>
</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-08-23T02:12:28.660137" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:28.659918" elapsed="0.000298"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:28.659893" elapsed="0.000349"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.660779" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "L "a "b "e "l "_ "I "s "_ "M "o "d "i "f "i "e "d "_ "V "i "a "_ "J "s "o "n "[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-08-23T02:12:28.660382" elapsed="0.000488"/>
</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-08-23T02:12:28.661149" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:28.660938" elapsed="0.000290"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:28.660920" elapsed="0.000333"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:12:28.661287" 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-08-23T02:12:28.664716" elapsed="0.000183"/>
</kw>
<msg time="2026-08-23T02:12:28.664976" 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-08-23T02:12:28.664021" elapsed="0.001060"/>
</kw>
<kw name="Open 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-08-23T02:12:28.666208" elapsed="0.000041"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:28.667341" elapsed="0.000040"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:12:28.662212" elapsed="0.005251"/>
</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-08-23T02:12:28.661584" elapsed="0.006011"/>
</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-08-23T02:12:28.598199" elapsed="0.069496"/>
</kw>
<msg time="2026-08-23T02:12:28.667788" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:12:28.668163" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "L ...</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-08-23T02:12:28.597501" elapsed="0.070703"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:12:28.668389" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:12:28.668282" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:28.668263" elapsed="0.000210"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:28.668884" 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-08-23T02:12:28.669220" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:12:28.669291" 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-08-23T02:12:28.596825" elapsed="0.072573"/>
</kw>
<msg time="2026-08-23T02:12:28.669490" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:12:28.669533" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "L ...</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-08-23T02:12:28.592054" elapsed="0.077515"/>
</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-08-23T02:12:28.670047" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:28.669643" elapsed="0.000461"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:28.669626" elapsed="0.000502"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:12:28.591913" elapsed="0.078238"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:12:28.591703" elapsed="0.078479"/>
</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-08-23T02:12:28.589388" elapsed="0.080848"/>
</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-08-23T02:12:28.584469" elapsed="0.085821"/>
</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-08-23T02:12:28.584049" elapsed="0.086285"/>
</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-08-23T02:12:28.581214" elapsed="0.089172"/>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.671633" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:28.671250" elapsed="0.000411"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.680430" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:28.680170" elapsed="0.000308"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.680895" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:28.680631" elapsed="0.000308"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:12:28.686611" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:28.686660" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:28.686759" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:12:28.683129" elapsed="0.004043">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:12:28.681006" elapsed="0.006250">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:28.687440" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:28.687291" elapsed="0.000215"/>
</branch>
<status status="FAIL" start="2026-08-23T02:12:28.680987" elapsed="0.006542">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:28.687949" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:28.688089" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:28.688052" elapsed="0.000081"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:28.688034" elapsed="0.000120"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:28.688296" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:12:28.688365" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:12:28.675759" elapsed="0.012712">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:28.688540" elapsed="0.000015"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:12:28.672604" elapsed="0.016031">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:12:28.688687" elapsed="0.000015"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:12:28.670990" elapsed="0.017788">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:28.689046" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:28.688864" elapsed="0.000243"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:28.689272" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:28.689131" elapsed="0.000194"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:28.689479" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:28.689348" elapsed="0.000185"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:28.688846" elapsed="0.000707"/>
</if>
<arg>&lt;data xmlns="${ODL_NETCONF_NAMESPACE}"&gt;&lt;cont xmlns="urn:opendaylight:test:netconf:crud"&gt;&lt;l&gt;Content Modified via JSON&lt;/l&gt;&lt;/cont&gt;&lt;/data&gt;</arg>
<status status="FAIL" start="2026-08-23T02:12:28.670588" elapsed="0.019043">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<doc>Get the device data label as XML and make sure it matches the content posted as JSON in the previous case.</doc>
<status status="FAIL" start="2026-08-23T02:12:28.580557" elapsed="0.109217">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</test>
<test id="s1-s4-s2-t20" name="Create_Car_List" line="149">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-08-23T02:12:28.693155" elapsed="0.000212"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:12:28.692895" elapsed="0.000561"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:12:28.694457" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:28.694347" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:28.694328" 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-08-23T02:12:28.699628" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:28.699520" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:28.699501" elapsed="0.000194"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.700706" 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-08-23T02:12:28.700320" elapsed="0.000413"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.701208" 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-08-23T02:12:28.700908" elapsed="0.000327"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:12:28.701280" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T02:12:28.701438" 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-08-23T02:12:28.699945" elapsed="0.001518"/>
</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-08-23T02:12:28.706884" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:28.706761" elapsed="0.000170"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:28.706742" elapsed="0.000211"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:12:28.708204" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:28.708097" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:28.708079" elapsed="0.000193"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:12:28.708807" level="INFO">${karaf_connection_index} = 11</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-08-23T02:12:28.708416" elapsed="0.000434"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:12:28.709269" level="INFO">${current_connection_index} = 13</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-08-23T02:12:28.709008" elapsed="0.000287"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:12:28.740451" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:12:28.709865" elapsed="0.030789"/>
</kw>
<msg time="2026-08-23T02:12:28.740868" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:12:28.740917" 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 "n "e "t "c "o "n "f "...</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-08-23T02:12:28.709452" elapsed="0.031503"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:12:28.755631" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "r "e "a "t "e "_ "C "a "r "_ "L "i "s "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-08-23T02:12:28.741570" elapsed="0.014250"/>
</kw>
<msg time="2026-08-23T02:12:28.756070" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:12:28.756118" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "r "e "a "t "e "_ "C "a "r "_ "L "i "s "t "[K"
[?1l&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-08-23T02:12:28.741142" elapsed="0.015016"/>
</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-08-23T02:12:28.756471" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:28.756242" elapsed="0.000309"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:28.756218" elapsed="0.000361"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.757148" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "r "e "a "t "e "_ "C "a "r "_ "L "i "s "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-08-23T02:12:28.756723" elapsed="0.000491"/>
</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-08-23T02:12:28.757494" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:28.757280" elapsed="0.000292"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:28.757262" elapsed="0.000335"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:12:28.757762" elapsed="0.000038"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-23T02:12:28.761302" elapsed="0.000150"/>
</kw>
<msg time="2026-08-23T02:12:28.761529" 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-08-23T02:12:28.760529" elapsed="0.001107"/>
</kw>
<kw name="Open 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-08-23T02:12:28.762745" elapsed="0.000041"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:28.764082" elapsed="0.000039"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:12:28.758699" elapsed="0.005506"/>
</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-08-23T02:12:28.758085" elapsed="0.006250"/>
</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-08-23T02:12:28.707757" elapsed="0.056679"/>
</kw>
<msg time="2026-08-23T02:12:28.764529" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:12:28.764574" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "r "e "a "t "e "_ "C "a "r "_ "L "i "s "t "[K"
[?1l&gt;[?...</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-08-23T02:12:28.707105" elapsed="0.057510"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:12:28.765011" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-08-23T02:12:28.764691" elapsed="0.000384"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:28.764673" elapsed="0.000426"/>
</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-08-23T02:12:28.765501" 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-08-23T02:12:28.766034" elapsed="0.000029"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:12:28.766111" 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-08-23T02:12:28.706426" elapsed="0.059800"/>
</kw>
<msg time="2026-08-23T02:12:28.766319" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:12:28.766364" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "r "e "a "t "e "_ "C "a "r "_ "L "i "s "t "[K"
[?1l&gt;[?...</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-08-23T02:12:28.701850" elapsed="0.064552"/>
</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-08-23T02:12:28.766725" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:28.766477" elapsed="0.000302"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:28.766459" elapsed="0.000343"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:12:28.701695" elapsed="0.065131"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:12:28.701520" elapsed="0.065357"/>
</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-08-23T02:12:28.699157" elapsed="0.067776"/>
</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-08-23T02:12:28.694054" elapsed="0.072935"/>
</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-08-23T02:12:28.693607" elapsed="0.073427"/>
</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-08-23T02:12:28.690719" elapsed="0.076368"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.767691" level="INFO">${mapping} = {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping}</var>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-23T02:12:28.767255" elapsed="0.000463"/>
</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-08-23T02:12:28.801465" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/cars.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:28.801091" elapsed="0.000402"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T02:12:28.802285" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/cars.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-23T02:12:28.801997" elapsed="0.000368">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/cars.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-23T02:12:28.802462" 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-08-23T02:12:28.801653" elapsed="0.000833"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.803062" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/cars/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-08-23T02:12:28.802657" elapsed="0.000432"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:12:28.803384" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/cars/location.uri"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/cars/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:12:28.803540" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:12:28.803248" elapsed="0.000317"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.804002" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:28.803719" elapsed="0.000329"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.805011" level="INFO">mapping: {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:28.804734" elapsed="0.000323"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.805487" 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-08-23T02:12:28.805225" elapsed="0.000287"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.806208" level="INFO">${value} = netconf-test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:12:28.805886" elapsed="0.000354"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:12:28.807217" level="INFO">${encoded} = netconf-test-device</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-08-23T02:12:28.806955" elapsed="0.000288"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:12:28.807295" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T02:12:28.807449" level="INFO">${encoded_value} = netconf-test-device</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-08-23T02:12:28.806617" elapsed="0.000857"/>
</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-08-23T02:12:28.807627" elapsed="0.000293"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:12:28.805736" elapsed="0.002228"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.808508" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:12:28.808208" elapsed="0.000326"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:12:28.809291" level="INFO">${encoded} = /rests</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-08-23T02:12:28.809052" elapsed="0.000265"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:12:28.809367" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:12:28.809517" level="INFO">${encoded_value} = /rests</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-08-23T02:12:28.808716" elapsed="0.000826"/>
</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-08-23T02:12:28.809689" elapsed="0.000247"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-23T02:12:28.808078" elapsed="0.001900"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-23T02:12:28.805563" elapsed="0.004449"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-23T02:12:28.810054" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:12:28.810216" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-23T02:12:28.804410" elapsed="0.005832"/>
</kw>
<status status="PASS" start="2026-08-23T02:12:28.804118" elapsed="0.006156"/>
</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-08-23T02:12:28.810445" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:28.810300" elapsed="0.000201"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:28.804096" elapsed="0.006426"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.811280" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount</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-08-23T02:12:28.810662" elapsed="0.000646"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T02:12:28.811394" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/cars.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/cars.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/cars/${file_name}.</doc>
<status status="PASS" start="2026-08-23T02:12:28.800460" elapsed="0.011061"/>
</kw>
<msg time="2026-08-23T02:12:28.811576" 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-08-23T02:12:28.787813" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/cars.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/cars.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/cars/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:28.824067" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/cars.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/cars.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/cars/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:28.836443" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/cars.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/cars.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/cars/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:28.848710" 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-08-23T02:12:28.848915" 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-08-23T02:12:28.849087" 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-08-23T02:12:28.849446" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:28.849306" elapsed="0.000196"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:28.849290" 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-08-23T02:12:28.849661" 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-08-23T02:12:28.849823" elapsed="0.000033"/>
</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-08-23T02:12:28.850001" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T02:12:28.849262" elapsed="0.000791"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T02:12:28.849162" 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-08-23T02:12:28.850268" elapsed="0.000027"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:28.850354" elapsed="0.000016"/>
</return>
<msg time="2026-08-23T02:12:28.850472" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount</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-08-23T02:12:28.783546" elapsed="0.066951"/>
</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-08-23T02:12:28.875628" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/cars.vanadium/post_data.xml</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:28.875252" elapsed="0.000404"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T02:12:28.876394" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/cars.vanadium/post_data.xml' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-23T02:12:28.876173" elapsed="0.000286">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/cars.vanadium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-08-23T02:12:28.876556" 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-08-23T02:12:28.875814" elapsed="0.000768"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.877146" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/cars/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-08-23T02:12:28.876741" elapsed="0.000432"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:12:28.877463" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/cars/post_data.xml"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/cars/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:12:28.877651" level="INFO">${template} = &lt;cars xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car"&gt;
  &lt;car-entry&gt;
    &lt;id&gt;KEEP&lt;/id&gt;
  &lt;/car-entry&gt;
&lt;/cars&gt;
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:12:28.877330" elapsed="0.000350"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.878138" level="INFO">&lt;cars xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car"&gt;
  &lt;car-entry&gt;
    &lt;id&gt;KEEP&lt;/id&gt;
  &lt;/car-entry&gt;
&lt;/cars&gt;
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:28.877860" elapsed="0.000324"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="NOT RUN" start="2026-08-23T02:12:28.878534" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:28.878251" elapsed="0.000343"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.879075" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</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-08-23T02:12:28.878761" elapsed="0.000341"/>
</kw>
<status status="PASS" start="2026-08-23T02:12:28.878620" elapsed="0.000517"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:28.878232" elapsed="0.000927"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.879734" level="INFO">${final_text} = &lt;cars xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car"&gt;
  &lt;car-entry&gt;
    &lt;id&gt;KEEP&lt;/id&gt;
  &lt;/car-entry&gt;
&lt;/cars&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-08-23T02:12:28.879301" elapsed="0.000463"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T02:12:28.879813" elapsed="0.000044"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/cars.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/cars.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/cars/${file_name}.</doc>
<status status="PASS" start="2026-08-23T02:12:28.874586" elapsed="0.005505"/>
</kw>
<msg time="2026-08-23T02:12:28.880161" 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-08-23T02:12:28.861576" elapsed="0.018653"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/cars.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/cars.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/cars/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:28.892714" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/cars.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/cars.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/cars/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:28.905013" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/cars.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/cars.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/cars/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:28.917355" 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-08-23T02:12:28.917546" 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-08-23T02:12:28.917724" 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-08-23T02:12:28.918100" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:28.917958" elapsed="0.000212"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:28.917942" 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-08-23T02:12:28.918356" 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-08-23T02:12:28.918548" 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-08-23T02:12:28.918713" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T02:12:28.917914" elapsed="0.000853"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T02:12:28.917799" elapsed="0.000995"/>
</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-08-23T02:12:28.918957" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:28.919036" elapsed="0.000016"/>
</return>
<msg time="2026-08-23T02:12:28.919164" level="INFO">${data} = &lt;cars xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car"&gt;
  &lt;car-entry&gt;
    &lt;id&gt;KEEP&lt;/id&gt;
  &lt;/car-entry&gt;
&lt;/cars&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-08-23T02:12:28.860724" elapsed="0.058469"/>
</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-08-23T02:12:28.920547" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/cars/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-08-23T02:12:28.920284" elapsed="0.000331">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/cars/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-23T02:12:28.920707" 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-08-23T02:12:28.919906" elapsed="0.000825"/>
</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-08-23T02:12:28.921063" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:28.920800" elapsed="0.000320"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.921609" 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-08-23T02:12:28.921317" elapsed="0.000318"/>
</kw>
<status status="PASS" start="2026-08-23T02:12:28.921144" elapsed="0.000526"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:28.920782" elapsed="0.000909"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.924243" 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-08-23T02:12:28.921854" elapsed="0.002416"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-23T02:12:28.924323" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:12:28.924477" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/cars/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-23T02:12:28.919542" elapsed="0.004960"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.926040" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:28.925773" elapsed="0.000313"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.926551" level="INFO">&lt;cars xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car"&gt;
  &lt;car-entry&gt;
    &lt;id&gt;KEEP&lt;/id&gt;
  &lt;/car-entry&gt;
&lt;/cars&gt;</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:28.926267" elapsed="0.000331"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.927011" 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-08-23T02:12:28.926746" elapsed="0.000308"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.927447" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:28.927202" elapsed="0.000288"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-08-23T02:12:28.928339" 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-08-23T02:12:28.928144" elapsed="0.000221"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-08-23T02:12:28.928698" 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-08-23T02:12:28.928524" 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-08-23T02:12:28.928885" elapsed="0.000204"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.929488" 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-08-23T02:12:28.929242" elapsed="0.000289"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-08-23T02:12:28.929573" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:12:28.929728" 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-08-23T02:12:28.927688" elapsed="0.002065"/>
</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-08-23T02:12:28.935895" level="INFO">POST Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Content-Length': '145', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;cars xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car"&gt;
  &lt;car-entry&gt;
    &lt;id&gt;KEEP&lt;/id&gt;
  &lt;/car-entry&gt;
&lt;/cars&gt; 
 </msg>
<msg time="2026-08-23T02:12:28.935980" level="INFO">POST Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:28.936075" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:12:28.931906" elapsed="0.004544">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount</status>
</kw>
<status status="FAIL" start="2026-08-23T02:12:28.929823" elapsed="0.006713">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount</status>
</branch>
<branch type="ELSE">
<kw name="POST On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:28.936717" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:28.936569" elapsed="0.000214"/>
</branch>
<status status="FAIL" start="2026-08-23T02:12:28.929805" elapsed="0.007001">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:28.937196" elapsed="0.000025"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:28.937330" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:28.937293" elapsed="0.000077"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:28.937277" elapsed="0.000115"/>
</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-08-23T02:12:28.937533" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:12:28.937600" elapsed="0.000014"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>content_type=${content_type}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>POST data to given URI, check status code and return response text.
${content_type} and ${accept} are mandatory Python objects with headers to use.
If ${normalize_json}, normalize text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:12:28.924827" elapsed="0.012876">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:28.937780" elapsed="0.000016"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>extension=xml</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>content_type=${HEADERS_XML}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>endline=${\n}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve URI and data from folder, call Post_To_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-23T02:12:28.772441" elapsed="0.165488">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=response</arg>
<arg>mapping=${mapping}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:28.938227" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:28.938045" elapsed="0.000250"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:28.938027" elapsed="0.000292"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:28.938352" elapsed="0.000015"/>
</return>
<arg>${directory_with_template_folders}${/}cars</arg>
<arg>${mapping}</arg>
<doc>Add arguments sensible for XML data, return Post_Templated response text.
Optionally, verification against response.xml (no iteration) is called.</doc>
<status status="FAIL" start="2026-08-23T02:12:28.768029" elapsed="0.170420">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount</status>
</kw>
<doc>Send a request to create a list of cars in the sample test data label and check that the request went OK.</doc>
<status status="FAIL" start="2026-08-23T02:12:28.690132" elapsed="0.248473">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount</status>
</test>
<test id="s1-s4-s2-t21" name="Check_Car_List_Created" line="154">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-08-23T02:12:28.942291" elapsed="0.000213"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:12:28.942029" elapsed="0.000530"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:12:28.943544" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:28.943433" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:28.943414" 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-08-23T02:12:28.948562" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:28.948455" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:28.948437" elapsed="0.000193"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.949625" 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-08-23T02:12:28.949247" elapsed="0.000404"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:12:28.950119" 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-08-23T02:12:28.949807" elapsed="0.000338"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:12:28.950190" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:12:28.950343" 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-08-23T02:12:28.948868" elapsed="0.001500"/>
</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-08-23T02:12:28.955879" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:28.955754" elapsed="0.000173"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:28.955735" elapsed="0.000214"/>
</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-08-23T02:12:28.957238" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:28.957131" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:28.957112" elapsed="0.000194"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:12:28.957856" level="INFO">${karaf_connection_index} = 11</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-08-23T02:12:28.957446" elapsed="0.000438"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:12:28.958305" level="INFO">${current_connection_index} = 13</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-08-23T02:12:28.958039" elapsed="0.000293"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:12:28.987905" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:12:28.958905" elapsed="0.029438"/>
</kw>
<msg time="2026-08-23T02:12:28.988763" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:12:28.988910" 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 "n "e "t "c "o "n "f "...</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-08-23T02:12:28.958487" elapsed="0.030597"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:12:29.005050" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "h "e "c "k "_ "C "a "r "_ "L "i "s "t "_ "C "r "e "a "t "e "d "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-08-23T02:12:28.990476" elapsed="0.014769"/>
</kw>
<msg time="2026-08-23T02:12:29.005431" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:12:29.005477" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "h "e "c "k "_ "C "a "r "_ "L "i "s "t "_ "C "r "e "a ...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:12:28.989475" elapsed="0.016040"/>
</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-08-23T02:12:29.005828" elapsed="0.000047"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:29.005600" elapsed="0.000336"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:29.005573" elapsed="0.000390"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.006510" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "h "e "c "k "_ "C "a "r "_ "L "i "s "t "_ "C "r "e "a "t "e "d "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:29.006104" elapsed="0.000473"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.006878" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:29.006644" elapsed="0.000317"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:29.006625" elapsed="0.000361"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:12:29.007020" 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-08-23T02:12:29.010448" elapsed="0.000149"/>
</kw>
<msg time="2026-08-23T02:12:29.010675" 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-08-23T02:12:29.009726" elapsed="0.001053"/>
</kw>
<kw name="Open 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-08-23T02:12:29.011938" elapsed="0.000040"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.013332" elapsed="0.000038"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:12:29.007915" elapsed="0.005536"/>
</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-08-23T02:12:29.007282" elapsed="0.006298"/>
</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-08-23T02:12:28.956806" elapsed="0.056873"/>
</kw>
<msg time="2026-08-23T02:12:29.013771" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:12:29.013814" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "h "e "c "k "_ "C "a "r "_ "L "i "s "t "_ "C "r "e "a ...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:12:28.956130" elapsed="0.057737"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:12:29.014051" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:12:29.013944" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:29.013926" elapsed="0.000208"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.014527" 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-08-23T02:12:29.014968" elapsed="0.000026"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:12:29.015043" 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-08-23T02:12:28.955359" elapsed="0.059791"/>
</kw>
<msg time="2026-08-23T02:12:29.015243" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:12:29.015287" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "h "e "c "k "_ "C "a "r "_ "L "i "s "t "_ "C "r "e "a ...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:12:28.950730" elapsed="0.064594"/>
</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-08-23T02:12:29.015682" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:29.015398" elapsed="0.000340"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:29.015381" elapsed="0.000381"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:12:28.950591" elapsed="0.065194"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:12:28.950421" elapsed="0.065394"/>
</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-08-23T02:12:28.948093" elapsed="0.067793"/>
</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-08-23T02:12:28.943143" elapsed="0.072798"/>
</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-08-23T02:12:28.942705" elapsed="0.073291"/>
</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-08-23T02:12:28.939693" elapsed="0.076357"/>
</kw>
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.016917" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:29.016475" elapsed="0.000471"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.024381" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:29.024125" elapsed="0.000303"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.024825" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:29.024579" elapsed="0.000307"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:12:29.030345" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:29.030393" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:29.030488" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:12:29.026995" elapsed="0.003865">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:12:29.024954" elapsed="0.005988">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.031124" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:29.030974" elapsed="0.000220"/>
</branch>
<status status="FAIL" start="2026-08-23T02:12:29.024935" elapsed="0.006282">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.031570" elapsed="0.000025"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:29.031700" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:29.031664" elapsed="0.000077"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:29.031648" elapsed="0.000114"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.031915" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:12:29.031987" elapsed="0.000032"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:12:29.019538" elapsed="0.012570">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:29.032175" elapsed="0.000015"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:12:29.017174" elapsed="0.015091">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:12:29.032352" elapsed="0.000017"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:12:29.016204" elapsed="0.016242">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>&lt;id&gt;KEEP&lt;/id&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.032607" elapsed="0.000022"/>
</kw>
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>&lt;id&gt;SMALL&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.032778" elapsed="0.000019"/>
</kw>
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>&lt;model&gt;Isetta&lt;/model&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.032959" elapsed="0.000021"/>
</kw>
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>&lt;manufacturer&gt;BMW&lt;/manufacturer&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.033122" elapsed="0.000022"/>
</kw>
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>&lt;year&gt;1953&lt;/year&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.033285" elapsed="0.000020"/>
</kw>
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>&lt;category&gt;microcar&lt;/category&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.033445" elapsed="0.000020"/>
</kw>
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>&lt;id&gt;TOYOTA&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.033605" elapsed="0.000020"/>
</kw>
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>&lt;model&gt;Camry&lt;/model&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.033763" elapsed="0.000020"/>
</kw>
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>&lt;manufacturer&gt;Toyota&lt;/manufacturer&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.033939" elapsed="0.000020"/>
</kw>
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>&lt;year&gt;1982&lt;/year&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.034100" elapsed="0.000020"/>
</kw>
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>&lt;category&gt;sedan&lt;/category&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.034264" elapsed="0.000019"/>
</kw>
<doc>Get the device data label as XML and make sure it matches the content posted as JSON in the previous case.</doc>
<status status="FAIL" start="2026-08-23T02:12:28.939062" elapsed="0.095354">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</test>
<test id="s1-s4-s2-t22" name="Add_Device_Data_Item_1_Via_XML_Post" line="169">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-08-23T02:12:29.037733" elapsed="0.000258"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:12:29.037474" elapsed="0.000587"/>
</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-08-23T02:12:29.039123" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:29.039010" elapsed="0.000161"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:29.038990" elapsed="0.000204"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:12:29.044358" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:29.044250" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:29.044231" elapsed="0.000194"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.045425" 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-08-23T02:12:29.045042" elapsed="0.000409"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.045929" 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-08-23T02:12:29.045607" elapsed="0.000348"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:12:29.045999" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:12:29.046153" 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-08-23T02:12:29.044648" 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-08-23T02:12:29.051561" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:29.051454" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:29.051435" 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-08-23T02:12:29.052885" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:29.052754" elapsed="0.000178"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:29.052736" elapsed="0.000218"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:12:29.053527" level="INFO">${karaf_connection_index} = 11</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-08-23T02:12:29.053133" elapsed="0.000421"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:12:29.053989" level="INFO">${current_connection_index} = 13</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-08-23T02:12:29.053710" elapsed="0.000305"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:12:29.084450" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:12:29.054568" elapsed="0.030065"/>
</kw>
<msg time="2026-08-23T02:12:29.084818" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:12:29.084898" 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 "n "e "t "c "o "n "f "...</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-08-23T02:12:29.054173" elapsed="0.030764"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:12:29.105735" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "A "d "d "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "I "t "e "m "_ "1 "_ "V "i "a "_ "X "M "L "_ "P "o "s "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-08-23T02:12:29.085511" elapsed="0.020445"/>
</kw>
<msg time="2026-08-23T02:12:29.106141" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:12:29.106187" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "A "d "d "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "I "t "e ...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:12:29.085106" elapsed="0.021119"/>
</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-08-23T02:12:29.106524" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:29.106302" elapsed="0.000306"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:29.106283" elapsed="0.000354"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.107194" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "A "d "d "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "I "t "e "m "_ "1 "_ "V "i "a "_ "X "M "L "_ "P "o "s "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-08-23T02:12:29.106777" elapsed="0.000487"/>
</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-08-23T02:12:29.107543" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:29.107330" elapsed="0.000291"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:29.107312" elapsed="0.000334"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:12:29.107679" 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-08-23T02:12:29.111148" elapsed="0.002165"/>
</kw>
<msg time="2026-08-23T02:12:29.113394" 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-08-23T02:12:29.110360" elapsed="0.003141"/>
</kw>
<kw name="Open 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-08-23T02:12:29.114627" elapsed="0.000041"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.115803" elapsed="0.000052"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:12:29.108603" elapsed="0.007337"/>
</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-08-23T02:12:29.107961" elapsed="0.008133"/>
</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-08-23T02:12:29.052455" elapsed="0.063742"/>
</kw>
<msg time="2026-08-23T02:12:29.116287" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:12:29.116331" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "A "d "d "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "I "t "e ...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:12:29.051778" elapsed="0.064590"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:12:29.116549" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:12:29.116442" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:29.116424" elapsed="0.000208"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.117131" 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-08-23T02:12:29.117502" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:12:29.117575" 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-08-23T02:12:29.051119" elapsed="0.066563"/>
</kw>
<msg time="2026-08-23T02:12:29.117774" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:12:29.117817" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "A "d "d "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "I "t "e ...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:12:29.046540" elapsed="0.071333"/>
</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-08-23T02:12:29.118194" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:29.117948" elapsed="0.000300"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:29.117931" elapsed="0.000341"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:12:29.046400" elapsed="0.071895"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:12:29.046231" elapsed="0.072094"/>
</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-08-23T02:12:29.043843" elapsed="0.074535"/>
</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-08-23T02:12:29.038678" elapsed="0.079755"/>
</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-08-23T02:12:29.038252" elapsed="0.080224"/>
</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-08-23T02:12:29.035317" elapsed="0.083209"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.119239" level="INFO">${mapping} = {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping}</var>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-23T02:12:29.118687" elapsed="0.000579"/>
</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-08-23T02:12:29.152975" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item1.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:29.152581" elapsed="0.000423"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T02:12:29.153750" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/item1.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-23T02:12:29.153495" elapsed="0.000352">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/item1.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-23T02:12:29.153944" 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-08-23T02:12:29.153166" elapsed="0.000803"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.154522" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item1/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-08-23T02:12:29.154132" elapsed="0.000418"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:12:29.154858" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/item1/location.uri"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/item1/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:12:29.155020" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount/car:cars
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:12:29.154706" elapsed="0.000340"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.155449" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount/car:cars
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:29.155204" 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-08-23T02:12:29.156499" level="INFO">mapping: {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:29.156238" elapsed="0.000306"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.156995" 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-08-23T02:12:29.156701" elapsed="0.000320"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.157915" level="INFO">${value} = netconf-test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:12:29.157385" elapsed="0.000557"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:12:29.158799" level="INFO">${encoded} = netconf-test-device</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-08-23T02:12:29.158535" elapsed="0.000290"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:12:29.158899" elapsed="0.000033"/>
</return>
<msg time="2026-08-23T02:12:29.159058" level="INFO">${encoded_value} = netconf-test-device</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-08-23T02:12:29.158215" elapsed="0.000868"/>
</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-08-23T02:12:29.159233" elapsed="0.000246"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:12:29.157251" elapsed="0.002269"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.160098" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:12:29.159764" elapsed="0.000361"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:12:29.160886" level="INFO">${encoded} = /rests</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-08-23T02:12:29.160628" elapsed="0.000285"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:12:29.160963" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:12:29.161115" level="INFO">${encoded_value} = /rests</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-08-23T02:12:29.160314" elapsed="0.000826"/>
</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-08-23T02:12:29.161286" elapsed="0.000221"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-23T02:12:29.159635" elapsed="0.001913"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-23T02:12:29.157075" elapsed="0.004508"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-23T02:12:29.161627" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:12:29.161782" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-23T02:12:29.155874" elapsed="0.005933"/>
</kw>
<status status="PASS" start="2026-08-23T02:12:29.155562" elapsed="0.006296"/>
</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-08-23T02:12:29.162033" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:29.161887" elapsed="0.000201"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:29.155542" elapsed="0.006566"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.162864" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/car:cars</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-08-23T02:12:29.162247" elapsed="0.000647"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T02:12:29.162944" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item1.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item1.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item1/${file_name}.</doc>
<status status="PASS" start="2026-08-23T02:12:29.151941" elapsed="0.011130"/>
</kw>
<msg time="2026-08-23T02:12:29.163125" 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-08-23T02:12:29.139262" elapsed="0.023911"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item1.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item1.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item1/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.175798" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item1.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item1.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item1/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.188436" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item1.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item1.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item1/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.200747" 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-08-23T02:12:29.200994" 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-08-23T02:12:29.201165" 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-08-23T02:12:29.201531" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:29.201390" elapsed="0.000198"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:29.201375" 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-08-23T02:12:29.201748" 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-08-23T02:12:29.201926" 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-08-23T02:12:29.202090" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T02:12:29.201347" elapsed="0.000795"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T02:12:29.201247" 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-08-23T02:12:29.202311" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:29.202387" elapsed="0.000015"/>
</return>
<msg time="2026-08-23T02:12:29.202505" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/car:cars</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-08-23T02:12:29.135015" elapsed="0.067516"/>
</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-08-23T02:12:29.227238" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item1.vanadium/post_data.xml</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:29.226856" elapsed="0.000410"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T02:12:29.227979" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/item1.vanadium/post_data.xml' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-23T02:12:29.227755" elapsed="0.000288">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/item1.vanadium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-08-23T02:12:29.228160" 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-08-23T02:12:29.227425" elapsed="0.000761"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.228733" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item1/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-08-23T02:12:29.228349" elapsed="0.000411"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:12:29.229070" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/item1/post_data.xml"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/item1/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:12:29.229195" level="INFO">${template} = &lt;car-entry xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car"&gt;
  &lt;id&gt;SMALL&lt;/id&gt;
  &lt;model&gt;Isetta&lt;/model&gt;
  &lt;manufacturer&gt;BMW&lt;/manufacturer&gt;
  &lt;year&gt;1953&lt;/year&gt;
  &lt;categ...</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:12:29.228934" elapsed="0.000289"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.229620" level="INFO">&lt;car-entry xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car"&gt;
  &lt;id&gt;SMALL&lt;/id&gt;
  &lt;model&gt;Isetta&lt;/model&gt;
  &lt;manufacturer&gt;BMW&lt;/manufacturer&gt;
  &lt;year&gt;1953&lt;/year&gt;
  &lt;category&gt;microcar&lt;/category&gt;
&lt;/car-entry&gt;
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:29.229377" elapsed="0.000291"/>
</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-08-23T02:12:29.230078" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:29.229771" elapsed="0.000372"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.230637" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</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-08-23T02:12:29.230347" elapsed="0.000316"/>
</kw>
<status status="PASS" start="2026-08-23T02:12:29.230174" elapsed="0.000524"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:29.229751" elapsed="0.000969"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.231321" level="INFO">${final_text} = &lt;car-entry xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car"&gt;
  &lt;id&gt;SMALL&lt;/id&gt;
  &lt;model&gt;Isetta&lt;/model&gt;
  &lt;manufacturer&gt;BMW&lt;/manufacturer&gt;
  &lt;year&gt;1953&lt;/year&gt;
  &lt;categ...</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-08-23T02:12:29.230879" elapsed="0.000472"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T02:12:29.231401" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item1.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item1.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item1/${file_name}.</doc>
<status status="PASS" start="2026-08-23T02:12:29.226228" elapsed="0.005298"/>
</kw>
<msg time="2026-08-23T02:12:29.231579" 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-08-23T02:12:29.213455" elapsed="0.018171"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item1.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item1.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item1/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.244024" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item1.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item1.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item1/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.256384" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item1.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item1.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item1/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.268738" 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-08-23T02:12:29.268943" 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-08-23T02:12:29.269117" 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-08-23T02:12:29.269475" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:29.269334" elapsed="0.000197"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:29.269319" 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-08-23T02:12:29.269695" 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-08-23T02:12:29.269872" 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-08-23T02:12:29.270036" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T02:12:29.269291" elapsed="0.000797"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T02:12:29.269192" 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-08-23T02:12:29.270253" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:29.270371" elapsed="0.000018"/>
</return>
<msg time="2026-08-23T02:12:29.270560" level="INFO">${data} = &lt;car-entry xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car"&gt;
  &lt;id&gt;SMALL&lt;/id&gt;
  &lt;model&gt;Isetta&lt;/model&gt;
  &lt;manufacturer&gt;BMW&lt;/manufacturer&gt;
  &lt;year&gt;1953&lt;/year&gt;
  &lt;categ...</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-08-23T02:12:29.212594" elapsed="0.057998"/>
</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-08-23T02:12:29.271872" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/item1/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-08-23T02:12:29.271607" elapsed="0.000330">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/item1/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-23T02:12:29.272031" 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-08-23T02:12:29.271272" 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-08-23T02:12:29.272408" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:29.272155" elapsed="0.000310"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.272979" 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-08-23T02:12:29.272664" elapsed="0.000341"/>
</kw>
<status status="PASS" start="2026-08-23T02:12:29.272492" elapsed="0.000547"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:29.272106" elapsed="0.000955"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.275570" 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-08-23T02:12:29.273211" elapsed="0.002385"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-23T02:12:29.275648" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:12:29.275802" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item1/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-23T02:12:29.270944" elapsed="0.004882"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.277454" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/car:cars</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:29.277204" elapsed="0.000296"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.277906" level="INFO">&lt;car-entry xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car"&gt;
  &lt;id&gt;SMALL&lt;/id&gt;
  &lt;model&gt;Isetta&lt;/model&gt;
  &lt;manufacturer&gt;BMW&lt;/manufacturer&gt;
  &lt;year&gt;1953&lt;/year&gt;
  &lt;category&gt;microcar&lt;/category&gt;
&lt;/car-entry&gt;</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:29.277650" elapsed="0.000305"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.278380" 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-08-23T02:12:29.278102" elapsed="0.000322"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.278810" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:29.278570" elapsed="0.000300"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-08-23T02:12:29.279660" 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-08-23T02:12:29.279470" elapsed="0.000216"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-08-23T02:12:29.280024" 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-08-23T02:12:29.279847" 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-08-23T02:12:29.280231" elapsed="0.000207"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.280849" 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-08-23T02:12:29.280589" elapsed="0.000306"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-08-23T02:12:29.280936" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:12:29.281092" 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-08-23T02:12:29.279070" elapsed="0.002047"/>
</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-08-23T02:12:29.287226" level="INFO">POST Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/car:cars 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/car:cars 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Content-Length': '236', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;car-entry xmlns="urn:opendaylight:params:xml:ns:yang:controller:config:sal-clustering-it:car"&gt;
  &lt;id&gt;SMALL&lt;/id&gt;
  &lt;model&gt;Isetta&lt;/model&gt;
  &lt;manufacturer&gt;BMW&lt;/manufacturer&gt;
  &lt;year&gt;1953&lt;/year&gt;
  &lt;category&gt;microcar&lt;/category&gt;
&lt;/car-entry&gt; 
 </msg>
<msg time="2026-08-23T02:12:29.287282" level="INFO">POST Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/car:cars 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:29.287391" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/car:cars</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:12:29.283353" elapsed="0.004435">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/car:cars</status>
</kw>
<status status="FAIL" start="2026-08-23T02:12:29.281186" elapsed="0.006714">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/car:cars</status>
</branch>
<branch type="ELSE">
<kw name="POST On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.288084" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:29.287935" elapsed="0.000253"/>
</branch>
<status status="FAIL" start="2026-08-23T02:12:29.281168" elapsed="0.007046">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/car:cars</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.288593" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:29.288730" elapsed="0.000012"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:29.288693" elapsed="0.000078"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:29.288676" elapsed="0.000117"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.288952" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:12:29.289021" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>content_type=${content_type}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>POST data to given URI, check status code and return response text.
${content_type} and ${accept} are mandatory Python objects with headers to use.
If ${normalize_json}, normalize text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:12:29.276199" elapsed="0.012929">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/car:cars</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:29.289207" elapsed="0.000016"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>extension=xml</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>content_type=${HEADERS_XML}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>endline=${\n}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve URI and data from folder, call Post_To_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-23T02:12:29.123805" elapsed="0.165496">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/car:cars</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=response</arg>
<arg>mapping=${mapping}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.289590" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:29.289414" elapsed="0.000244"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:29.289397" elapsed="0.000285"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:29.289715" elapsed="0.000015"/>
</return>
<arg>${directory_with_template_folders}${/}item1</arg>
<arg>${mapping}</arg>
<doc>Add arguments sensible for XML data, return Post_Templated response text.
Optionally, verification against response.xml (no iteration) is called.</doc>
<status status="FAIL" start="2026-08-23T02:12:29.119512" elapsed="0.170297">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/car:cars</status>
</kw>
<doc>Send a request to create a data item in the test list and check that the request went OK.</doc>
<status status="FAIL" start="2026-08-23T02:12:29.034720" elapsed="0.255267">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/car:cars</status>
</test>
<test id="s1-s4-s2-t23" name="Check_Item1_Is_Created" line="174">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-08-23T02:12:29.293611" elapsed="0.000214"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:12:29.293349" elapsed="0.000562"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:12:29.294917" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:29.294789" elapsed="0.000175"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:29.294770" elapsed="0.000217"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:12:29.300037" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:29.299930" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:29.299912" elapsed="0.000194"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.301160" 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-08-23T02:12:29.300759" elapsed="0.000428"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.301640" 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-08-23T02:12:29.301345" elapsed="0.000322"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:12:29.301712" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:12:29.301884" 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-08-23T02:12:29.300382" elapsed="0.001529"/>
</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-08-23T02:12:29.307363" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:29.307255" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:29.307235" elapsed="0.000197"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:12:29.308694" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:29.308586" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:29.308567" elapsed="0.000196"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:12:29.309327" level="INFO">${karaf_connection_index} = 11</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-08-23T02:12:29.308929" elapsed="0.000424"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:12:29.309777" level="INFO">${current_connection_index} = 13</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-08-23T02:12:29.309510" elapsed="0.000294"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:12:29.341278" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:12:29.310400" elapsed="0.031076"/>
</kw>
<msg time="2026-08-23T02:12:29.341675" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:12:29.341723" 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 "n "e "t "c "o "n "f "...</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-08-23T02:12:29.309980" elapsed="0.031780"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:12:29.357702" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "h "e "c "k "_ "I "t "e "m "1 "_ "I "s "_ "C "r "e "a "t "e "d "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-08-23T02:12:29.342398" elapsed="0.015520"/>
</kw>
<msg time="2026-08-23T02:12:29.358107" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:12:29.358154" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "h "e "c "k "_ "I "t "e "m "1 "_ "I "s "_ "C "r "e "a ...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:12:29.341969" elapsed="0.016222"/>
</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-08-23T02:12:29.358500" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:29.358273" elapsed="0.000307"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:29.358251" elapsed="0.000355"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.359169" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "h "e "c "k "_ "I "t "e "m "1 "_ "I "s "_ "C "r "e "a "t "e "d "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:29.358749" elapsed="0.000486"/>
</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-08-23T02:12:29.359517" elapsed="0.000071"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:29.359302" elapsed="0.000345"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:29.359284" elapsed="0.000388"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:12:29.359708" elapsed="0.000034"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-23T02:12:29.363283" elapsed="0.000150"/>
</kw>
<msg time="2026-08-23T02:12:29.363509" 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-08-23T02:12:29.362504" elapsed="0.001112"/>
</kw>
<kw name="Open 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-08-23T02:12:29.364774" elapsed="0.000041"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.366103" elapsed="0.000040"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:12:29.360683" elapsed="0.005544"/>
</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-08-23T02:12:29.360019" elapsed="0.006339"/>
</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-08-23T02:12:29.308282" elapsed="0.058177"/>
</kw>
<msg time="2026-08-23T02:12:29.366551" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:12:29.366597" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "h "e "c "k "_ "I "t "e "m "1 "_ "I "s "_ "C "r "e "a ...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:12:29.307586" elapsed="0.059049"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:12:29.366819" elapsed="0.000138"/>
</return>
<status status="PASS" start="2026-08-23T02:12:29.366711" elapsed="0.000282"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:29.366692" elapsed="0.000326"/>
</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-08-23T02:12:29.367418" 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-08-23T02:12:29.367757" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:12:29.367829" elapsed="0.000033"/>
</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-08-23T02:12:29.306914" elapsed="0.061043"/>
</kw>
<msg time="2026-08-23T02:12:29.368052" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:12:29.368096" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "h "e "c "k "_ "I "t "e "m "1 "_ "I "s "_ "C "r "e "a ...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:12:29.302280" elapsed="0.065854"/>
</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-08-23T02:12:29.368512" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:29.368221" elapsed="0.000350"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:29.368203" elapsed="0.000392"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:12:29.302135" elapsed="0.066483"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:12:29.301965" elapsed="0.066686"/>
</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-08-23T02:12:29.299556" elapsed="0.069151"/>
</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-08-23T02:12:29.294484" elapsed="0.074278"/>
</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-08-23T02:12:29.294059" elapsed="0.074746"/>
</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-08-23T02:12:29.290967" elapsed="0.078019"/>
</kw>
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.369813" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:29.369426" elapsed="0.000434"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.377511" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:29.377260" elapsed="0.000298"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.378026" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:29.377757" elapsed="0.000314"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:12:29.383978" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:29.384028" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:29.384130" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:12:29.380276" elapsed="0.004282">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:12:29.378138" elapsed="0.006506">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.384826" elapsed="0.000038"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:29.384677" elapsed="0.000231"/>
</branch>
<status status="FAIL" start="2026-08-23T02:12:29.378119" elapsed="0.006813">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.385298" elapsed="0.000025"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:29.385429" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:29.385393" elapsed="0.000078"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:29.385376" elapsed="0.000117"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.385631" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:12:29.385700" elapsed="0.000014"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:12:29.372604" elapsed="0.013199">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:29.385889" elapsed="0.000016"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:12:29.370072" elapsed="0.015913">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:12:29.386037" elapsed="0.000015"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:12:29.369148" elapsed="0.016979">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>&lt;id&gt;SMALL&lt;/id&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.386316" elapsed="0.000021"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>&lt;model&gt;Isetta&lt;/model&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.386479" elapsed="0.000020"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>&lt;manufacturer&gt;BMW&lt;/manufacturer&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.386638" elapsed="0.000020"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>&lt;year&gt;1953&lt;/year&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.386797" elapsed="0.000020"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>&lt;category&gt;microcar&lt;/category&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.386978" elapsed="0.000020"/>
</kw>
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>&lt;id&gt;TOYOTA&lt;/id&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.387139" elapsed="0.000020"/>
</kw>
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>&lt;model&gt;Camry&lt;/model&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.387305" elapsed="0.000020"/>
</kw>
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>&lt;manufacturer&gt;Toyota&lt;/manufacturer&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.387465" elapsed="0.000060"/>
</kw>
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>&lt;year&gt;1982&lt;/year&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.387674" elapsed="0.000020"/>
</kw>
<kw name="Should Not Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>&lt;category&gt;sedan&lt;/category&gt;</arg>
<doc>Fails if ``container`` contains ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.387848" elapsed="0.000022"/>
</kw>
<doc>Get the device data as XML and make sure it matches the content posted as JSON in the previous case.</doc>
<status status="FAIL" start="2026-08-23T02:12:29.290364" elapsed="0.097650">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</test>
<test id="s1-s4-s2-t24" name="Add_Device_Data_Item_2_Via_JSON_Post" line="188">
<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-08-23T02:12:29.392873" elapsed="0.000298"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:12:29.392489" elapsed="0.000764"/>
</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-08-23T02:12:29.394675" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:29.394522" elapsed="0.000218"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:29.394495" elapsed="0.000276"/>
</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-08-23T02:12:29.401779" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:29.401672" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:29.401653" elapsed="0.000210"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.402859" 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-08-23T02:12:29.402462" elapsed="0.000425"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.403347" 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-08-23T02:12:29.403044" elapsed="0.000329"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:12:29.403417" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:12:29.403573" 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-08-23T02:12:29.402087" elapsed="0.001510"/>
</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-08-23T02:12:29.409141" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:29.409033" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:29.409013" elapsed="0.000197"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:12:29.410447" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:29.410339" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:29.410320" elapsed="0.000195"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:12:29.411064" level="INFO">${karaf_connection_index} = 11</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-08-23T02:12:29.410656" elapsed="0.000435"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:12:29.411503" level="INFO">${current_connection_index} = 13</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-08-23T02:12:29.411246" elapsed="0.000284"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:12:29.441273" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:12:29.412118" elapsed="0.029339"/>
</kw>
<msg time="2026-08-23T02:12:29.441641" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:12:29.441687" 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 "n "e "t "c "o "n "f "...</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-08-23T02:12:29.411685" elapsed="0.030038"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:12:29.462739" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "A "d "d "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "I "t "e "m "_ "2 "_ "V "i "a "_ "J "S "O "N "_ "P "o "s "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-08-23T02:12:29.442308" elapsed="0.020651"/>
</kw>
<msg time="2026-08-23T02:12:29.463141" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:12:29.463186" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "A "d "d "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "I "t "e ...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:12:29.441908" elapsed="0.021314"/>
</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-08-23T02:12:29.463558" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:29.463336" elapsed="0.000302"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:29.463315" elapsed="0.000349"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.464260" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "A "d "d "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "I "t "e "m "_ "2 "_ "V "i "a "_ "J "S "O "N "_ "P "o "s "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-08-23T02:12:29.463803" elapsed="0.000541"/>
</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-08-23T02:12:29.464627" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:29.464411" elapsed="0.000296"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:29.464393" elapsed="0.000340"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:12:29.464767" 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-08-23T02:12:29.468190" elapsed="0.000187"/>
</kw>
<msg time="2026-08-23T02:12:29.468455" 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-08-23T02:12:29.467395" elapsed="0.001165"/>
</kw>
<kw name="Open 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-08-23T02:12:29.469787" elapsed="0.000041"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.471112" elapsed="0.000039"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:12:29.465640" elapsed="0.005594"/>
</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-08-23T02:12:29.465049" elapsed="0.006314"/>
</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-08-23T02:12:29.410032" elapsed="0.061434"/>
</kw>
<msg time="2026-08-23T02:12:29.471560" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:12:29.471604" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "A "d "d "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "I "t "e ...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:12:29.409360" elapsed="0.062281"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:12:29.472101" elapsed="0.000031"/>
</return>
<status status="PASS" start="2026-08-23T02:12:29.471717" elapsed="0.000458"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:29.471698" elapsed="0.000507"/>
</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-08-23T02:12:29.472629" 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-08-23T02:12:29.472975" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:12:29.473047" 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-08-23T02:12:29.408680" elapsed="0.064475"/>
</kw>
<msg time="2026-08-23T02:12:29.473247" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:12:29.473290" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "A "d "d "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "I "t "e ...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:12:29.404042" elapsed="0.069285"/>
</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-08-23T02:12:29.473648" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:29.473400" elapsed="0.000334"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:29.473383" elapsed="0.000377"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:12:29.403899" elapsed="0.069885"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:12:29.403703" elapsed="0.070111"/>
</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-08-23T02:12:29.401308" elapsed="0.072688"/>
</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-08-23T02:12:29.394068" elapsed="0.079983"/>
</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-08-23T02:12:29.393461" elapsed="0.080633"/>
</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-08-23T02:12:29.389245" elapsed="0.084945"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.474808" level="INFO">${mapping} = {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping}</var>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-23T02:12:29.474374" elapsed="0.000477"/>
</kw>
<kw name="Post_As_Json_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-08-23T02:12:29.519770" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item2.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:29.519397" elapsed="0.000402"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T02:12:29.520582" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/item2.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-23T02:12:29.520335" elapsed="0.000315">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/item2.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-23T02:12:29.520744" 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-08-23T02:12:29.519974" elapsed="0.000795"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.521333" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item2/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-08-23T02:12:29.520950" elapsed="0.000410"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:12:29.521653" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/item2/location.uri"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/item2/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:12:29.521799" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount/car:cars
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:12:29.521519" elapsed="0.000305"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.522237" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount/car:cars
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:29.521994" 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-08-23T02:12:29.523229" level="INFO">mapping: {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:29.522973" elapsed="0.000301"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.523687" 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-08-23T02:12:29.523427" elapsed="0.000285"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.524394" level="INFO">${value} = netconf-test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:12:29.524073" elapsed="0.000347"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:12:29.525388" level="INFO">${encoded} = netconf-test-device</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-08-23T02:12:29.525126" elapsed="0.000289"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:12:29.525467" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T02:12:29.525629" level="INFO">${encoded_value} = netconf-test-device</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-08-23T02:12:29.524787" elapsed="0.000866"/>
</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-08-23T02:12:29.525804" elapsed="0.000266"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:12:29.523940" elapsed="0.002171"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.526661" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:12:29.526361" elapsed="0.000326"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:12:29.527444" level="INFO">${encoded} = /rests</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-08-23T02:12:29.527208" elapsed="0.000262"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:12:29.527519" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:12:29.527669" level="INFO">${encoded_value} = /rests</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-08-23T02:12:29.526892" elapsed="0.000801"/>
</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-08-23T02:12:29.527863" elapsed="0.000224"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-23T02:12:29.526229" elapsed="0.001899"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-23T02:12:29.523759" elapsed="0.005025"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-23T02:12:29.528849" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T02:12:29.529016" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-23T02:12:29.522638" elapsed="0.006403"/>
</kw>
<status status="PASS" start="2026-08-23T02:12:29.522347" elapsed="0.006726"/>
</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-08-23T02:12:29.529250" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:29.529099" elapsed="0.000207"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:29.522328" elapsed="0.006999"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.530063" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/car:cars</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-08-23T02:12:29.529466" elapsed="0.000625"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T02:12:29.530139" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item2.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item2.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item2/${file_name}.</doc>
<status status="PASS" start="2026-08-23T02:12:29.518757" elapsed="0.011505"/>
</kw>
<msg time="2026-08-23T02:12:29.530316" 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-08-23T02:12:29.506108" elapsed="0.024255"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item2.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item2.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item2/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.542825" elapsed="0.000052"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item2.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item2.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item2/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.555185" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item2.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item2.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item2/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.567480" 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-08-23T02:12:29.567677" 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-08-23T02:12:29.567868" 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-08-23T02:12:29.568253" elapsed="0.000058"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:29.568110" elapsed="0.000244"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:29.568093" elapsed="0.000286"/>
</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-08-23T02:12:29.568522" 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-08-23T02:12:29.568692" 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-08-23T02:12:29.568874" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T02:12:29.568062" elapsed="0.000867"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T02:12:29.567954" elapsed="0.001002"/>
</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-08-23T02:12:29.569100" elapsed="0.000080"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:29.569241" elapsed="0.000016"/>
</return>
<msg time="2026-08-23T02:12:29.569372" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/car:cars</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-08-23T02:12:29.501881" elapsed="0.067517"/>
</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-08-23T02:12:29.594400" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item2.vanadium/post_data.json</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-08-23T02:12:29.594019" elapsed="0.000410"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T02:12:29.595199" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/item2.vanadium/post_data.json' 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-08-23T02:12:29.594936" elapsed="0.000343">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/item2.vanadium/post_data.json' does not exist.</status>
</kw>
<msg time="2026-08-23T02:12:29.595375" 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-08-23T02:12:29.594587" elapsed="0.000812"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.595970" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item2/post_data.json</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-08-23T02:12:29.595560" elapsed="0.000437"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:12:29.596320" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/item2/post_data.json"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/item2/post_data.json&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:12:29.596560" level="INFO">${template} = {
  "car:car-entry": {
    "car:id":"TOYOTA",
    "car:model":"Camry",
    "car:manufacturer":"Toyota",
    "car:year":"1982",
    "car:category":"sedan"
  }
}
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:12:29.596157" elapsed="0.000431"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.597008" level="INFO">{
  "car:car-entry": {
    "car:id":"TOYOTA",
    "car:model":"Camry",
    "car:manufacturer":"Toyota",
    "car:year":"1982",
    "car:category":"sedan"
  }
}
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:29.596741" elapsed="0.000312"/>
</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-08-23T02:12:29.597408" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:29.597118" elapsed="0.000349"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.597940" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</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-08-23T02:12:29.597632" elapsed="0.000334"/>
</kw>
<status status="PASS" start="2026-08-23T02:12:29.597492" elapsed="0.000510"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:29.597100" elapsed="0.000924"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.598600" level="INFO">${final_text} = {
  "car:car-entry": {
    "car:id":"TOYOTA",
    "car:model":"Camry",
    "car:manufacturer":"Toyota",
    "car:year":"1982",
    "car:category":"sedan"
  }
}</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-08-23T02:12:29.598163" elapsed="0.000465"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T02:12:29.598677" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item2.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item2.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item2/${file_name}.</doc>
<status status="PASS" start="2026-08-23T02:12:29.593389" elapsed="0.005414"/>
</kw>
<msg time="2026-08-23T02:12:29.598878" 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-08-23T02:12:29.580400" elapsed="0.018527"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item2.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item2.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item2/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.611319" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item2.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item2.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item2/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.623610" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item2.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item2.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item2/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.635809" elapsed="0.000042"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.636016" 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-08-23T02:12:29.636186" 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-08-23T02:12:29.636584" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:29.636442" elapsed="0.000199"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:29.636427" 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-08-23T02:12:29.636800" 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-08-23T02:12:29.636982" 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-08-23T02:12:29.637143" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T02:12:29.636397" elapsed="0.000803"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T02:12:29.636261" elapsed="0.000965"/>
</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-08-23T02:12:29.637366" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:29.637441" elapsed="0.000015"/>
</return>
<msg time="2026-08-23T02:12:29.637553" level="INFO">${data} = {
  "car:car-entry": {
    "car:id":"TOYOTA",
    "car:model":"Camry",
    "car:manufacturer":"Toyota",
    "car:year":"1982",
    "car:category":"sedan"
  }
}</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-08-23T02:12:29.579460" elapsed="0.058120"/>
</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-08-23T02:12:29.638815" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/item2/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-08-23T02:12:29.638582" elapsed="0.000315">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/item2/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-23T02:12:29.638991" 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-08-23T02:12:29.638248" 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-08-23T02:12:29.639324" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:29.639084" elapsed="0.000297"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.639888" 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-08-23T02:12:29.639578" elapsed="0.000337"/>
</kw>
<status status="PASS" start="2026-08-23T02:12:29.639405" elapsed="0.000577"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:29.639066" elapsed="0.000939"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.642557" 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-08-23T02:12:29.640155" elapsed="0.002430"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-23T02:12:29.642637" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:12:29.642792" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/item2/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-23T02:12:29.637928" elapsed="0.004889"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.644370" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/car:cars</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:29.644108" elapsed="0.000309"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.644806" level="INFO">{
  "car:car-entry": {
    "car:id":"TOYOTA",
    "car:model":"Camry",
    "car:manufacturer":"Toyota",
    "car:year":"1982",
    "car:category":"sedan"
  }
}</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:29.644566" elapsed="0.000301"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.645262" 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-08-23T02:12:29.645015" elapsed="0.000291"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.645691" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:29.645453" elapsed="0.000281"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-08-23T02:12:29.646595" 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-08-23T02:12:29.646396" elapsed="0.000225"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-08-23T02:12:29.646964" 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-08-23T02:12:29.646771" elapsed="0.000218"/>
</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-08-23T02:12:29.647136" elapsed="0.000199"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.647737" 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-08-23T02:12:29.647490" elapsed="0.000290"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-08-23T02:12:29.647822" elapsed="0.000044"/>
</return>
<msg time="2026-08-23T02:12:29.647995" 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-08-23T02:12:29.645951" elapsed="0.002069"/>
</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-08-23T02:12:29.654195" level="INFO">POST Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/car:cars 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/car:cars 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Type': 'application/json', 'Content-Length': '159', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body={
  "car:car-entry": {
    "car:id":"TOYOTA",
    "car:model":"Camry",
    "car:manufacturer":"Toyota",
    "car:year":"1982",
    "car:category":"sedan"
  }
} 
 </msg>
<msg time="2026-08-23T02:12:29.654252" level="INFO">POST Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/car:cars 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '482'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/car:cars&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:12:29.654365" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/car:cars</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:12:29.650185" elapsed="0.004566">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/car:cars</status>
</kw>
<status status="FAIL" start="2026-08-23T02:12:29.648089" elapsed="0.006766">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/car:cars</status>
</branch>
<branch type="ELSE">
<kw name="POST On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.655041" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:29.654890" elapsed="0.000217"/>
</branch>
<status status="FAIL" start="2026-08-23T02:12:29.648071" elapsed="0.007059">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/car:cars</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.655534" elapsed="0.000025"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:29.655668" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:29.655632" elapsed="0.000078"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:29.655616" elapsed="0.000115"/>
</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-08-23T02:12:29.655889" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:12:29.655958" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>content_type=${content_type}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>POST data to given URI, check status code and return response text.
${content_type} and ${accept} are mandatory Python objects with headers to use.
If ${normalize_json}, normalize text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:12:29.643164" elapsed="0.012899">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/car:cars</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:29.656142" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>extension=json</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>content_type=${HEADERS_YANG_JSON}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>endline=${\n}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve URI and data from folder, call Post_To_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-23T02:12:29.490799" elapsed="0.165443">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/car:cars</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Json_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=response</arg>
<arg>mapping=${mapping}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected JSON data, should be equal to provided ${response}.
JSON normalization is used, endlines enabled for readability.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.656573" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:29.656387" elapsed="0.000254"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:29.656369" elapsed="0.000300"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:29.656703" elapsed="0.000014"/>
</return>
<arg>${directory_with_template_folders}${/}item2</arg>
<arg>${mapping}</arg>
<doc>Add arguments sensible for JSON data, return Post_Templated response text.
Optionally, verification against response.json (no iteration) is called.
Only subset of JSON data is verified and returned if JMES path is specified in
file ${folder}/jmespath.expr.
Response status code must be one of values from ${explicit_status_codes} if specified or one of set
created from all positive HTTP status codes together with ${additional_allowed_status_codes}.</doc>
<status status="FAIL" start="2026-08-23T02:12:29.486390" elapsed="0.170409">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/car:cars</status>
</kw>
<doc>Send a JSON request to change the sample test data and check that the request went OK.</doc>
<status status="FAIL" start="2026-08-23T02:12:29.388442" elapsed="0.268543">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/car:cars</status>
</test>
<test id="s1-s4-s2-t25" name="Check_Item2_Is_Created" line="193">
<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-08-23T02:12:29.665262" elapsed="0.000238"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:12:29.664866" elapsed="0.000690"/>
</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-08-23T02:12:29.666530" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:29.666420" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:29.666401" 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-08-23T02:12:29.671518" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:29.671410" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:29.671392" elapsed="0.000194"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.672697" 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-08-23T02:12:29.672274" elapsed="0.000450"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.673194" 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-08-23T02:12:29.672898" elapsed="0.000322"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:12:29.673264" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:12:29.673417" 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-08-23T02:12:29.671807" elapsed="0.001634"/>
</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-08-23T02:12:29.678920" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:29.678783" elapsed="0.000183"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:29.678765" elapsed="0.000223"/>
</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-08-23T02:12:29.680251" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:29.680145" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:29.680127" elapsed="0.000191"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:12:29.680891" level="INFO">${karaf_connection_index} = 11</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-08-23T02:12:29.680471" elapsed="0.000447"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:12:29.681348" level="INFO">${current_connection_index} = 13</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-08-23T02:12:29.681072" elapsed="0.000302"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:12:29.712865" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:12:29.681946" elapsed="0.031117"/>
</kw>
<msg time="2026-08-23T02:12:29.713255" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:12:29.713303" 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 "n "e "t "c "o "n "f "...</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-08-23T02:12:29.681530" elapsed="0.031811"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:12:29.731245" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "h "e "c "k "_ "I "t "e "m "2 "_ "I "s "_ "C "r "e "a "t "e "d "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-08-23T02:12:29.713970" elapsed="0.017765"/>
</kw>
<msg time="2026-08-23T02:12:29.732234" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:12:29.732343" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "h "e "c "k "_ "I "t "e "m "2 "_ "I "s "_ "C "r "e "a ...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:12:29.713512" elapsed="0.018961"/>
</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-08-23T02:12:29.733168" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:29.732666" elapsed="0.000585"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:29.732621" elapsed="0.000657"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.733830" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "h "e "c "k "_ "I "t "e "m "2 "_ "I "s "_ "C "r "e "a "t "e "d "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:29.733420" elapsed="0.000504"/>
</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-08-23T02:12:29.734206" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:29.733991" elapsed="0.000300"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:29.733973" elapsed="0.000343"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:12:29.734350" 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-08-23T02:12:29.737911" elapsed="0.000150"/>
</kw>
<msg time="2026-08-23T02:12:29.738139" 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-08-23T02:12:29.737056" elapsed="0.001195"/>
</kw>
<kw name="Open 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-08-23T02:12:29.739625" elapsed="0.000041"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.740791" elapsed="0.000119"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:12:29.735252" elapsed="0.005747"/>
</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-08-23T02:12:29.734621" elapsed="0.006505"/>
</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-08-23T02:12:29.679816" elapsed="0.061410"/>
</kw>
<msg time="2026-08-23T02:12:29.741318" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:12:29.741363" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "h "e "c "k "_ "I "t "e "m "2 "_ "I "s "_ "C "r "e "a ...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:12:29.679137" elapsed="0.062263"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:12:29.741624" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:12:29.741514" elapsed="0.000169"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:29.741494" 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-08-23T02:12:29.742116" 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-08-23T02:12:29.742448" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:12:29.742519" 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-08-23T02:12:29.678448" elapsed="0.064179"/>
</kw>
<msg time="2026-08-23T02:12:29.742719" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:12:29.742763" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "h "e "c "k "_ "I "t "e "m "2 "_ "I "s "_ "C "r "e "a ...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:12:29.673854" elapsed="0.068945"/>
</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-08-23T02:12:29.743293" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:29.743046" elapsed="0.000301"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:29.743028" elapsed="0.000342"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:12:29.673699" elapsed="0.069695"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:12:29.673528" elapsed="0.069895"/>
</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-08-23T02:12:29.671047" elapsed="0.072430"/>
</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-08-23T02:12:29.666135" elapsed="0.077396"/>
</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-08-23T02:12:29.665702" elapsed="0.077872"/>
</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-08-23T02:12:29.658953" elapsed="0.084672"/>
</kw>
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.744468" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:29.744066" elapsed="0.000430"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.751976" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:29.751674" elapsed="0.000351"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.752437" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:29.752179" elapsed="0.000303"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:12:29.758327" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:29.758378" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:29.758497" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:12:29.754660" elapsed="0.004277">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:12:29.752550" elapsed="0.006471">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.759208" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:29.759056" elapsed="0.000217"/>
</branch>
<status status="FAIL" start="2026-08-23T02:12:29.752530" elapsed="0.006816">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.759747" elapsed="0.000027"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:29.759902" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:29.759861" elapsed="0.000084"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:29.759827" elapsed="0.000140"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.760109" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:12:29.760180" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:12:29.747098" elapsed="0.013189">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:29.760356" elapsed="0.000035"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:12:29.744705" elapsed="0.015776">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:12:29.760535" elapsed="0.000015"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:12:29.743780" elapsed="0.016846">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>&lt;id&gt;SMALL&lt;/id&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.760787" elapsed="0.000021"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>&lt;model&gt;Isetta&lt;/model&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.760970" elapsed="0.000021"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>&lt;manufacturer&gt;BMW&lt;/manufacturer&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.761134" elapsed="0.000022"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>&lt;year&gt;1953&lt;/year&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.761299" elapsed="0.000020"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>&lt;category&gt;microcar&lt;/category&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.761460" elapsed="0.000019"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>&lt;id&gt;TOYOTA&lt;/id&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.761620" elapsed="0.000019"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>&lt;model&gt;Camry&lt;/model&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.761779" elapsed="0.000019"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>&lt;manufacturer&gt;Toyota&lt;/manufacturer&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.761957" elapsed="0.000020"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>&lt;year&gt;1982&lt;/year&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.762118" elapsed="0.000020"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>&lt;category&gt;sedan&lt;/category&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.762277" elapsed="0.000020"/>
</kw>
<doc>Get the device data as XML and make sure it matches the content posted as JSON in the previous case.</doc>
<status status="FAIL" start="2026-08-23T02:12:29.657894" elapsed="0.104555">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</test>
<test id="s1-s4-s2-t26" name="Delete_Device_Data" line="207">
<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-08-23T02:12:29.766139" elapsed="0.000219"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:12:29.765874" 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-08-23T02:12:29.767420" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:29.767309" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:29.767290" 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-08-23T02:12:29.772626" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:29.772518" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:29.772499" elapsed="0.000195"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.773699" 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-08-23T02:12:29.773314" elapsed="0.000412"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.774240" 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-08-23T02:12:29.773938" elapsed="0.000328"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:12:29.774312" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T02:12:29.774470" 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-08-23T02:12:29.772940" elapsed="0.001555"/>
</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-08-23T02:12:29.779949" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:29.779823" elapsed="0.000172"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:29.779803" elapsed="0.000215"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:12:29.781308" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:29.781200" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:29.781182" elapsed="0.000195"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:12:29.781939" level="INFO">${karaf_connection_index} = 11</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-08-23T02:12:29.781521" elapsed="0.000445"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:12:29.782473" level="INFO">${current_connection_index} = 13</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-08-23T02:12:29.782163" elapsed="0.000337"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:12:29.819565" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:12:29.783090" elapsed="0.036663"/>
</kw>
<msg time="2026-08-23T02:12:29.819968" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:12:29.820015" 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 "n "e "t "c "o "n "f "...</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-08-23T02:12:29.782660" elapsed="0.037392"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:12:29.836940" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "D "e "l "e "t "e "_ "D "e "v "i "c "e "_ "D "a "t "a "[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-08-23T02:12:29.820671" elapsed="0.016464"/>
</kw>
<msg time="2026-08-23T02:12:29.837319" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:12:29.837365" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "D "e "l "e "t "e "_ "D "e "v "i "c "e "_ "D "a "t "a "[...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:12:29.820223" elapsed="0.017179"/>
</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-08-23T02:12:29.837701" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:29.837479" elapsed="0.000300"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:29.837459" elapsed="0.000345"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.838377" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "D "e "l "e "t "e "_ "D "e "v "i "c "e "_ "D "a "t "a "[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-08-23T02:12:29.837974" elapsed="0.000468"/>
</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-08-23T02:12:29.838722" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:29.838508" elapsed="0.000291"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:29.838490" elapsed="0.000334"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:12:29.838877" 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-08-23T02:12:29.842297" elapsed="0.000150"/>
</kw>
<msg time="2026-08-23T02:12:29.842524" 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-08-23T02:12:29.841533" elapsed="0.001095"/>
</kw>
<kw name="Open 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-08-23T02:12:29.843879" elapsed="0.000043"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.845051" elapsed="0.000038"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:12:29.839745" elapsed="0.005426"/>
</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-08-23T02:12:29.839149" elapsed="0.006190"/>
</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-08-23T02:12:29.780897" elapsed="0.064544"/>
</kw>
<msg time="2026-08-23T02:12:29.845533" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:12:29.845580" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "D "e "l "e "t "e "_ "D "e "v "i "c "e "_ "D "a "t "a "[...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:12:29.780170" elapsed="0.065448"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:12:29.846020" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-08-23T02:12:29.845694" elapsed="0.000390"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:29.845676" elapsed="0.000432"/>
</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-08-23T02:12:29.846503" 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-08-23T02:12:29.847156" elapsed="0.000028"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:12:29.847232" 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-08-23T02:12:29.779480" elapsed="0.067863"/>
</kw>
<msg time="2026-08-23T02:12:29.847436" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:12:29.847480" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "D "e "l "e "t "e "_ "D "e "v "i "c "e "_ "D "a "t "a "[...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:12:29.774888" elapsed="0.072629"/>
</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-08-23T02:12:29.847854" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:29.847592" elapsed="0.000318"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:29.847574" elapsed="0.000360"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:12:29.774731" elapsed="0.073226"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:12:29.774553" elapsed="0.073436"/>
</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-08-23T02:12:29.772117" elapsed="0.075926"/>
</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-08-23T02:12:29.767020" elapsed="0.081077"/>
</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-08-23T02:12:29.766564" elapsed="0.081577"/>
</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-08-23T02:12:29.763437" elapsed="0.084761"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.848846" level="INFO">${mapping} = {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping}</var>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-23T02:12:29.848362" elapsed="0.000513"/>
</kw>
<kw name="Delete_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-08-23T02:12:29.891076" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:29.890683" elapsed="0.000422"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T02:12:29.891865" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamod1.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-23T02:12:29.891596" elapsed="0.000342">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamod1.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-23T02:12:29.892033" 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-08-23T02:12:29.891266" elapsed="0.000792"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.892637" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1/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-08-23T02:12:29.892225" elapsed="0.000439"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:12:29.893026" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamod1/location.uri"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/datamod1/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:12:29.893183" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount/test:cont
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:12:29.892884" elapsed="0.000325"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.893612" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount/test:cont
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:29.893366" 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-08-23T02:12:29.894621" level="INFO">mapping: {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:29.894361" elapsed="0.000304"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.895103" 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-08-23T02:12:29.894821" elapsed="0.000308"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.895774" level="INFO">${value} = netconf-test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:12:29.895479" elapsed="0.000320"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:12:29.896763" level="INFO">${encoded} = netconf-test-device</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-08-23T02:12:29.896326" elapsed="0.000464"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:12:29.896861" elapsed="0.000032"/>
</return>
<msg time="2026-08-23T02:12:29.897019" level="INFO">${encoded_value} = netconf-test-device</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-08-23T02:12:29.896003" elapsed="0.001041"/>
</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-08-23T02:12:29.897195" elapsed="0.000252"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:12:29.895346" elapsed="0.002143"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.898054" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:12:29.897733" elapsed="0.000347"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:12:29.898935" level="INFO">${encoded} = /rests</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-08-23T02:12:29.898703" elapsed="0.000258"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:12:29.899011" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:12:29.899162" level="INFO">${encoded_value} = /rests</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-08-23T02:12:29.898265" elapsed="0.000922"/>
</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-08-23T02:12:29.899337" elapsed="0.000224"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-23T02:12:29.897603" elapsed="0.001998"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-23T02:12:29.895179" elapsed="0.004457"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-23T02:12:29.899679" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:12:29.899853" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-23T02:12:29.894038" elapsed="0.005843"/>
</kw>
<status status="PASS" start="2026-08-23T02:12:29.893726" elapsed="0.006188"/>
</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-08-23T02:12:29.900085" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:29.899939" elapsed="0.000201"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:29.893707" elapsed="0.006455"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.900943" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</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-08-23T02:12:29.900301" elapsed="0.000670"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T02:12:29.901020" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1/${file_name}.</doc>
<status status="PASS" start="2026-08-23T02:12:29.890070" elapsed="0.011075"/>
</kw>
<msg time="2026-08-23T02:12:29.901198" 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-08-23T02:12:29.877349" elapsed="0.023896"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.913711" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.926003" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD/../../../variables/netconf/CRUD/datamod1/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.939187" 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-08-23T02:12:29.939409" 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-08-23T02:12:29.939589" 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-08-23T02:12:29.939993" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:29.939827" elapsed="0.000223"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:29.939811" 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-08-23T02:12:29.940212" 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-08-23T02:12:29.940376" 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-08-23T02:12:29.940551" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T02:12:29.939776" elapsed="0.000829"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T02:12:29.939670" 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-08-23T02:12:29.940772" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:29.940896" elapsed="0.000018"/>
</return>
<msg time="2026-08-23T02:12:29.941079" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</msg>
<var>${uri}</var>
<arg>folder=${folder}</arg>
<arg>base_name=${location}</arg>
<arg>extension=uri</arg>
<arg>mapping=${mapping}</arg>
<arg>percent_encode=True</arg>
<doc>Read a template from folder, strip endline, make changes according to mapping, return the result.
If ${iterations} value is present, put text together from "prolog", "item" and "epilog" parts,
where additional template variable ${i} goes from ${iter_start}, by one ${iterations} times.
Template variable ${j} is calculated as ${i} incremented by offset ${iter_j_offset} ( j = i + iter_j_offset )
used to create non uniform data in order to be able to validate UPDATE operations.
POST (as opposed to PUT) needs slightly different data, ${name_prefix} may be used to distinguish.
(Actually, it is GET who formats data differently when URI is a top-level container.)</doc>
<status status="PASS" start="2026-08-23T02:12:29.873069" elapsed="0.068039"/>
</kw>
<kw name="Delete_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.942243" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:29.941987" elapsed="0.000302"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="DELETE On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:12:29.947823" level="INFO">DELETE Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Length': '0', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:29.947892" level="INFO">DELETE Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont 
 status=404, reason=Not Found 
 headers={'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:29.948628" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:12:29.944393" elapsed="0.004647">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</status>
</kw>
<status status="FAIL" start="2026-08-23T02:12:29.942355" elapsed="0.006765">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</status>
</branch>
<branch type="ELSE">
<kw name="DELETE On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.949303" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:29.949154" elapsed="0.000212"/>
</branch>
<status status="FAIL" start="2026-08-23T02:12:29.942338" elapsed="0.007051">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.949767" elapsed="0.000025"/>
</kw>
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:29.949856" elapsed="0.000017"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>session=${session}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>DELETE resource at URI, check status_code and return response text..</doc>
<status status="FAIL" start="2026-08-23T02:12:29.941384" elapsed="0.008580">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:29.950028" elapsed="0.000015"/>
</return>
<arg>${directory_with_template_folders}${/}datamod1</arg>
<arg>${mapping}</arg>
<doc>Resolve URI from folder, issue DELETE request.</doc>
<status status="FAIL" start="2026-08-23T02:12:29.849097" elapsed="0.101026">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</status>
</kw>
<kw name="Delete_Templated" owner="TemplatedRequests">
<arg>${directory_with_template_folders}${/}item1</arg>
<arg>${mapping}</arg>
<doc>Resolve URI from folder, issue DELETE request.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:29.950358" elapsed="0.000024"/>
</kw>
<doc>Send a request to delete the sample test data on the device and check that the request went OK.</doc>
<status status="FAIL" start="2026-08-23T02:12:29.762884" elapsed="0.187646">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/test:cont</status>
</test>
<test id="s1-s4-s2-t27" name="Check_Device_Data_Is_Deleted" line="213">
<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-08-23T02:12:29.954739" elapsed="0.000246"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:12:29.954475" elapsed="0.000566"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:12:29.956057" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:29.955944" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:29.955924" elapsed="0.000200"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:12:29.961248" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:29.961137" elapsed="0.000160"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:29.961118" elapsed="0.000201"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.962350" 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-08-23T02:12:29.961949" elapsed="0.000428"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:12:29.962830" 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-08-23T02:12:29.962534" elapsed="0.000339"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:12:29.962919" elapsed="0.000033"/>
</return>
<msg time="2026-08-23T02:12:29.963080" 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-08-23T02:12:29.961554" 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-08-23T02:12:29.968597" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:29.968460" elapsed="0.000183"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:29.968440" elapsed="0.000225"/>
</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-08-23T02:12:29.969960" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:29.969826" elapsed="0.000180"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:29.969808" elapsed="0.000220"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:12:29.970577" level="INFO">${karaf_connection_index} = 11</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-08-23T02:12:29.970172" elapsed="0.000482"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:12:29.971110" level="INFO">${current_connection_index} = 13</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-08-23T02:12:29.970815" elapsed="0.000322"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:12:30.003591" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:12:29.971699" elapsed="0.032192"/>
</kw>
<msg time="2026-08-23T02:12:30.004137" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:12:30.004186" 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 "n "e "t "c "o "n "f "...</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-08-23T02:12:29.971300" elapsed="0.032925"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:12:30.022910" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "I "s "_ "D "e "l "e "t "e "d "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-08-23T02:12:30.005030" elapsed="0.018093"/>
</kw>
<msg time="2026-08-23T02:12:30.023325" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:12:30.023371" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "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-08-23T02:12:30.004472" elapsed="0.018937"/>
</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-08-23T02:12:30.023776" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:30.023507" elapsed="0.000374"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:30.023479" elapsed="0.000434"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:30.024495" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "I "s "_ "D "e "l "e "t "e "d "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:30.024058" elapsed="0.000533"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:30.024890" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:30.024657" elapsed="0.000315"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:30.024639" elapsed="0.000358"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:12:30.025037" elapsed="0.000043"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-23T02:12:30.028870" elapsed="0.000160"/>
</kw>
<msg time="2026-08-23T02:12:30.029107" 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-08-23T02:12:30.027868" elapsed="0.001353"/>
</kw>
<kw name="Open 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-08-23T02:12:30.030494" elapsed="0.000042"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:30.031652" elapsed="0.000039"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:12:30.026028" elapsed="0.005746"/>
</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-08-23T02:12:30.025368" elapsed="0.006832"/>
</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-08-23T02:12:29.969524" elapsed="0.062776"/>
</kw>
<msg time="2026-08-23T02:12:30.032393" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:12:30.032438" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "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-08-23T02:12:29.968815" elapsed="0.063665"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:12:30.032677" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:12:30.032569" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:30.032550" 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-08-23T02:12:30.033194" 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-08-23T02:12:30.033534" elapsed="0.000024"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:12:30.033663" elapsed="0.000018"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-08-23T02:12:29.968115" elapsed="0.065663"/>
</kw>
<msg time="2026-08-23T02:12:30.033981" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:12:30.034029" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "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-08-23T02:12:29.963489" elapsed="0.070578"/>
</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-08-23T02:12:30.034400" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:30.034144" elapsed="0.000309"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:30.034125" elapsed="0.000353"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:12:29.963348" elapsed="0.071154"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:12:29.963164" elapsed="0.071374"/>
</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-08-23T02:12:29.960740" elapsed="0.073859"/>
</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-08-23T02:12:29.955633" elapsed="0.079023"/>
</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-08-23T02:12:29.955192" elapsed="0.079510"/>
</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-08-23T02:12:29.951733" elapsed="0.083024"/>
</kw>
<kw name="Regexp Escape" owner="BuiltIn">
<msg time="2026-08-23T02:12:30.035283" level="INFO">${escaped} = urn:ietf:params:xml:ns:netconf:base:1\.0</msg>
<var>${escaped}</var>
<arg>${ODL_NETCONF_NAMESPACE}</arg>
<doc>Returns each argument escaped for use as a regular expression.</doc>
<status status="PASS" start="2026-08-23T02:12:30.034941" elapsed="0.000368"/>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:30.036647" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${device_name}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:30.036249" elapsed="0.000426"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:30.044176" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:30.043925" elapsed="0.000297"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:30.044658" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:30.044372" elapsed="0.000331"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:12:30.050368" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:30.050418" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:30.050521" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:12:30.046822" elapsed="0.004124">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:12:30.044769" elapsed="0.006260">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:30.051214" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:30.051064" elapsed="0.000214"/>
</branch>
<status status="FAIL" start="2026-08-23T02:12:30.044751" elapsed="0.006550">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:30.051674" elapsed="0.000025"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:30.051858" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:30.051804" elapsed="0.000099"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:30.051785" elapsed="0.000140"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:30.052070" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:12:30.052140" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:12:30.039567" elapsed="0.012679">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:30.052316" elapsed="0.000015"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:12:30.036901" elapsed="0.015511">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:12:30.052464" elapsed="0.000016"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:12:30.035980" elapsed="0.016594">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:30.052796" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:30.052647" elapsed="0.000221"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:30.053035" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:30.052892" elapsed="0.000196"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:30.053245" elapsed="0.000019"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:30.053111" elapsed="0.000186"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:30.052631" elapsed="0.000686"/>
</if>
<arg>&lt;data xmlns\="${escaped}"(\/&gt;|&gt;&lt;\/data&gt;)</arg>
<arg>${True}</arg>
<status status="FAIL" start="2026-08-23T02:12:30.035518" elapsed="0.017876">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<doc>Get the device data and make sure it is empty again.</doc>
<status status="FAIL" start="2026-08-23T02:12:29.951111" elapsed="0.102436">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</test>
<test id="s1-s4-s2-t28" name="Deconfigure_Device_From_Netconf" line="218">
<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-08-23T02:12:30.057161" elapsed="0.000214"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:12:30.056896" elapsed="0.000534"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:12:30.058412" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:30.058303" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:30.058284" 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-08-23T02:12:30.063593" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:30.063485" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:30.063467" elapsed="0.000194"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:12:30.064695" 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-08-23T02:12:30.064282" elapsed="0.000440"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:12:30.065197" 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-08-23T02:12:30.064897" elapsed="0.000326"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:12:30.065272" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:12:30.065426" 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-08-23T02:12:30.063904" elapsed="0.001547"/>
</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-08-23T02:12:30.070901" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:30.070776" elapsed="0.000172"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:30.070758" 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-08-23T02:12:30.072239" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:30.072127" elapsed="0.000160"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:30.072108" elapsed="0.000200"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:12:30.072891" level="INFO">${karaf_connection_index} = 11</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-08-23T02:12:30.072453" elapsed="0.000466"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:12:30.073336" level="INFO">${current_connection_index} = 13</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-08-23T02:12:30.073076" elapsed="0.000286"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:12:30.103419" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:12:30.073939" elapsed="0.029676"/>
</kw>
<msg time="2026-08-23T02:12:30.103798" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:12:30.103860" 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 "n "e "t "c "o "n "f "...</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-08-23T02:12:30.073517" elapsed="0.030383"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:12:30.124907" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "D "e "c "o "n "f "i "g "u "r "e "_ "D "e "v "i "c "e "_ "F "r "o "m "_ "N "e "t "c "o "n "f "[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-08-23T02:12:30.104475" elapsed="0.020879"/>
</kw>
<msg time="2026-08-23T02:12:30.125771" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:12:30.125918" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "D "e "c "o "n "f "i "g "u "r "e "_ "D "e "v "i "c "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-08-23T02:12:30.104071" elapsed="0.021934"/>
</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-08-23T02:12:30.126678" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:30.126178" elapsed="0.000708"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:30.126134" elapsed="0.000810"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:30.128196" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "D "e "c "o "n "f "i "g "u "r "e "_ "D "e "v "i "c "e "_ "F "r "o "m "_ "N "e "t "c "o "n "f "[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-08-23T02:12:30.127261" elapsed="0.001090"/>
</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-08-23T02:12:30.129060" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:30.128496" elapsed="0.000740"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:30.128457" elapsed="0.000836"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:12:30.129367" elapsed="0.000062"/>
</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-08-23T02:12:30.134915" elapsed="0.000150"/>
</kw>
<msg time="2026-08-23T02:12:30.135142" 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-08-23T02:12:30.134162" elapsed="0.001091"/>
</kw>
<kw name="Open 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-08-23T02:12:30.136373" elapsed="0.000042"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:30.137723" elapsed="0.000203"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:12:30.131326" elapsed="0.006688"/>
</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-08-23T02:12:30.129972" elapsed="0.008170"/>
</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-08-23T02:12:30.071762" elapsed="0.066488"/>
</kw>
<msg time="2026-08-23T02:12:30.138342" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:12:30.138387" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "D "e "c "o "n "f "i "g "u "r "e "_ "D "e "v "i "c "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-08-23T02:12:30.071120" elapsed="0.067305"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:12:30.138611" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:12:30.138502" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:30.138483" 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-08-23T02:12:30.139199" 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-08-23T02:12:30.139567" elapsed="0.000026"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:12:30.139641" 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-08-23T02:12:30.070439" elapsed="0.069311"/>
</kw>
<msg time="2026-08-23T02:12:30.139859" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:12:30.139906" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "D "e "c "o "n "f "i "g "u "r "e "_ "D "e "v "i "c "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-08-23T02:12:30.065844" elapsed="0.074099"/>
</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-08-23T02:12:30.140267" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:30.140018" elapsed="0.000304"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:30.140001" elapsed="0.000345"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:12:30.065688" elapsed="0.074681"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:12:30.065509" elapsed="0.074890"/>
</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-08-23T02:12:30.063121" elapsed="0.077331"/>
</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-08-23T02:12:30.058018" elapsed="0.082489"/>
</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-08-23T02:12:30.057578" elapsed="0.082974"/>
</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-08-23T02:12:30.054637" elapsed="0.086129"/>
</kw>
<kw name="Remove_Device_From_Netconf" owner="NetconfKeywords">
<kw name="Pop From Dictionary" owner="Collections">
<msg time="2026-08-23T02:12:30.141762" level="FAIL">Dictionary does not contain key 'netconf-test-device'.</msg>
<var>${device_type}</var>
<arg>${NetconfKeywords__mounted_device_types}</arg>
<arg>${device_name}</arg>
<doc>Pops the given ``key`` from the ``dictionary`` and returns its value.</doc>
<status status="FAIL" start="2026-08-23T02:12:30.141493" elapsed="0.000359">Dictionary does not contain key 'netconf-test-device'.</status>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<var>${mapping}</var>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:30.142030" elapsed="0.000022"/>
</kw>
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:30.150387" elapsed="0.000028"/>
</kw>
<kw name="Delete_Templated" owner="TemplatedRequests">
<arg>${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>${mapping}</arg>
<arg>session=${session}</arg>
<arg>location=${location}</arg>
<doc>Resolve URI from folder, issue DELETE request.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:30.150636" elapsed="0.000026"/>
</kw>
<arg>${device_name}</arg>
<doc>Tell Netconf to deconfigure the specified device</doc>
<status status="FAIL" start="2026-08-23T02:12:30.141109" elapsed="0.009679">Dictionary does not contain key 'netconf-test-device'.</status>
</kw>
<doc>Make request to deconfigure the testtool device on Netconf connector.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-08-23T02:12:30.054075" elapsed="0.096867">Dictionary does not contain key 'netconf-test-device'.</status>
</test>
<test id="s1-s4-s2-t29" name="Check_Device_Going_To_Be_Gone_After_Deconfiguring" line="224">
<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-08-23T02:12:30.154930" elapsed="0.000215"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:12:30.154651" elapsed="0.000548"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:12:30.156224" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:30.156107" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:30.156082" elapsed="0.000212"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:12:30.161494" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:30.161384" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:30.161366" elapsed="0.000196"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:12:30.162581" 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-08-23T02:12:30.162182" elapsed="0.000426"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:12:30.163084" 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-08-23T02:12:30.162766" elapsed="0.000344"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:12:30.163155" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:12:30.163309" 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-08-23T02:12:30.161787" elapsed="0.001547"/>
</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-08-23T02:12:30.168883" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:30.168754" elapsed="0.000180"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:30.168734" elapsed="0.000223"/>
</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-08-23T02:12:30.170222" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:30.170110" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:30.170092" elapsed="0.000198"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:12:30.170827" level="INFO">${karaf_connection_index} = 11</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-08-23T02:12:30.170433" elapsed="0.000438"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:12:30.171293" level="INFO">${current_connection_index} = 13</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-08-23T02:12:30.171029" elapsed="0.000290"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:12:30.202122" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:12:30.171891" elapsed="0.030416"/>
</kw>
<msg time="2026-08-23T02:12:30.202494" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:12:30.202541" 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 "n "e "t "c "o "n "f "...</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-08-23T02:12:30.171476" elapsed="0.031101"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:12:30.227934" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "G "o "i "n "g "_ "T "o "_ "B "e "_ "G "o "n "e "_ "A "f "t "e "r "_ "D "e "c "o "n "f "i "g "u "r "i "n "g "[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-08-23T02:12:30.203184" elapsed="0.025195"/>
</kw>
<msg time="2026-08-23T02:12:30.228829" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:12:30.228974" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "G "o "i "n "g "_ ...</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-08-23T02:12:30.202745" elapsed="0.026311"/>
</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-08-23T02:12:30.229520" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:30.229198" elapsed="0.000439"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:30.229170" elapsed="0.000505"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:30.230493" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "G "o "i "n "g "_ "T "o "_ "B "e "_ "G "o "n "e "_ "A "f "t "e "r "_ "D "e "c "o "n "f "i "g "u "r "i "n "g "[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-08-23T02:12:30.229905" elapsed="0.000698"/>
</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-08-23T02:12:30.231046" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:30.230700" elapsed="0.000463"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:30.230674" elapsed="0.000526"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:12:30.231249" elapsed="0.000045"/>
</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-08-23T02:12:30.236305" elapsed="0.000219"/>
</kw>
<msg time="2026-08-23T02:12:30.236684" 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-08-23T02:12:30.235226" elapsed="0.001654"/>
</kw>
<kw name="Open 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-08-23T02:12:30.238756" elapsed="0.002887"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:30.242755" elapsed="0.000042"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:12:30.232564" elapsed="0.010336"/>
</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-08-23T02:12:30.231641" elapsed="0.011391"/>
</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-08-23T02:12:30.169784" elapsed="0.073346"/>
</kw>
<msg time="2026-08-23T02:12:30.243223" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:12:30.243267" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "G "o "i "n "g "_ ...</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-08-23T02:12:30.169115" elapsed="0.074231"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:12:30.243533" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:12:30.243424" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:30.243406" elapsed="0.000210"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:30.244031" 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-08-23T02:12:30.244364" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:12:30.244436" 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-08-23T02:12:30.168362" elapsed="0.076180"/>
</kw>
<msg time="2026-08-23T02:12:30.244647" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:12:30.244720" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D ". "C "R "U "D ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "G "o "i "n "g "_ ...</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-08-23T02:12:30.163753" elapsed="0.081014"/>
</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-08-23T02:12:30.245157" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:30.244886" elapsed="0.000330"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:30.244863" elapsed="0.000379"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:12:30.163613" elapsed="0.081653"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:12:30.163437" elapsed="0.081862"/>
</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-08-23T02:12:30.161019" elapsed="0.084335"/>
</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-08-23T02:12:30.155756" elapsed="0.089653"/>
</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-08-23T02:12:30.155344" elapsed="0.090108"/>
</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-08-23T02:12:30.152506" elapsed="0.092997"/>
</kw>
<kw name="Wait_Device_Fully_Removed" owner="NetconfKeywords">
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Completely_Gone" owner="NetconfKeywords">
<kw name="Check_Device_Has_No_Netconf_Connector" owner="NetconfKeywords">
<kw name="Count_Netconf_Connectors_For_Device" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:30.302414" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:30.256225" elapsed="0.046233"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:30.302939" elapsed="0.000028"/>
</kw>
<var name="${nv}"/>
<status status="NOT RUN" start="2026-08-23T02:12:30.302712" elapsed="0.000293"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="NOT RUN" start="2026-08-23T02:12:30.302546" elapsed="0.000492"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:30.303393" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:30.303116" elapsed="0.000336"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:30.304409" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:30.303757" elapsed="0.000681"/>
</kw>
<status status="PASS" start="2026-08-23T02:12:30.303479" elapsed="0.000996"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:30.304699" elapsed="0.000028"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:30.304501" elapsed="0.000263"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:30.303095" elapsed="0.001691"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:12:30.304827" elapsed="0.000055"/>
</return>
<msg time="2026-08-23T02:12:30.305020" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:12:30.255730" elapsed="0.049317"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:12:30.305097" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:12:30.305248" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:12:30.255188" elapsed="0.050088"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:30.312932" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:30.312622" elapsed="0.000359"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:30.313501" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:30.313134" elapsed="0.000413"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:12:30.319805" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:30.319888" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '407'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:12:30.320019" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:12:30.315680" elapsed="0.004777">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:12:30.313616" elapsed="0.006929">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:30.320771" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:30.320580" elapsed="0.000281"/>
</branch>
<status status="FAIL" start="2026-08-23T02:12:30.313597" elapsed="0.007291">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:30.321287" elapsed="0.000036"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:30.321472" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:30.321421" elapsed="0.000110"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:30.321397" elapsed="0.000166"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:30.321758" elapsed="0.000031"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:12:30.321891" elapsed="0.000024"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:12:30.308126" elapsed="0.013961">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:30.322235" elapsed="0.000031"/>
</return>
<var>${mounts}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:12:30.305600" elapsed="0.016813">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${mounts}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:30.322654" elapsed="0.000030"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${actual_count}</var>
<arg>len('''${mounts}'''.split('"node-id": "${device_name}"'))-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:30.322920" elapsed="0.000030"/>
</kw>
<return>
<value>${actual_count}</value>
<status status="NOT RUN" start="2026-08-23T02:12:30.323013" elapsed="0.000021"/>
</return>
<var>${count}</var>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Count all instances of the specified device in the Netconf topology (usually 0 or 1).</doc>
<status status="FAIL" start="2026-08-23T02:12:30.247789" elapsed="0.075363">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${count}</arg>
<arg>0</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:30.323380" elapsed="0.000029"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Check that there are no instances of the specified device in the Netconf topology.</doc>
<status status="FAIL" start="2026-08-23T02:12:30.247335" elapsed="0.076198">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Generate URI" owner="Restconf">
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>config</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="NOT RUN" start="2026-08-23T02:12:30.332863" elapsed="0.000031"/>
</kw>
<kw name="No Content From URI" owner="Utils">
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Issue a Get On Session and return on error 404 (No content) or will fail and log the content.
Issues a Get On Session for ${uri} in default using headers from
{'Content-Type': 'application/json'}. If the request returns a HTTP error, fails. Otherwise
returns the data obtained by the request.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:30.336532" elapsed="0.000034"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device has no Netconf connectors nor associated data.</doc>
<status status="FAIL" start="2026-08-23T02:12:30.246713" elapsed="0.089988">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Check_Device_Completely_Gone" owner="NetconfKeywords">
<kw name="Check_Device_Has_No_Netconf_Connector" owner="NetconfKeywords">
<kw name="Count_Netconf_Connectors_For_Device" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:31.355690" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:31.353101" elapsed="0.002624"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:31.356111" elapsed="0.000021"/>
</kw>
<var name="${nv}"/>
<status status="NOT RUN" start="2026-08-23T02:12:31.355954" elapsed="0.000216"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="NOT RUN" start="2026-08-23T02:12:31.355803" elapsed="0.000399"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:31.356553" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:31.356283" elapsed="0.000327"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:31.357370" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:31.356880" elapsed="0.000518"/>
</kw>
<status status="PASS" start="2026-08-23T02:12:31.356635" elapsed="0.000798"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:31.357619" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:31.357459" elapsed="0.000216"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:31.356259" elapsed="0.001437"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:12:31.357736" elapsed="0.000040"/>
</return>
<msg time="2026-08-23T02:12:31.357917" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:12:31.352420" elapsed="0.005524"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:12:31.357993" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:12:31.358134" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:12:31.351698" elapsed="0.006462"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:31.365549" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:31.365284" elapsed="0.000312"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:31.366009" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:31.365747" elapsed="0.000305"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:12:31.372155" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:31.372212" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '407'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:12:31.372327" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:12:31.368169" elapsed="0.004565">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:12:31.366119" elapsed="0.006700">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:31.373028" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:31.372877" elapsed="0.000285"/>
</branch>
<status status="FAIL" start="2026-08-23T02:12:31.366100" elapsed="0.007088">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:31.373584" elapsed="0.000027"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:31.373717" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:31.373680" elapsed="0.000079"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:31.373663" elapsed="0.000116"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:31.373945" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:12:31.374017" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:12:31.360768" elapsed="0.013357">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:31.374197" elapsed="0.000016"/>
</return>
<var>${mounts}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:12:31.358382" elapsed="0.015916">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${mounts}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:31.374473" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${actual_count}</var>
<arg>len('''${mounts}'''.split('"node-id": "${device_name}"'))-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:31.374640" elapsed="0.000020"/>
</kw>
<return>
<value>${actual_count}</value>
<status status="NOT RUN" start="2026-08-23T02:12:31.374703" elapsed="0.000015"/>
</return>
<var>${count}</var>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Count all instances of the specified device in the Netconf topology (usually 0 or 1).</doc>
<status status="FAIL" start="2026-08-23T02:12:31.340559" elapsed="0.034243">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${count}</arg>
<arg>0</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:31.375103" elapsed="0.000025"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Check that there are no instances of the specified device in the Netconf topology.</doc>
<status status="FAIL" start="2026-08-23T02:12:31.339508" elapsed="0.035714">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Generate URI" owner="Restconf">
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>config</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="NOT RUN" start="2026-08-23T02:12:31.384270" elapsed="0.000039"/>
</kw>
<kw name="No Content From URI" owner="Utils">
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Issue a Get On Session and return on error 404 (No content) or will fail and log the content.
Issues a Get On Session for ${uri} in default using headers from
{'Content-Type': 'application/json'}. If the request returns a HTTP error, fails. Otherwise
returns the data obtained by the request.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:31.388397" elapsed="0.000026"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device has no Netconf connectors nor associated data.</doc>
<status status="FAIL" start="2026-08-23T02:12:31.338060" elapsed="0.050462">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Check_Device_Completely_Gone" owner="NetconfKeywords">
<kw name="Check_Device_Has_No_Netconf_Connector" owner="NetconfKeywords">
<kw name="Count_Netconf_Connectors_For_Device" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:32.406407" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:32.404145" elapsed="0.002296"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:32.406806" elapsed="0.000021"/>
</kw>
<var name="${nv}"/>
<status status="NOT RUN" start="2026-08-23T02:12:32.406652" elapsed="0.000228"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="NOT RUN" start="2026-08-23T02:12:32.406515" elapsed="0.000396"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:32.407246" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:32.406984" elapsed="0.000319"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:32.408047" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:32.407555" elapsed="0.000519"/>
</kw>
<status status="PASS" start="2026-08-23T02:12:32.407328" elapsed="0.000781"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:32.408378" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:32.408211" elapsed="0.000224"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:32.406965" elapsed="0.001492"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:12:32.408496" elapsed="0.000040"/>
</return>
<msg time="2026-08-23T02:12:32.408662" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:12:32.403619" elapsed="0.005069"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:12:32.408736" elapsed="0.000025"/>
</return>
<msg time="2026-08-23T02:12:32.408916" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:12:32.403118" elapsed="0.005825"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:32.416260" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:32.416002" elapsed="0.000305"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:32.416699" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:32.416457" elapsed="0.000285"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:12:32.422668" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:32.422726" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '407'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:12:32.422862" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:12:32.418875" elapsed="0.004380">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:12:32.416808" elapsed="0.006530">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:32.423522" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:32.423371" elapsed="0.000216"/>
</branch>
<status status="FAIL" start="2026-08-23T02:12:32.416790" elapsed="0.006820">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:32.423998" elapsed="0.000027"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:32.424131" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:32.424095" elapsed="0.000077"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:32.424078" elapsed="0.000115"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:32.424331" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:12:32.424399" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:12:32.411565" elapsed="0.012940">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:32.424575" elapsed="0.000015"/>
</return>
<var>${mounts}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:12:32.409160" elapsed="0.015511">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${mounts}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:32.424860" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${actual_count}</var>
<arg>len('''${mounts}'''.split('"node-id": "${device_name}"'))-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:32.425028" elapsed="0.000021"/>
</kw>
<return>
<value>${actual_count}</value>
<status status="NOT RUN" start="2026-08-23T02:12:32.425124" elapsed="0.000016"/>
</return>
<var>${count}</var>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Count all instances of the specified device in the Netconf topology (usually 0 or 1).</doc>
<status status="FAIL" start="2026-08-23T02:12:32.391803" elapsed="0.033423">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${count}</arg>
<arg>0</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:32.425386" elapsed="0.000021"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Check that there are no instances of the specified device in the Netconf topology.</doc>
<status status="FAIL" start="2026-08-23T02:12:32.390767" elapsed="0.034727">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Generate URI" owner="Restconf">
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>config</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="NOT RUN" start="2026-08-23T02:12:32.435263" elapsed="0.000027"/>
</kw>
<kw name="No Content From URI" owner="Utils">
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Issue a Get On Session and return on error 404 (No content) or will fail and log the content.
Issues a Get On Session for ${uri} in default using headers from
{'Content-Type': 'application/json'}. If the request returns a HTTP error, fails. Otherwise
returns the data obtained by the request.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:32.438796" elapsed="0.000026"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device has no Netconf connectors nor associated data.</doc>
<status status="FAIL" start="2026-08-23T02:12:32.389390" elapsed="0.049544">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Check_Device_Completely_Gone" owner="NetconfKeywords">
<kw name="Check_Device_Has_No_Netconf_Connector" owner="NetconfKeywords">
<kw name="Count_Netconf_Connectors_For_Device" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:33.457580" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:33.455514" elapsed="0.002093"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:33.457944" elapsed="0.000022"/>
</kw>
<var name="${nv}"/>
<status status="NOT RUN" start="2026-08-23T02:12:33.457779" elapsed="0.000223"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="NOT RUN" start="2026-08-23T02:12:33.457661" elapsed="0.000368"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:33.458352" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:33.458091" elapsed="0.000320"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:33.459154" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:33.458667" elapsed="0.000514"/>
</kw>
<status status="PASS" start="2026-08-23T02:12:33.458435" elapsed="0.000782"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:33.459401" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:33.459242" elapsed="0.000213"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:33.458074" elapsed="0.001402"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:12:33.459510" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:12:33.459657" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:12:33.455066" elapsed="0.004617"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:12:33.459729" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:12:33.459887" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:12:33.454576" elapsed="0.005337"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:33.467242" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:33.466988" elapsed="0.000300"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:33.467687" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:33.467440" elapsed="0.000291"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:12:33.473376" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:33.473428" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '407'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:12:33.473563" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:12:33.469869" elapsed="0.004052">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:12:33.467798" elapsed="0.006202">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:33.474184" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:33.474034" elapsed="0.000215"/>
</branch>
<status status="FAIL" start="2026-08-23T02:12:33.467779" elapsed="0.006493">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:33.474667" elapsed="0.000027"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:33.474799" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:33.474762" elapsed="0.000100"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:33.474745" elapsed="0.000140"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:33.475025" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:12:33.475094" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:12:33.462532" elapsed="0.012667">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:33.475273" elapsed="0.000021"/>
</return>
<var>${mounts}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:12:33.460128" elapsed="0.015305">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${mounts}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:33.475681" elapsed="0.000029"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${actual_count}</var>
<arg>len('''${mounts}'''.split('"node-id": "${device_name}"'))-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:33.475942" elapsed="0.000030"/>
</kw>
<return>
<value>${actual_count}</value>
<status status="NOT RUN" start="2026-08-23T02:12:33.476032" elapsed="0.000021"/>
</return>
<var>${count}</var>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Count all instances of the specified device in the Netconf topology (usually 0 or 1).</doc>
<status status="FAIL" start="2026-08-23T02:12:33.441767" elapsed="0.034402">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${count}</arg>
<arg>0</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:33.476395" elapsed="0.000029"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Check that there are no instances of the specified device in the Netconf topology.</doc>
<status status="FAIL" start="2026-08-23T02:12:33.440743" elapsed="0.035801">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Generate URI" owner="Restconf">
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>config</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="NOT RUN" start="2026-08-23T02:12:33.485656" elapsed="0.000028"/>
</kw>
<kw name="No Content From URI" owner="Utils">
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Issue a Get On Session and return on error 404 (No content) or will fail and log the content.
Issues a Get On Session for ${uri} in default using headers from
{'Content-Type': 'application/json'}. If the request returns a HTTP error, fails. Otherwise
returns the data obtained by the request.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:33.489159" elapsed="0.000026"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device has no Netconf connectors nor associated data.</doc>
<status status="FAIL" start="2026-08-23T02:12:33.439543" elapsed="0.049738">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Check_Device_Completely_Gone" owner="NetconfKeywords">
<kw name="Check_Device_Has_No_Netconf_Connector" owner="NetconfKeywords">
<kw name="Count_Netconf_Connectors_For_Device" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:34.502100" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:34.499941" elapsed="0.002192"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:34.502489" elapsed="0.000022"/>
</kw>
<var name="${nv}"/>
<status status="NOT RUN" start="2026-08-23T02:12:34.502335" elapsed="0.000212"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="NOT RUN" start="2026-08-23T02:12:34.502202" elapsed="0.000374"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:34.503005" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:34.502716" elapsed="0.000347"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:34.503802" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:34.503320" elapsed="0.000509"/>
</kw>
<status status="PASS" start="2026-08-23T02:12:34.503089" elapsed="0.000791"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:34.504073" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:34.503907" elapsed="0.000222"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:34.502695" elapsed="0.001456"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:12:34.504189" elapsed="0.000035"/>
</return>
<msg time="2026-08-23T02:12:34.504349" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:12:34.499450" elapsed="0.004924"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:12:34.504421" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:12:34.504564" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:12:34.498944" elapsed="0.005645"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:34.511945" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:34.511664" elapsed="0.000327"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:34.512386" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:34.512142" elapsed="0.000287"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:12:34.518407" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:34.518463" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '407'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:12:34.518575" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:12:34.514528" elapsed="0.004469">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:12:34.512495" elapsed="0.006585">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:34.519267" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:34.519113" elapsed="0.000220"/>
</branch>
<status status="FAIL" start="2026-08-23T02:12:34.512476" elapsed="0.006880">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:34.519736" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:34.519893" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:34.519853" elapsed="0.000084"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:34.519814" elapsed="0.000145"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:34.520098" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:12:34.520167" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:12:34.507233" elapsed="0.013044">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:34.520394" elapsed="0.000016"/>
</return>
<var>${mounts}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:12:34.504807" elapsed="0.015688">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${mounts}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:34.520663" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${actual_count}</var>
<arg>len('''${mounts}'''.split('"node-id": "${device_name}"'))-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:34.520828" elapsed="0.000044"/>
</kw>
<return>
<value>${actual_count}</value>
<status status="NOT RUN" start="2026-08-23T02:12:34.520917" elapsed="0.000015"/>
</return>
<var>${count}</var>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Count all instances of the specified device in the Netconf topology (usually 0 or 1).</doc>
<status status="FAIL" start="2026-08-23T02:12:34.491349" elapsed="0.029669">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${count}</arg>
<arg>0</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:34.521180" elapsed="0.000021"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Check that there are no instances of the specified device in the Netconf topology.</doc>
<status status="FAIL" start="2026-08-23T02:12:34.490886" elapsed="0.030404">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Generate URI" owner="Restconf">
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>config</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="NOT RUN" start="2026-08-23T02:12:34.528594" elapsed="0.000028"/>
</kw>
<kw name="No Content From URI" owner="Utils">
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Issue a Get On Session and return on error 404 (No content) or will fail and log the content.
Issues a Get On Session for ${uri} in default using headers from
{'Content-Type': 'application/json'}. If the request returns a HTTP error, fails. Otherwise
returns the data obtained by the request.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:34.532302" elapsed="0.000027"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device has no Netconf connectors nor associated data.</doc>
<status status="FAIL" start="2026-08-23T02:12:34.490013" elapsed="0.042414">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Check_Device_Completely_Gone" owner="NetconfKeywords">
<kw name="Check_Device_Has_No_Netconf_Connector" owner="NetconfKeywords">
<kw name="Count_Netconf_Connectors_For_Device" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:35.551262" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:35.549099" elapsed="0.002198"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:35.551696" elapsed="0.000021"/>
</kw>
<var name="${nv}"/>
<status status="NOT RUN" start="2026-08-23T02:12:35.551540" elapsed="0.000213"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="NOT RUN" start="2026-08-23T02:12:35.551374" elapsed="0.000410"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:35.552145" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:35.551879" elapsed="0.000323"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:35.552949" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:35.552456" elapsed="0.000521"/>
</kw>
<status status="PASS" start="2026-08-23T02:12:35.552227" elapsed="0.000786"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:35.553220" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:35.553038" elapsed="0.000238"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:35.551857" elapsed="0.001440"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:12:35.553339" elapsed="0.000041"/>
</return>
<msg time="2026-08-23T02:12:35.553510" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:12:35.548578" elapsed="0.004958"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:12:35.553583" elapsed="0.000025"/>
</return>
<msg time="2026-08-23T02:12:35.553723" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:12:35.548081" elapsed="0.005667"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:35.561299" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:35.561040" elapsed="0.000306"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:35.561740" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:35.561497" elapsed="0.000385"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:12:35.567782" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:35.567864" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '407'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:12:35.567983" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:12:35.564000" elapsed="0.004396">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:12:35.561951" elapsed="0.006580">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:35.568793" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:35.568587" elapsed="0.000326"/>
</branch>
<status status="FAIL" start="2026-08-23T02:12:35.561932" elapsed="0.007014">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:35.569459" elapsed="0.000037"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:35.569644" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:35.569591" elapsed="0.000110"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:35.569568" elapsed="0.000163"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:35.569958" elapsed="0.000032"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:12:35.570058" elapsed="0.000021"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:12:35.556566" elapsed="0.013640">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:35.570302" elapsed="0.000021"/>
</return>
<var>${mounts}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:12:35.553986" elapsed="0.016449">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${mounts}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:35.570666" elapsed="0.000030"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${actual_count}</var>
<arg>len('''${mounts}'''.split('"node-id": "${device_name}"'))-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:35.570922" elapsed="0.000031"/>
</kw>
<return>
<value>${actual_count}</value>
<status status="NOT RUN" start="2026-08-23T02:12:35.571013" elapsed="0.000020"/>
</return>
<var>${count}</var>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Count all instances of the specified device in the Netconf topology (usually 0 or 1).</doc>
<status status="FAIL" start="2026-08-23T02:12:35.535745" elapsed="0.035403">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${count}</arg>
<arg>0</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:35.571371" elapsed="0.000041"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Check that there are no instances of the specified device in the Netconf topology.</doc>
<status status="FAIL" start="2026-08-23T02:12:35.534612" elapsed="0.036923">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Generate URI" owner="Restconf">
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>config</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="NOT RUN" start="2026-08-23T02:12:35.581375" elapsed="0.000028"/>
</kw>
<kw name="No Content From URI" owner="Utils">
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Issue a Get On Session and return on error 404 (No content) or will fail and log the content.
Issues a Get On Session for ${uri} in default using headers from
{'Content-Type': 'application/json'}. If the request returns a HTTP error, fails. Otherwise
returns the data obtained by the request.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:35.584909" elapsed="0.000027"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device has no Netconf connectors nor associated data.</doc>
<status status="FAIL" start="2026-08-23T02:12:35.533293" elapsed="0.051775">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Check_Device_Completely_Gone" owner="NetconfKeywords">
<kw name="Check_Device_Has_No_Netconf_Connector" owner="NetconfKeywords">
<kw name="Count_Netconf_Connectors_For_Device" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:36.603481" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:36.601356" elapsed="0.002157"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:36.603887" elapsed="0.000023"/>
</kw>
<var name="${nv}"/>
<status status="NOT RUN" start="2026-08-23T02:12:36.603719" elapsed="0.000247"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="NOT RUN" start="2026-08-23T02:12:36.603581" elapsed="0.000415"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:36.604326" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:36.604067" elapsed="0.000316"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:36.605125" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:36.604636" elapsed="0.000516"/>
</kw>
<status status="PASS" start="2026-08-23T02:12:36.604408" elapsed="0.000780"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:36.605380" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:36.605213" elapsed="0.000222"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:36.604048" elapsed="0.001407"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:12:36.605494" elapsed="0.000036"/>
</return>
<msg time="2026-08-23T02:12:36.605655" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:12:36.600891" elapsed="0.004790"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:12:36.605727" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:12:36.605885" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:12:36.600378" elapsed="0.005533"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:36.613159" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:36.612902" elapsed="0.000303"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:36.613598" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:36.613355" elapsed="0.000287"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:12:36.619553" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:36.619609" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '407'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:12:36.619721" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:12:36.615752" elapsed="0.004455">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:12:36.613707" elapsed="0.006584">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:36.620524" elapsed="0.000038"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:36.620326" elapsed="0.000307"/>
</branch>
<status status="FAIL" start="2026-08-23T02:12:36.613689" elapsed="0.006976">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:36.621217" elapsed="0.000155"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:36.621537" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:36.621485" elapsed="0.000110"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:36.621459" elapsed="0.000165"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:36.621821" elapsed="0.000061"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:12:36.621951" elapsed="0.000021"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:12:36.608565" elapsed="0.013536">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:36.622200" elapsed="0.000021"/>
</return>
<var>${mounts}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:12:36.606130" elapsed="0.016205">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${mounts}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:36.622567" elapsed="0.000030"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${actual_count}</var>
<arg>len('''${mounts}'''.split('"node-id": "${device_name}"'))-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:36.622797" elapsed="0.000028"/>
</kw>
<return>
<value>${actual_count}</value>
<status status="NOT RUN" start="2026-08-23T02:12:36.622922" elapsed="0.000021"/>
</return>
<var>${count}</var>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Count all instances of the specified device in the Netconf topology (usually 0 or 1).</doc>
<status status="FAIL" start="2026-08-23T02:12:36.588203" elapsed="0.034859">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${count}</arg>
<arg>0</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:36.623287" elapsed="0.000030"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Check that there are no instances of the specified device in the Netconf topology.</doc>
<status status="FAIL" start="2026-08-23T02:12:36.587118" elapsed="0.036322">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Generate URI" owner="Restconf">
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>config</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="NOT RUN" start="2026-08-23T02:12:36.632268" elapsed="0.000028"/>
</kw>
<kw name="No Content From URI" owner="Utils">
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Issue a Get On Session and return on error 404 (No content) or will fail and log the content.
Issues a Get On Session for ${uri} in default using headers from
{'Content-Type': 'application/json'}. If the request returns a HTTP error, fails. Otherwise
returns the data obtained by the request.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:36.635772" elapsed="0.000026"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device has no Netconf connectors nor associated data.</doc>
<status status="FAIL" start="2026-08-23T02:12:36.585789" elapsed="0.050123">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Check_Device_Completely_Gone" owner="NetconfKeywords">
<kw name="Check_Device_Has_No_Netconf_Connector" owner="NetconfKeywords">
<kw name="Count_Netconf_Connectors_For_Device" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:37.655140" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:37.652630" elapsed="0.002547"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:37.655566" elapsed="0.000022"/>
</kw>
<var name="${nv}"/>
<status status="NOT RUN" start="2026-08-23T02:12:37.655405" elapsed="0.000219"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="NOT RUN" start="2026-08-23T02:12:37.655261" elapsed="0.000396"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:37.656037" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:37.655737" elapsed="0.000357"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:37.656831" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:37.656350" elapsed="0.000523"/>
</kw>
<status status="PASS" start="2026-08-23T02:12:37.656121" elapsed="0.000788"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:37.657096" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:37.656934" elapsed="0.000218"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:37.655716" elapsed="0.001456"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:12:37.657339" elapsed="0.000047"/>
</return>
<msg time="2026-08-23T02:12:37.657520" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:12:37.651917" elapsed="0.005629"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:12:37.657594" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:12:37.657738" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:12:37.651183" elapsed="0.006580"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:37.665163" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:37.664903" elapsed="0.000307"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:37.665675" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:37.665361" elapsed="0.000358"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:12:37.671811" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:37.671894" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '407'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:12:37.672021" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:12:37.667830" elapsed="0.004630">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:12:37.665786" elapsed="0.006771">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:37.672742" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:37.672591" elapsed="0.000215"/>
</branch>
<status status="FAIL" start="2026-08-23T02:12:37.665767" elapsed="0.007062">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:37.673228" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:37.673360" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:37.673323" elapsed="0.000079"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:37.673306" elapsed="0.000117"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:37.673562" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:12:37.673631" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:12:37.660373" elapsed="0.013365">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:37.673807" elapsed="0.000015"/>
</return>
<var>${mounts}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:12:37.657997" elapsed="0.015935">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${mounts}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:37.674099" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${actual_count}</var>
<arg>len('''${mounts}'''.split('"node-id": "${device_name}"'))-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:37.674265" elapsed="0.000020"/>
</kw>
<return>
<value>${actual_count}</value>
<status status="NOT RUN" start="2026-08-23T02:12:37.674326" elapsed="0.000015"/>
</return>
<var>${count}</var>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Count all instances of the specified device in the Netconf topology (usually 0 or 1).</doc>
<status status="FAIL" start="2026-08-23T02:12:37.640008" elapsed="0.034415">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${count}</arg>
<arg>0</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:37.674624" elapsed="0.000022"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Check that there are no instances of the specified device in the Netconf topology.</doc>
<status status="FAIL" start="2026-08-23T02:12:37.638937" elapsed="0.035798">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Generate URI" owner="Restconf">
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>config</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="NOT RUN" start="2026-08-23T02:12:37.683779" elapsed="0.000040"/>
</kw>
<kw name="No Content From URI" owner="Utils">
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Issue a Get On Session and return on error 404 (No content) or will fail and log the content.
Issues a Get On Session for ${uri} in default using headers from
{'Content-Type': 'application/json'}. If the request returns a HTTP error, fails. Otherwise
returns the data obtained by the request.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:37.687875" elapsed="0.000028"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device has no Netconf connectors nor associated data.</doc>
<status status="FAIL" start="2026-08-23T02:12:37.637329" elapsed="0.050672">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Check_Device_Completely_Gone" owner="NetconfKeywords">
<kw name="Check_Device_Has_No_Netconf_Connector" owner="NetconfKeywords">
<kw name="Count_Netconf_Connectors_For_Device" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:38.711172" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:38.708764" elapsed="0.002446"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:38.711592" elapsed="0.000022"/>
</kw>
<var name="${nv}"/>
<status status="NOT RUN" start="2026-08-23T02:12:38.711435" elapsed="0.000215"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="NOT RUN" start="2026-08-23T02:12:38.711292" elapsed="0.000391"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:38.712045" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:38.711760" elapsed="0.000344"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:38.712856" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:38.712359" elapsed="0.000526"/>
</kw>
<status status="PASS" start="2026-08-23T02:12:38.712130" elapsed="0.000791"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:38.713121" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:38.712946" elapsed="0.000230"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:38.711739" elapsed="0.001458"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:12:38.713239" elapsed="0.000043"/>
</return>
<msg time="2026-08-23T02:12:38.713413" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:12:38.708054" elapsed="0.005385"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:12:38.713486" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:12:38.713628" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:12:38.707201" elapsed="0.006452"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:38.720872" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:38.720596" elapsed="0.000324"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:38.721331" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:38.721083" elapsed="0.000291"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:12:38.727556" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:38.727613" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '407'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:12:38.727809" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:12:38.723526" elapsed="0.004735">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:12:38.721440" elapsed="0.006910">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:38.728535" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:38.728384" elapsed="0.000215"/>
</branch>
<status status="FAIL" start="2026-08-23T02:12:38.721421" elapsed="0.007202">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:38.729020" elapsed="0.000049"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:38.729178" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:38.729142" elapsed="0.000079"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:38.729124" elapsed="0.000118"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:38.729382" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:12:38.729452" elapsed="0.000014"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:12:38.716283" elapsed="0.013279">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:38.729632" elapsed="0.000015"/>
</return>
<var>${mounts}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:12:38.713896" elapsed="0.015833">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${mounts}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:38.729923" elapsed="0.000023"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${actual_count}</var>
<arg>len('''${mounts}'''.split('"node-id": "${device_name}"'))-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:38.730092" elapsed="0.000020"/>
</kw>
<return>
<value>${actual_count}</value>
<status status="NOT RUN" start="2026-08-23T02:12:38.730154" elapsed="0.000015"/>
</return>
<var>${count}</var>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Count all instances of the specified device in the Netconf topology (usually 0 or 1).</doc>
<status status="FAIL" start="2026-08-23T02:12:38.691466" elapsed="0.038787">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${count}</arg>
<arg>0</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:38.730415" elapsed="0.000025"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Check that there are no instances of the specified device in the Netconf topology.</doc>
<status status="FAIL" start="2026-08-23T02:12:38.690414" elapsed="0.040135">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Generate URI" owner="Restconf">
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>config</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="NOT RUN" start="2026-08-23T02:12:38.740238" elapsed="0.000041"/>
</kw>
<kw name="No Content From URI" owner="Utils">
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Issue a Get On Session and return on error 404 (No content) or will fail and log the content.
Issues a Get On Session for ${uri} in default using headers from
{'Content-Type': 'application/json'}. If the request returns a HTTP error, fails. Otherwise
returns the data obtained by the request.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:38.744172" elapsed="0.000027"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device has no Netconf connectors nor associated data.</doc>
<status status="FAIL" start="2026-08-23T02:12:38.688936" elapsed="0.055362">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Check_Device_Completely_Gone" owner="NetconfKeywords">
<kw name="Check_Device_Has_No_Netconf_Connector" owner="NetconfKeywords">
<kw name="Count_Netconf_Connectors_For_Device" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:39.761526" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:39.759352" elapsed="0.002209"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:39.761973" elapsed="0.000023"/>
</kw>
<var name="${nv}"/>
<status status="NOT RUN" start="2026-08-23T02:12:39.761803" elapsed="0.000229"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="NOT RUN" start="2026-08-23T02:12:39.761662" elapsed="0.000403"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:39.762503" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:39.762234" elapsed="0.000327"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:39.763307" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:39.762814" elapsed="0.000520"/>
</kw>
<status status="PASS" start="2026-08-23T02:12:39.762587" elapsed="0.000783"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:39.763560" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:39.763395" elapsed="0.000220"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:39.762212" elapsed="0.001424"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:12:39.763675" elapsed="0.000041"/>
</return>
<msg time="2026-08-23T02:12:39.763859" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:12:39.758865" elapsed="0.005021"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:12:39.763934" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:12:39.764075" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:12:39.758344" elapsed="0.005756"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:39.771470" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:39.771213" elapsed="0.000304"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:39.771928" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:39.771667" elapsed="0.000305"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:12:39.778387" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:39.778453" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '407'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:12:39.778594" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:12:39.774120" elapsed="0.005029">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:12:39.772038" elapsed="0.007228">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:39.779520" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:39.779312" elapsed="0.000297"/>
</branch>
<status status="FAIL" start="2026-08-23T02:12:39.772019" elapsed="0.007623">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:39.780186" elapsed="0.000035"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:39.780369" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:39.780318" elapsed="0.000109"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:39.780294" elapsed="0.000163"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:39.780650" elapsed="0.000030"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:12:39.780744" elapsed="0.000021"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:12:39.766719" elapsed="0.014205">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:39.781072" elapsed="0.000023"/>
</return>
<var>${mounts}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:12:39.764318" elapsed="0.016894">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${mounts}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:39.781445" elapsed="0.000032"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${actual_count}</var>
<arg>len('''${mounts}'''.split('"node-id": "${device_name}"'))-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:39.781695" elapsed="0.000029"/>
</kw>
<return>
<value>${actual_count}</value>
<status status="NOT RUN" start="2026-08-23T02:12:39.781785" elapsed="0.000021"/>
</return>
<var>${count}</var>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Count all instances of the specified device in the Netconf topology (usually 0 or 1).</doc>
<status status="FAIL" start="2026-08-23T02:12:39.747639" elapsed="0.034316">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${count}</arg>
<arg>0</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:39.782181" elapsed="0.000030"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Check that there are no instances of the specified device in the Netconf topology.</doc>
<status status="FAIL" start="2026-08-23T02:12:39.746587" elapsed="0.035747">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Generate URI" owner="Restconf">
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>config</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="NOT RUN" start="2026-08-23T02:12:39.791798" elapsed="0.000027"/>
</kw>
<kw name="No Content From URI" owner="Utils">
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Issue a Get On Session and return on error 404 (No content) or will fail and log the content.
Issues a Get On Session for ${uri} in default using headers from
{'Content-Type': 'application/json'}. If the request returns a HTTP error, fails. Otherwise
returns the data obtained by the request.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:39.795329" elapsed="0.000026"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device has no Netconf connectors nor associated data.</doc>
<status status="FAIL" start="2026-08-23T02:12:39.745181" elapsed="0.050272">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Check_Device_Completely_Gone" owner="NetconfKeywords">
<kw name="Check_Device_Has_No_Netconf_Connector" owner="NetconfKeywords">
<kw name="Count_Netconf_Connectors_For_Device" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:40.813825" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:40.811659" elapsed="0.002215"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:40.814267" elapsed="0.000023"/>
</kw>
<var name="${nv}"/>
<status status="NOT RUN" start="2026-08-23T02:12:40.814090" elapsed="0.000236"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="NOT RUN" start="2026-08-23T02:12:40.813952" elapsed="0.000407"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:40.814695" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:40.814433" elapsed="0.000320"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:40.815496" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:40.815024" elapsed="0.000499"/>
</kw>
<status status="PASS" start="2026-08-23T02:12:40.814777" elapsed="0.000782"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:40.815747" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:40.815584" elapsed="0.000219"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:40.814413" elapsed="0.001410"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:12:40.815878" elapsed="0.000043"/>
</return>
<msg time="2026-08-23T02:12:40.816049" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:12:40.811181" elapsed="0.004894"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:12:40.816122" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:12:40.816264" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:12:40.810663" elapsed="0.005626"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:40.823532" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:40.823274" elapsed="0.000305"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:40.823993" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:40.823729" elapsed="0.000381"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:12:40.830324" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:40.830382" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '407'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:12:40.830498" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:12:40.826244" elapsed="0.004808">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:12:40.824179" elapsed="0.006988">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:40.831423" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:40.831214" elapsed="0.000302"/>
</branch>
<status status="FAIL" start="2026-08-23T02:12:40.824160" elapsed="0.007388">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:40.832089" elapsed="0.000037"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:40.832275" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:40.832224" elapsed="0.000110"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:40.832200" elapsed="0.000164"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:40.832561" elapsed="0.000030"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:12:40.832659" elapsed="0.000021"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:12:40.818923" elapsed="0.013886">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:40.832939" elapsed="0.000023"/>
</return>
<var>${mounts}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:12:40.816506" elapsed="0.016571">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${mounts}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:40.833309" elapsed="0.000029"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${actual_count}</var>
<arg>len('''${mounts}'''.split('"node-id": "${device_name}"'))-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:40.833536" elapsed="0.000028"/>
</kw>
<return>
<value>${actual_count}</value>
<status status="NOT RUN" start="2026-08-23T02:12:40.833622" elapsed="0.000020"/>
</return>
<var>${count}</var>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Count all instances of the specified device in the Netconf topology (usually 0 or 1).</doc>
<status status="FAIL" start="2026-08-23T02:12:40.798782" elapsed="0.034974">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${count}</arg>
<arg>0</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:40.834006" elapsed="0.000030"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Check that there are no instances of the specified device in the Netconf topology.</doc>
<status status="FAIL" start="2026-08-23T02:12:40.797681" elapsed="0.036492">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Generate URI" owner="Restconf">
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>config</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="NOT RUN" start="2026-08-23T02:12:40.844087" elapsed="0.000027"/>
</kw>
<kw name="No Content From URI" owner="Utils">
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Issue a Get On Session and return on error 404 (No content) or will fail and log the content.
Issues a Get On Session for ${uri} in default using headers from
{'Content-Type': 'application/json'}. If the request returns a HTTP error, fails. Otherwise
returns the data obtained by the request.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:40.847619" elapsed="0.000027"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device has no Netconf connectors nor associated data.</doc>
<status status="FAIL" start="2026-08-23T02:12:40.796318" elapsed="0.051458">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<msg time="2026-08-23T02:12:40.847889" level="FAIL">Keyword 'Check_Device_Completely_Gone' failed after retrying for 10 seconds. The last error was: HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${timeout}</arg>
<arg>${period}</arg>
<arg>Check_Device_Completely_Gone</arg>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-08-23T02:12:30.246138" elapsed="10.601847">Keyword 'Check_Device_Completely_Gone' failed after retrying for 10 seconds. The last error was: HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<arg>${device_name}</arg>
<doc>Wait until all netconf connectors for the device with the given name disappear.
Call of Remove_Device_From_Netconf returns before netconf gets
around deleting the device's connector. To ensure the device is
really gone from netconf, use this keyword to make sure all
connectors disappear. If a call to Remove_Device_From_Netconf
is not made before using this keyword, the wait will fail.
Using this keyword is more readable than putting the WUKS below
into a test case.</doc>
<status status="FAIL" start="2026-08-23T02:12:30.245708" elapsed="10.602388">Keyword 'Check_Device_Completely_Gone' failed after retrying for 10 seconds. The last error was: HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<doc>Check that the device is really going to be gone. Fail
if found after one minute. This is an expected behavior as the
delete request is sent to the config subsystem which then triggers
asynchronous destruction of the netconf connector referring to the
device and the device's data. This test makes sure this
asynchronous operation does not take unreasonable amount of time
by making sure that both the netconf connector and the device's
data is gone before reporting success.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-08-23T02:12:30.151250" elapsed="10.697001">Keyword 'Check_Device_Completely_Gone' failed after retrying for 10 seconds. The last error was: HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</test>
<kw name="Teardown_Everything" type="TEARDOWN">
<kw name="Delete All Sessions" owner="RequestsLibrary">
<msg time="2026-08-23T02:12:40.849273" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects</doc>
<status status="PASS" start="2026-08-23T02:12:40.849200" elapsed="0.000162"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Stop_Testtool" owner="NetconfKeywords">
<kw name="Write_Bare_Ctrl_C" owner="RemoteBash">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:12:40.850738" 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-08-23T02:12:40.850420" elapsed="0.000346"/>
</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-08-23T02:12:40.850933" elapsed="0.000262"/>
</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-08-23T02:12:40.850212" elapsed="0.001043"/>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-08-23T02:12:41.184655" level="INFO">[?2004l^C[?2004h[jenkins@releng-19126-54-1-docker-0 ~]&gt;</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="PASS" start="2026-08-23T02:12:40.851404" elapsed="0.333322"/>
</kw>
<kw name="Get File" owner="SSHLibrary">
<msg time="2026-08-23T02:12:41.195869" level="INFO">'testtool--netconf-gate-userfeatures-txt-CRUD-CRUD.1787451023.491.log' -&gt; '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/testtool--netconf-gate-userfeatures-txt-CRUD-CRUD.1787451023.491.log'</msg>
<arg>${testtool_log}</arg>
<doc>Downloads file(s) from the remote machine to the local machine.</doc>
<status status="PASS" start="2026-08-23T02:12:41.184908" elapsed="0.011103"/>
</kw>
<doc>Stop testtool and download its log.</doc>
<status status="PASS" start="2026-08-23T02:12:40.849931" elapsed="0.346215"/>
</kw>
<arg>NetconfKeywords.Stop_Testtool</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:12:40.849519" elapsed="0.346721"/>
</kw>
<doc>Teardown the test infrastructure, perform cleanup and release all resources.</doc>
<status status="PASS" start="2026-08-23T02:12:40.848985" elapsed="0.347366"/>
</kw>
<doc>netconf-connector CRUD test suite.

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

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


Perform basic operations (Create, Read, Update and Delete or CRUD) on device
data mounted onto a netconf connector and see if they work.

FIXME: Replace the BuiltIn.Should_[Not_]Contain instances in the test cases
that check the car list related data with calls to keywords of a Resource
aimed at getting interesting pieces of data from the XML files and checking
them against expected data sets. See MDSAL/northbound.robot suite for
additional information.</doc>
<status status="FAIL" start="2026-08-23T02:10:20.499746" elapsed="140.696670"/>
</suite>
<status status="FAIL" start="2026-08-23T02:07:49.159032" elapsed="292.039943"/>
</suite>
<suite id="s1-s5" name="CRUD-ACTION" source="/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION">
<suite id="s1-s5-s1" name="CRUD-ACTION" source="/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/CRUD-ACTION.robot">
<kw name="Setup_Everything" 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-08-23T02:12:41.287487" 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-08-23T02:12:41.283228" elapsed="0.004306"/>
</kw>
<doc>Set suite to not fail fast.</doc>
<status status="PASS" start="2026-08-23T02:12:41.283002" elapsed="0.004592"/>
</kw>
<kw name="Setup_Karaf_Keywords" owner="KarafKeywords">
<kw name="ClusterManagement_Setup" owner="ClusterManagement">
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-08-23T02:12:41.292443" 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-08-23T02:12:41.288654" elapsed="0.003817"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-08-23T02:12:41.292666" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:41.292557" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:41.292534" elapsed="0.000242"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:41.293309" 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-08-23T02:12:41.292947" elapsed="0.000407"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-08-23T02:12:41.293825" 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-08-23T02:12:41.293513" elapsed="0.000353"/>
</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-08-23T02:12:41.294384" elapsed="0.000300"/>
</kw>
<msg time="2026-08-23T02:12:41.294783" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:12:41.294830" 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-08-23T02:12:41.294030" elapsed="0.000841"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:12:41.295422" 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-08-23T02:12:41.295047" elapsed="0.000402"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:12:41.296428" level="INFO">@{member_index_list} = [ ]</msg>
<var>@{member_index_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-08-23T02:12:41.296165" elapsed="0.000289"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:12:41.296879" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-08-23T02:12:41.296599" elapsed="0.000308"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:12:41.297352" 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-08-23T02:12:41.297063" elapsed="0.000315"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="ClusterManagement__Include_Member_Index" owner="ClusterManagement">
<kw name="Append To List" owner="Collections">
<arg>${member_index_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-08-23T02:12:41.300489" elapsed="0.000208"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:41.301255" level="INFO">${member_ip} = 10.30.170.114</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-08-23T02:12:41.300866" elapsed="0.000415"/>
</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-08-23T02:12:41.301432" elapsed="0.000226"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:41.302470" 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-08-23T02:12:41.302154" elapsed="0.000343"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-08-23T02:12:41.302543" elapsed="0.000033"/>
</return>
<msg time="2026-08-23T02:12:41.302698" 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-08-23T02:12:41.301862" elapsed="0.000861"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:12:41.303473" level="INFO">Creating Session using : alias=ClusterManagement__session_1, url=http://10.30.170.114:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x72b0ed1df2d0&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-08-23T02:12:41.302892" elapsed="0.000708"/>
</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-08-23T02:12:41.303758" elapsed="0.000206"/>
</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-08-23T02:12:41.299933" elapsed="0.004090"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:12:41.299732" elapsed="0.004334"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="PASS" start="2026-08-23T02:12:41.297435" elapsed="0.006663"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:41.304653" 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-08-23T02:12:41.304256" elapsed="0.000439"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:41.305267" level="INFO">${ClusterManagement__index_to_ip_mapping} = {1: '10.30.170.114'}</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-08-23T02:12:41.304868" elapsed="0.000440"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:41.305861" 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-08-23T02:12:41.305465" elapsed="0.000438"/>
</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-08-23T02:12:41.295698" elapsed="0.010262"/>
</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-08-23T02:12:41.288318" elapsed="0.017697"/>
</kw>
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:12:41.306230" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:41.306118" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:41.306098" 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-08-23T02:12:41.309403" 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-08-23T02:12:41.309022" elapsed="0.000408"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:12:41.309896" 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-08-23T02:12:41.309586" elapsed="0.000336"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:12:41.309967" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:12:41.310121" 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-08-23T02:12:41.308685" elapsed="0.001461"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:12:41.311165" level="INFO">${member_ip} = 10.30.170.114</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-08-23T02:12:41.310898" elapsed="0.000294"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:12:41.311901" level="INFO">index=13
host=10.30.170.120
alias=None
port=22
timeout=10 seconds
newline=

prompt=&gt;
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-08-23T02:12:41.312008" level="INFO">${current_connection} = index=13
host=10.30.170.120
alias=None
port=22
timeout=10 seconds
newline=

prompt=&gt;
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-08-23T02:12:41.311763" elapsed="0.000272"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:41.315884" elapsed="0.000054"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:41.315087" elapsed="0.000920"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:41.315035" elapsed="0.001056"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:12:41.316787" level="INFO">index=13
host=10.30.170.120
alias=None
port=22
timeout=10 seconds
newline=

prompt=&gt;
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-08-23T02:12:41.317131" level="INFO">${current_ssh_connection} = index=13
host=10.30.170.120
alias=None
port=22
timeout=10 seconds
newline=

prompt=&gt;
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-08-23T02:12:41.316394" elapsed="0.000858"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:41.318244" level="INFO">Attempting to execute command "iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save" on remote system "10.30.170.114" 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-08-23T02:12:41.317541" elapsed="0.000920"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:12:41.319622" level="INFO">${conn_id} = 15</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-08-23T02:12:41.318760" elapsed="0.000984"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-08-23T02:12:41.321514" level="INFO">Length is 0.</msg>
<msg time="2026-08-23T02:12:41.321592" 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-08-23T02:12:41.321239" elapsed="0.000377"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:12:41.321826" elapsed="0.000582"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-08-23T02:12:41.323363" level="INFO">Logging into '10.30.170.114:22' as 'jenkins'.</msg>
<msg time="2026-08-23T02:12:41.925666" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-186-generic x86_64)

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

 System information as of Sun Aug 23 02:12:41 UTC 2026

  System load:  0.02               Processes:             130
  Usage of /:   13.8% of 77.35GB   Users logged in:       1
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.114
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

41 updates can be applied immediately.
35 of these updates are standard security updates.
To see these additional updates run: apt list --upgradable

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

New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sun Aug 23 02:10:22 2026 from 10.30.171.240
[?2004h[jenkins@releng-19126-54-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-08-23T02:12:41.323037" elapsed="0.602738"/>
</kw>
<msg time="2026-08-23T02:12:41.925939" 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-08-23T02:12:41.322643" elapsed="0.603373"/>
</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-08-23T02:12:41.320413" elapsed="0.605812"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-23T02:12:41.927088" level="INFO">Executing command 'iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save'.</msg>
<msg time="2026-08-23T02:12:41.939448" level="INFO">Command exited with return code 4.</msg>
<msg time="2026-08-23T02:12:41.940161" level="INFO">${stdout} = </msg>
<msg time="2026-08-23T02:12:41.940526" 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-08-23T02:12:41.926571" elapsed="0.014208"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-08-23T02:12:41.941483" elapsed="0.001274"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:41.945704" 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-08-23T02:12:41.944310" elapsed="0.001970"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-08-23T02:12:41.947419" elapsed="0.000073"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:41.946621" elapsed="0.000963"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:41.946514" elapsed="0.001165"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-08-23T02:12:41.948140" elapsed="0.000069"/>
</return>
<status status="PASS" start="2026-08-23T02:12:41.947830" elapsed="0.000431"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:41.947785" elapsed="0.000555"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-08-23T02:12:41.948441" elapsed="0.000017"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-23T02:12:41.952746" elapsed="0.000167"/>
</kw>
<msg time="2026-08-23T02:12:41.952957" 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-08-23T02:12:41.952099" elapsed="0.000961"/>
</kw>
<kw name="Open 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-08-23T02:12:41.953325" elapsed="0.000039"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:41.953610" elapsed="0.000038"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:12:41.949131" elapsed="0.004644"/>
</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-08-23T02:12:41.313877" elapsed="0.640226"/>
</kw>
<msg time="2026-08-23T02:12:41.954222" 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-08-23T02:12:41.313172" elapsed="0.641102"/>
</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-08-23T02:12:41.312682" elapsed="0.641672"/>
</kw>
<msg time="2026-08-23T02:12:41.954394" 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-08-23T02:12:41.312188" elapsed="0.642251"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-23T02:12:41.957956" elapsed="0.000169"/>
</kw>
<msg time="2026-08-23T02:12:41.958168" 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-08-23T02:12:41.957386" elapsed="0.000844"/>
</kw>
<kw name="Open 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-08-23T02:12:41.958383" elapsed="0.000022"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:41.958540" elapsed="0.000021"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:12:41.954758" elapsed="0.003867"/>
</kw>
<msg time="2026-08-23T02:12:41.958729" 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-08-23T02:12:41.311404" elapsed="0.647351"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:41.959197" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:41.958946" elapsed="0.000292"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-23T02:12:41.959317" elapsed="0.000030"/>
</return>
<arg>command=${command}</arg>
<arg>member_index=${index}</arg>
<doc>Obtain IP, call Utils and return output. This keeps previous ssh session active.</doc>
<status status="PASS" start="2026-08-23T02:12:41.310522" elapsed="0.648921"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:12:41.310322" elapsed="0.649157"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:12:41.310197" elapsed="0.649317"/>
</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-08-23T02:12:41.306551" elapsed="0.653017"/>
</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-08-23T02:12:41.959719" elapsed="0.000237"/>
</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-08-23T02:12:41.973469" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:41.973358" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:41.973339" elapsed="0.000200"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:12:41.973807" level="INFO">index=13
host=10.30.170.120
alias=None
port=22
timeout=10 seconds
newline=

prompt=&gt;
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-08-23T02:12:41.973927" level="INFO">${current_ssh_connection_object} = index=13
host=10.30.170.120
alias=None
port=22
timeout=10 seconds
newline=

prompt=&gt;
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-08-23T02:12:41.973689" elapsed="0.000265"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:41.974361" level="INFO">{}</msg>
<arg>${connection_index_dict}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:41.974104" elapsed="0.000304"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:41.974818" level="INFO">1</msg>
<arg>${member_index}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:41.974557" elapsed="0.000319"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:12:41.975605" 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-08-23T02:12:41.975385" elapsed="0.000335">Dictionary does not contain key '1'.</status>
</kw>
<msg time="2026-08-23T02:12:41.975826" level="INFO">${status} = FAIL</msg>
<msg time="2026-08-23T02:12:41.975888" 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-08-23T02:12:41.975031" elapsed="0.000881"/>
</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-08-23T02:12:41.976207" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:41.975987" elapsed="0.000294"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:41.975968" elapsed="0.000337"/>
</if>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:12:41.977052" level="INFO">${ip_address} = 10.30.170.114</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-08-23T02:12:41.976770" elapsed="0.000308"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-08-23T02:12:41.977126" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:12:41.977276" level="INFO">${odl_ip} = 10.30.170.114</msg>
<var>${odl_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-08-23T02:12:41.976499" elapsed="0.000801"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>${odl_ip}</arg>
<arg>port=${KARAF_SHELL_PORT}</arg>
<arg>prompt=${KARAF_PROMPT_LOGIN}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-08-23T02:12:41.977451" elapsed="0.000426"/>
</kw>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:12:41.978147" level="INFO">index=16
host=10.30.170.114
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-08-23T02:12:41.978245" level="INFO">${karaf_connection_object} = index=16
host=10.30.170.114
alias=None
port=8101
timeout=10 seconds
newline=

prompt=opendaylight-user
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_err...</msg>
<var>${karaf_connection_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-08-23T02:12:41.978044" elapsed="0.000227"/>
</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-08-23T02:12:41.978414" elapsed="0.002437"/>
</kw>
<kw name="Login" owner="SSHLibrary">
<msg time="2026-08-23T02:12:41.981278" level="INFO">Logging into '10.30.170.114:8101' as 'karaf'.</msg>
<msg time="2026-08-23T02:12:42.143951" 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-08-23T02:12:41.981018" elapsed="0.163098"/>
</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">
<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-08-23T02:12:42.147817" elapsed="0.000238"/>
</kw>
<msg time="2026-08-23T02:12:42.148202" 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-08-23T02:12:42.147225" elapsed="0.001045"/>
</kw>
<kw name="Open 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-08-23T02:12:42.148426" elapsed="0.000021"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:42.148582" elapsed="0.000021"/>
</kw>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:12:42.144977" elapsed="0.003685"/>
</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-08-23T02:12:42.144397" elapsed="0.004311"/>
</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-08-23T02:12:41.973081" elapsed="0.175679"/>
</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-08-23T02:12:41.960663" elapsed="0.188143"/>
</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-08-23T02:12:41.960300" elapsed="0.188578"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:12:41.960162" elapsed="0.188757"/>
</iter>
<var>${index}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="PASS" start="2026-08-23T02:12:41.960011" elapsed="0.188942"/>
</for>
<arg>http_timeout=${http_timeout}</arg>
<doc>Initialize ClusterManagement. Open ssh karaf connections to each ODL.</doc>
<status status="PASS" start="2026-08-23T02:12:41.287888" elapsed="0.861121"/>
</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-08-23T02:12:42.151641" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:42.151523" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:42.151503" elapsed="0.000209"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:12:42.158089" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:42.157980" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:42.157961" elapsed="0.000196"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:12:42.159154" 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-08-23T02:12:42.158707" elapsed="0.000475"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:12:42.159642" 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-08-23T02:12:42.159341" elapsed="0.000327"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:12:42.159713" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:12:42.159888" 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-08-23T02:12:42.158379" elapsed="0.001535"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:12:42.165265" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:42.165156" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:42.165138" elapsed="0.000197"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:12:42.166610" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:42.166434" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:42.166416" elapsed="0.000332"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:12:42.167344" level="INFO">${karaf_connection_index} = 16</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-08-23T02:12:42.166933" elapsed="0.000451"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:12:42.167867" level="INFO">${current_connection_index} = 13</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-08-23T02:12:42.167615" elapsed="0.000293"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:12:42.200444" 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 "/ "n "e "t "[78Cc "[A[78Co</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:12:42.169459" elapsed="0.031134"/>
</kw>
<msg time="2026-08-23T02:12:42.200793" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:12:42.200896" 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-08-23T02:12:42.168129" elapsed="0.032821"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:12:42.276959" level="INFO">"n "f "- "c "s "i "t "- "1 "n "o "d "e "- "g "a "t "e "- "u "s "e "r "f "e "a "t "u "r "e "s "- "a "l "l "- "v "a "n "a "d "i "u "m "/ "t "e "s "t "/ "c "s "i "t "/ "s "u "i "t "e "s "/ "n "e "t "c "o "n "f "/ "C "R "U "D "- "A "C "T "[78CI "[A[78CO
 "N "/ "C "R "U "D "- "A "C "T "I "O "N ". "r "o "b "o "t "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-08-23T02:12:42.202554" elapsed="0.074571"/>
</kw>
<msg time="2026-08-23T02:12:42.277277" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:12:42.277350" level="INFO">${message_wait} =  "n "f "- "c "s "i "t "- "1 "n "o "d "e "- "g "a "t "e "- "u "s "e "r "f "e "a "t "u "r "e "s "- "a "l "l "- "v "a "n "a ...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:12:42.201208" elapsed="0.076194"/>
</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-08-23T02:12:42.277907" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:42.277565" elapsed="0.000487"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:42.277543" elapsed="0.000537"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:42.278758" level="INFO"> "n "f "- "c "s "i "t "- "1 "n "o "d "e "- "g "a "t "e "- "u "s "e "r "f "e "a "t "u "r "e "s "- "a "l "l "- "v "a "n "a "d "i "u "m "/ "t "e "s "t "/ "c "s "i "t "/ "s "u "i "t "e "s "/ "n "e "t "c "o "n "f "/ "C "R "U "D "- "A "C "T "[78CI "[A[78CO
 "N "/ "C "R "U "D "- "A "C "T "I "O "N ". "r "o "b "o "t "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:42.278223" elapsed="0.000697"/>
</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-08-23T02:12:42.279358" elapsed="0.000045"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:42.279049" elapsed="0.000450"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:42.279029" elapsed="0.000496"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:12:42.279561" elapsed="0.000031"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-23T02:12:42.281960" elapsed="0.000148"/>
</kw>
<msg time="2026-08-23T02:12:42.282150" 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-08-23T02:12:42.281448" elapsed="0.000764"/>
</kw>
<kw name="Open 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-08-23T02:12:42.282425" elapsed="0.000064"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:42.282687" elapsed="0.000022"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:12:42.280755" elapsed="0.002149"/>
</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-08-23T02:12:42.279819" elapsed="0.003183"/>
</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-08-23T02:12:42.166092" elapsed="0.117009"/>
</kw>
<msg time="2026-08-23T02:12:42.283193" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:12:42.283237" level="INFO">${message} =  "n "f "- "c "s "i "t "- "1 "n "o "d "e "- "g "a "t "e "- "u "s "e "r "f "e "a "t "u "r "e "s "- "a "l "l "- "v "a "n "a ...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:12:42.165484" elapsed="0.117790"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:12:42.283621" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-08-23T02:12:42.283349" elapsed="0.000334"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:42.283331" elapsed="0.000377"/>
</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-08-23T02:12:42.284228" 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-08-23T02:12:42.284609" elapsed="0.000027"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:12:42.284682" 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-08-23T02:12:42.164864" elapsed="0.119927"/>
</kw>
<msg time="2026-08-23T02:12:42.284901" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:12:42.284945" level="INFO">${output} =  "n "f "- "c "s "i "t "- "1 "n "o "d "e "- "g "a "t "e "- "u "s "e "r "f "e "a "t "u "r "e "s "- "a "l "l "- "v "a "n "a ...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:12:42.160283" elapsed="0.124961"/>
</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-08-23T02:12:42.285584" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:42.285331" elapsed="0.000307"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:42.285312" elapsed="0.000349"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:12:42.160142" elapsed="0.125543"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:12:42.159968" elapsed="0.125745"/>
</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-08-23T02:12:42.157669" elapsed="0.128096"/>
</kw>
<doc>Log suite name to karaf log, useful in suite setup.</doc>
<status status="PASS" start="2026-08-23T02:12:42.149580" elapsed="0.136239"/>
</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-08-23T02:12:42.149160" elapsed="0.136743"/>
</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-08-23T02:12:41.282678" elapsed="1.003275"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:12:42.286383" level="INFO">Creating Session using : alias=operational, url=http://10.30.170.114:8181/rests/data, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x72b0ed1a8ed0&gt;, timeout=None, proxies=None, verify=False,                     debug=0 </msg>
<arg>operational</arg>
<arg>http://${ODL_SYSTEM_IP}:${RESTCONFPORT}${REST_API}</arg>
<arg>auth=${AUTH}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="PASS" start="2026-08-23T02:12:42.286098" elapsed="0.000457"/>
</kw>
<kw name="Setup_NetconfKeywords" owner="NetconfKeywords">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:12:42.287394" level="INFO">${tmp} = {}</msg>
<var>${tmp}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-23T02:12:42.287115" elapsed="0.000305"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:42.291409" level="INFO">${NetconfKeywords__mounted_device_types} = {}</msg>
<arg>${NetconfKeywords__mounted_device_types}</arg>
<arg>${tmp}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-23T02:12:42.287577" elapsed="0.003880"/>
</kw>
<if>
<branch type="IF" condition="${create_session_for_templated_requests}">
<kw name="Create_Default_Session" owner="TemplatedRequests">
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:12:42.295715" level="INFO">Creating Session using : alias=default, url=http://10.30.170.114:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x72b0efa74ad0&gt;, timeout=2, proxies=None, verify=False,                     debug=0 </msg>
<arg>default</arg>
<arg>url=${url}</arg>
<arg>auth=${auth}</arg>
<arg>timeout=${timeout}</arg>
<arg>max_retries=${max_retries}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="PASS" start="2026-08-23T02:12:42.295344" elapsed="0.000476"/>
</kw>
<arg>timeout=2</arg>
<doc>Create "default" session to ${url} with authentication and connection parameters.
This Keyword is in this Resource only so that user do not need to call RequestsLibrary directly.</doc>
<status status="PASS" start="2026-08-23T02:12:42.294937" elapsed="0.000969"/>
</kw>
<status status="PASS" start="2026-08-23T02:12:42.291529" elapsed="0.004409"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:42.291510" elapsed="0.004453"/>
</if>
<kw name="Initialize_Artifact_Deployment_And_Usage" owner="NexusKeywords">
<kw name="Open_Connection_To_ODL_System" owner="SSHKeywords">
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:12:42.301089" level="INFO">${odl_connection} = 17</msg>
<var>${odl_connection}</var>
<arg>${ip_address}</arg>
<arg>prompt=${ODL_SYSTEM_PROMPT}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-08-23T02:12:42.300697" elapsed="0.000418"/>
</kw>
<kw name="Flexible_Controller_Login" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-08-23T02:12:42.302730" level="INFO">Length is 0.</msg>
<msg time="2026-08-23T02:12:42.302807" 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-08-23T02:12:42.302457" elapsed="0.000373"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:12:42.303023" elapsed="0.000316"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-08-23T02:12:42.304191" level="INFO">Logging into '10.30.170.114:22' as 'jenkins'.</msg>
<msg time="2026-08-23T02:12:42.635697" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-186-generic x86_64)

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

 System information as of Sun Aug 23 02:12:41 UTC 2026

  System load:  0.02               Processes:             130
  Usage of /:   13.8% of 77.35GB   Users logged in:       1
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.114
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

41 updates can be applied immediately.
35 of these updates are standard security updates.
To see these additional updates run: apt list --upgradable

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

New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sun Aug 23 02:12:41 2026 from 10.30.171.240
[?2004h[jenkins@releng-19126-54-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-08-23T02:12:42.303874" elapsed="0.331924"/>
</kw>
<msg time="2026-08-23T02:12:42.635887" 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-08-23T02:12:42.303505" elapsed="0.332451"/>
</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-08-23T02:12:42.302027" elapsed="0.334081"/>
</kw>
<msg time="2026-08-23T02:12:42.636162" 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-08-23T02:12:42.301627" elapsed="0.334584"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-08-23T02:12:42.301292" elapsed="0.334995"/>
</kw>
<return>
<value>${odl_connection}</value>
<status status="PASS" start="2026-08-23T02:12:42.636332" elapsed="0.000037"/>
</return>
<msg time="2026-08-23T02:12:42.636517" level="INFO">${odl} = 17</msg>
<var>${odl}</var>
<doc>Open a connection to the ODL system at ${ip_address} and return its identifier.</doc>
<status status="PASS" start="2026-08-23T02:12:42.300404" elapsed="0.336138"/>
</kw>
<kw name="Put File" owner="SSHLibrary">
<msg time="2026-08-23T02:12:42.646519" level="INFO">[chan 1] Opened sftp connection (server version 3)</msg>
<msg time="2026-08-23T02:12:42.655058" level="INFO">'/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../../tools/deployment/search.sh' -&gt; '/home/jenkins//search.sh'</msg>
<arg>/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../../tools/deployment/search.sh</arg>
<doc>Uploads file(s) from the local machine to the remote machine.</doc>
<status status="PASS" start="2026-08-23T02:12:42.636724" elapsed="0.018482"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-08-23T02:12:42.655554" elapsed="0.000535"/>
</kw>
<if>
<branch type="IF" condition="not (${tools_system_connect})">
<return>
<status status="NOT RUN" start="2026-08-23T02:12:42.656530" elapsed="0.000032"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:42.656253" elapsed="0.000368"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:42.656208" elapsed="0.000464"/>
</if>
<kw name="Open_Connection_To_Tools_System" owner="SSHKeywords">
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:12:42.665324" level="INFO">${tools_connection} = 18</msg>
<var>${tools_connection}</var>
<arg>${ip_address}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-08-23T02:12:42.664734" elapsed="0.000630"/>
</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-08-23T02:12:42.667891" level="INFO">Length is 0.</msg>
<msg time="2026-08-23T02:12:42.667970" 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-08-23T02:12:42.667574" elapsed="0.000420"/>
</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-08-23T02:12:42.668152" elapsed="0.000325"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-08-23T02:12:42.669333" level="INFO">Logging into '10.30.170.120:22' as 'jenkins'.</msg>
<msg time="2026-08-23T02:12:43.210524" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-186-generic x86_64)

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

 System information as of Sun Aug 23 02:12:42 UTC 2026

  System load:  0.0                Processes:             116
  Usage of /:   21.4% of 38.58GB   Users logged in:       1
  Memory usage: 5%                 IPv4 address for ens3: 10.30.170.120
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

42 updates can be applied immediately.
35 of these updates are standard security updates.
To see these additional updates run: apt list --upgradable

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

New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sun Aug 23 02:10:22 2026 from 10.30.171.240
[?2004h[jenkins@releng-19126-54-1-docker-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-08-23T02:12:42.669022" elapsed="0.541606"/>
</kw>
<msg time="2026-08-23T02:12:43.210696" 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-08-23T02:12:42.668644" elapsed="0.542122"/>
</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-08-23T02:12:42.666752" elapsed="0.544126"/>
</kw>
<msg time="2026-08-23T02:12:43.210929" 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-08-23T02:12:42.666153" elapsed="0.544822"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-08-23T02:12:42.665636" elapsed="0.545414"/>
</kw>
<return>
<value>${tools_connection}</value>
<status status="PASS" start="2026-08-23T02:12:43.211098" elapsed="0.000036"/>
</return>
<doc>Open a connection to the tools system at ${ip_address} and return its identifier.</doc>
<status status="PASS" start="2026-08-23T02:12:42.664214" elapsed="0.547038"/>
</kw>
<doc>Places search utility to ODL system, which will be needed for version detection.
By default also initialize a SSH connection to Tools system,
as following Keywords assume a working connection towards target system.</doc>
<status status="PASS" start="2026-08-23T02:12:42.296216" elapsed="0.915089"/>
</kw>
<doc>Setup the environment for the other keywords of this Resource to work properly.</doc>
<status status="PASS" start="2026-08-23T02:12:42.286809" elapsed="0.924547"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:12:43.212358" level="INFO">${DEVICE_TYPE_RPC} = rpc-device</msg>
<var>${DEVICE_TYPE_RPC}</var>
<arg>"""${USE_NETCONF_CONNECTOR}""" == """True"""</arg>
<arg>default</arg>
<arg>${DEVICE_TYPE_RPC}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T02:12:43.211573" elapsed="0.000813"/>
</kw>
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T02:12:43.212732" level="INFO" html="true">File '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/customaction/customaction.xml"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/customaction/customaction.xml&lt;/a&gt;' exists.</msg>
<arg>${RPC_FILE}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="PASS" start="2026-08-23T02:12:43.212555" elapsed="0.000228"/>
</kw>
<kw name="Install_And_Start_Testtool" owner="NetconfKeywords">
<kw name="Deploy_Test_Tool" owner="NexusKeywords">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:43.233636" level="INFO">${name_prefix} = netconf-testtool-</msg>
<var>${name_prefix}</var>
<arg>${artifact}-</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:43.233334" elapsed="0.000329"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:12:43.234174" level="INFO">${extension} = jar</msg>
<var>${extension}</var>
<arg>'${component}'=='odl-micro'</arg>
<arg>tar</arg>
<arg>jar</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T02:12:43.233823" elapsed="0.000377"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:12:43.234751" level="INFO">${name_suffix} = -executable.jar</msg>
<var>${name_suffix}</var>
<arg>"${suffix}" != ""</arg>
<arg>-${suffix}.${extension}</arg>
<arg>.${extension}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T02:12:43.234364" elapsed="0.000412"/>
</kw>
<kw name="Deploy_Artifact" owner="NexusKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${explicit_url}""" != ""</arg>
<arg>Deploy_From_Url</arg>
<arg>${explicit_url}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:12:43.236050" elapsed="0.000307"/>
</kw>
<kw name="Fetch From Left" owner="String">
<msg time="2026-08-23T02:12:43.236727" level="INFO">${urlbase} = https://nexus.opendaylight.org/content/repositories/opendaylight.snapshot</msg>
<var>${urlbase}</var>
<arg>${BUNDLE_URL}</arg>
<arg>/org/opendaylight</arg>
<doc>Returns contents of the ``string`` before the first occurrence of ``marker``.</doc>
<status status="PASS" start="2026-08-23T02:12:43.236518" elapsed="0.000235"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:12:43.237312" level="INFO">${urlbase} = https://nexus.opendaylight.org/content/repositories/opendaylight.snapshot</msg>
<var>${urlbase}</var>
<arg>'${urlbase}' != '${BUNDLE_URL}'</arg>
<arg>${urlbase}</arg>
<arg>${fallback_url}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T02:12:43.236928" elapsed="0.000411"/>
</kw>
<kw name="Run_Keyword_If_At_Most_Magnesium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Most" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &lt;= ${Stream_dict}[${upper_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:12:43.255692" elapsed="0.000420"/>
</kw>
<arg>magnesium</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${upper_bound} to vanadium and in case vanadium is at most ${upper_bound},
run Collections.Remove_Values_From_List [['mdsal', 'odlparent', 'yangtools', 'carpeople', 'netconf', 'bgpcep'], 'carpeople'] {} and return its value.</doc>
<status status="PASS" start="2026-08-23T02:12:43.255276" elapsed="0.000905"/>
</kw>
<msg time="2026-08-23T02:12:43.256226" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Most</arg>
<arg>magnesium</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:12:43.246719" elapsed="0.009556"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${RELEASE_INTEGRATED_COMPONENTS}</arg>
<arg>carpeople</arg>
<doc>Compare magnesium to vanadium and in case vanadium is at most magnesium,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-08-23T02:12:43.246375" elapsed="0.009975"/>
</kw>
<kw name="Run_Keyword_If_At_Most_Aluminium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Most" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &lt;= ${Stream_dict}[${upper_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:12:43.274657" elapsed="0.000418"/>
</kw>
<arg>aluminium</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${upper_bound} to vanadium and in case vanadium is at most ${upper_bound},
run Collections.Remove_Values_From_List [['mdsal', 'odlparent', 'yangtools', 'carpeople', 'netconf', 'bgpcep'], 'netconf'] {} and return its value.</doc>
<status status="PASS" start="2026-08-23T02:12:43.274250" elapsed="0.000895"/>
</kw>
<msg time="2026-08-23T02:12:43.275189" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Most</arg>
<arg>aluminium</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:12:43.265606" elapsed="0.009631"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${RELEASE_INTEGRATED_COMPONENTS}</arg>
<arg>netconf</arg>
<doc>Compare aluminium to vanadium and in case vanadium is at most aluminium,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-08-23T02:12:43.265268" elapsed="0.010043"/>
</kw>
<kw name="Run_Keyword_If_At_Most_Silicon" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run_Keyword_If_At_Most" owner="CompareStream">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &lt;= ${Stream_dict}[${upper_bound}]</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:12:43.293567" elapsed="0.000433"/>
</kw>
<arg>silicon</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Compare ${upper_bound} to vanadium and in case vanadium is at most ${upper_bound},
run Collections.Remove_Values_From_List [['mdsal', 'odlparent', 'yangtools', 'carpeople', 'netconf', 'bgpcep'], 'bgpcep'] {} and return its value.</doc>
<status status="PASS" start="2026-08-23T02:12:43.293161" elapsed="0.000908"/>
</kw>
<msg time="2026-08-23T02:12:43.294113" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Run_Keyword_If_At_Most</arg>
<arg>silicon</arg>
<arg>${kw_name}</arg>
<arg>@{varargs}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:12:43.284649" elapsed="0.009511"/>
</kw>
<arg>Collections.Remove_Values_From_List</arg>
<arg>${RELEASE_INTEGRATED_COMPONENTS}</arg>
<arg>bgpcep</arg>
<doc>Compare silicon to vanadium and in case vanadium is at most silicon,
run ${kw_name} @{varargs} &amp;{kwargs} and return its value.</doc>
<status status="PASS" start="2026-08-23T02:12:43.284312" elapsed="0.009923"/>
</kw>
<if>
<branch type="IF" condition="'${build_version}'=='${EMPTY}'">
<kw name="NexusKeywords__Detect_Version_To_Pull" owner="NexusKeywords">
<kw name="NexusKeywords__Get_Items_To_Look_At" owner="NexusKeywords">
<kw name="Dictionary Should Contain Key" owner="Collections">
<arg>${COMPONENT_MAPPING}</arg>
<arg>${component}</arg>
<arg>Component not supported by NexusKeywords version detection: ${component}</arg>
<doc>Fails if ``key`` is not found from ``dictionary``.</doc>
<status status="PASS" start="2026-08-23T02:12:43.297155" elapsed="0.000243"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Get From Dictionary" owner="Collections">
<arg>${COMPONENT_MAPPING}</arg>
<arg>${component}</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-08-23T02:12:43.297964" elapsed="0.000182"/>
</kw>
<msg time="2026-08-23T02:12:43.298192" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Collections.Get_From_Dictionary</arg>
<arg>${COMPONENT_MAPPING}</arg>
<arg>${component}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:12:43.297598" elapsed="0.000643"/>
</kw>
<msg time="2026-08-23T02:12:43.298342" level="INFO">${itemlist} = netconf-api</msg>
<var>${itemlist}</var>
<arg>${component}</arg>
<doc>Get a list of items that might contain the version number that we are looking for.</doc>
<status status="PASS" start="2026-08-23T02:12:43.296888" elapsed="0.001478"/>
</kw>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:12:43.298648" level="INFO">index=18
host=10.30.170.120
alias=None
port=22
timeout=10 seconds
newline=

prompt=&gt;
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-08-23T02:12:43.298747" level="INFO">${current_ssh_connection} = index=18
host=10.30.170.120
alias=None
port=22
timeout=10 seconds
newline=

prompt=&gt;
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-08-23T02:12:43.298527" elapsed="0.000246"/>
</kw>
<kw name="Open_Connection_To_ODL_System" owner="SSHKeywords">
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:12:43.303597" level="INFO">${odl_connection} = 19</msg>
<var>${odl_connection}</var>
<arg>${ip_address}</arg>
<arg>prompt=${ODL_SYSTEM_PROMPT}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-08-23T02:12:43.303188" elapsed="0.000435"/>
</kw>
<kw name="Flexible_Controller_Login" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-08-23T02:12:43.305471" level="INFO">Length is 0.</msg>
<msg time="2026-08-23T02:12:43.305550" 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-08-23T02:12:43.304978" elapsed="0.000596"/>
</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-08-23T02:12:43.305729" elapsed="0.000615"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-08-23T02:12:43.307910" level="INFO">Logging into '10.30.170.114:22' as 'jenkins'.</msg>
<msg time="2026-08-23T02:12:43.636580" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-186-generic x86_64)

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

 System information as of Sun Aug 23 02:12:41 UTC 2026

  System load:  0.02               Processes:             130
  Usage of /:   13.8% of 77.35GB   Users logged in:       1
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.114
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

41 updates can be applied immediately.
35 of these updates are standard security updates.
To see these additional updates run: apt list --upgradable

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

New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sun Aug 23 02:12:42 2026 from 10.30.171.240
[?2004h[jenkins@releng-19126-54-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-08-23T02:12:43.307115" elapsed="0.329614"/>
</kw>
<msg time="2026-08-23T02:12:43.636968" 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-08-23T02:12:43.306518" elapsed="0.330535"/>
</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-08-23T02:12:43.304524" elapsed="0.332638"/>
</kw>
<msg time="2026-08-23T02:12:43.637213" 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-08-23T02:12:43.304144" elapsed="0.333118"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-08-23T02:12:43.303799" elapsed="0.333539"/>
</kw>
<return>
<value>${odl_connection}</value>
<status status="PASS" start="2026-08-23T02:12:43.637391" elapsed="0.000043"/>
</return>
<doc>Open a connection to the ODL system at ${ip_address} and return its identifier.</doc>
<status status="PASS" start="2026-08-23T02:12:43.302894" elapsed="0.334663"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-23T02:12:43.638178" level="INFO">Executing command 'sh search.sh /tmp/netconf-karaf-12.0.0-SNAPSHOT/system netconf-api'.</msg>
<msg time="2026-08-23T02:12:43.671211" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-23T02:12:43.671463" level="INFO">${version} = 12.0.0-SNAPSHOT
org/opendaylight/netconf</msg>
<msg time="2026-08-23T02:12:43.671564" level="INFO">${result} = 0</msg>
<var>${version}</var>
<var>${result}</var>
<arg>sh search.sh ${WORKSPACE}/${BUNDLEFOLDER}/system ${itemlist}</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-23T02:12:43.637776" elapsed="0.033853"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-08-23T02:12:43.672040" elapsed="0.000475"/>
</kw>
<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-08-23T02:12:43.678584" elapsed="0.000199"/>
</kw>
<msg time="2026-08-23T02:12:43.678862" 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-08-23T02:12:43.677744" elapsed="0.001189"/>
</kw>
<kw name="Open 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-08-23T02:12:43.679153" elapsed="0.000030"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:43.679372" elapsed="0.000089"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:12:43.673101" elapsed="0.006450"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:43.680146" level="INFO">12.0.0-SNAPSHOT
org/opendaylight/netconf</msg>
<arg>${version}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:43.679770" elapsed="0.000439"/>
</kw>
<if>
<branch type="IF" condition="${result}!=0">
<kw name="Fail" owner="BuiltIn">
<arg>Component "${component}": searching for "${itemlist}" found no version, cannot locate test tool.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:43.680621" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:43.680316" elapsed="0.000380"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:43.680284" elapsed="0.000448"/>
</if>
<kw name="Split String" owner="String">
<msg time="2026-08-23T02:12:43.681278" level="INFO">${version} = 12.0.0-SNAPSHOT</msg>
<msg time="2026-08-23T02:12:43.681340" level="INFO">${location} = org/opendaylight/netconf</msg>
<var>${version}</var>
<var>${location}</var>
<arg>${version}</arg>
<arg>max_split=1</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-08-23T02:12:43.680953" elapsed="0.000418"/>
</kw>
<return>
<value>${version}</value>
<value>${location}</value>
<status status="PASS" start="2026-08-23T02:12:43.681442" elapsed="0.000039"/>
</return>
<msg time="2026-08-23T02:12:43.681706" level="INFO">${version} = 12.0.0-SNAPSHOT</msg>
<msg time="2026-08-23T02:12:43.681766" level="INFO">${location} = org/opendaylight/netconf</msg>
<var>${version}</var>
<var>${location}</var>
<arg>${component}</arg>
<doc>Determine the exact Nexus directory to be used as a source for a particular test tool
Figure out what version of the tool needs to be pulled out of the
Nexus by looking at the version directory of the subsystem from
which the tool is being pulled. This code is REALLY UGLY but there
is no way around it until the bug
https://bugs.opendaylight.org/show_bug.cgi?id=5206 gets fixed.
I also don't want to depend on maven-metadata-local.xml and other
bits and pieces of ODL distribution which are not required for ODL
to function properly.</doc>
<status status="PASS" start="2026-08-23T02:12:43.296499" elapsed="0.385298"/>
</kw>
<status status="PASS" start="2026-08-23T02:12:43.294314" elapsed="0.387563"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${version}</var>
<var>${location}</var>
<arg>${build_version}</arg>
<arg>${build_location}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:43.682123" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:43.681914" elapsed="0.000295"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:43.294292" elapsed="0.387947"/>
</if>
<if>
<branch type="IF" condition="'SNAPSHOT' in '${version}'">
<kw name="Remove Values From List" owner="Collections">
<arg>${RELEASE_INTEGRATED_COMPONENTS}</arg>
<arg>netconf</arg>
<arg>bgpcep</arg>
<doc>Removes all occurrences of given ``values`` from ``list``.</doc>
<status status="PASS" start="2026-08-23T02:12:43.682615" elapsed="0.000294"/>
</kw>
<status status="PASS" start="2026-08-23T02:12:43.682316" elapsed="0.000651"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:43.682294" elapsed="0.000709"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:12:43.683775" level="INFO">${is_staged} = "FALSE"</msg>
<var>${is_staged}</var>
<arg>"opendaylight.release" not in '${urlbase}' and "opendaylight.snapshot" not in '${urlbase}'</arg>
<arg>"TRUE"</arg>
<arg>"FALSE"</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T02:12:43.683210" elapsed="0.000602"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:12:43.684617" level="INFO">${is_mri_component} = "FALSE"</msg>
<var>${is_mri_component}</var>
<arg>'${component}' in ${RELEASE_INTEGRATED_COMPONENTS}</arg>
<arg>"TRUE"</arg>
<arg>"FALSE"</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T02:12:43.684065" elapsed="0.000597"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:12:43.685274" level="INFO">${urlbase} = https://nexus.opendaylight.org/content/repositories/opendaylight.snapshot</msg>
<var>${urlbase}</var>
<arg>${is_mri_component} == "TRUE" and ${is_staged} == "FALSE"</arg>
<arg>${NEXUS_RELEASE_BASE_URL}</arg>
<arg>${urlbase}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T02:12:43.684883" elapsed="0.000418"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:43.685817" level="INFO">${url} = https://nexus.opendaylight.org/content/repositories/opendaylight.snapshot/org/opendaylight/netconf/netconf-testtool/12.0.0-SNAPSHOT</msg>
<var>${url}</var>
<arg>${urlbase}/${location}/${artifact}/${version}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:43.685457" elapsed="0.000402"/>
</kw>
<kw name="Execute_Command_Should_Pass" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Execute_Command_Passes" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-23T02:12:43.687769" level="INFO">Executing command 'curl -L https://nexus.opendaylight.org/content/repositories/opendaylight.snapshot/org/opendaylight/netconf/netconf-testtool/12.0.0-SNAPSHOT/maven-metadata.xml'.</msg>
<msg time="2026-08-23T02:12:43.761885" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-23T02:12:43.762151" level="INFO">${stdout} = &lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;metadata modelVersion="1.1.0"&gt;
  &lt;groupId&gt;org.opendaylight.netconf&lt;/groupId&gt;
  &lt;artifactId&gt;netconf-testtool&lt;/artifactId&gt;
  &lt;versioning&gt;
    &lt;lastUpdated&gt;2026082...</msg>
<msg time="2026-08-23T02:12:43.762261" level="INFO">${stderr} =   % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0   ...</msg>
<msg time="2026-08-23T02:12:43.762356" level="INFO">${rc} = 0</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>${command}</arg>
<arg>return_stderr=True</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-23T02:12:43.687558" elapsed="0.074850"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-08-23T02:12:43.764473" level="INFO">Length is 316.</msg>
<msg time="2026-08-23T02:12:43.764665" level="FAIL">'  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0100  2787  100  2787    0     0  49907      0 --:--:-- --:--:-- --:--:-- 50672' should be empty.</msg>
<arg>${stderr}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="FAIL" start="2026-08-23T02:12:43.763793" elapsed="0.001025">'  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0100  2787  100  2787    0     0  49907      0 --:--:-- --:--:-- --:--:-- 50672' should be empty.</status>
</kw>
<msg time="2026-08-23T02:12:43.765091" level="INFO">${emptiness_status} = FAIL</msg>
<msg time="2026-08-23T02:12:43.765302" level="INFO">${result} = '  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0  ...</msg>
<var>${emptiness_status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${stderr}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:12:43.762909" elapsed="0.002452"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:12:43.766740" level="INFO">${success} = True</msg>
<var>${success}</var>
<arg>(${rc} == 0) and (("${emptiness_status}" == "PASS") or not ${stderr_must_be_empty})</arg>
<arg>True</arg>
<arg>False</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T02:12:43.765735" elapsed="0.001065"/>
</kw>
<if>
<branch type="IF" condition="(${log_on_success} and ${success}) or (${log_on_failure} and not ${success})">
<kw name="Log_Command_Results" owner="SSHKeywords">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:43.769168" level="INFO">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;metadata modelVersion="1.1.0"&gt;
  &lt;groupId&gt;org.opendaylight.netconf&lt;/groupId&gt;
  &lt;artifactId&gt;netconf-testtool&lt;/artifactId&gt;
  &lt;versioning&gt;
    &lt;lastUpdated&gt;20260822190854&lt;/lastUpdated&gt;
    &lt;snapshot&gt;
      &lt;timestamp&gt;20260822.190854&lt;/timestamp&gt;
      &lt;buildNumber&gt;265&lt;/buildNumber&gt;
    &lt;/snapshot&gt;
    &lt;snapshotVersions&gt;
      &lt;snapshotVersion&gt;
        &lt;extension&gt;pom&lt;/extension&gt;
        &lt;value&gt;12.0.0-20260822.190854-265&lt;/value&gt;
        &lt;updated&gt;20260822190854&lt;/updated&gt;
      &lt;/snapshotVersion&gt;
      &lt;snapshotVersion&gt;
        &lt;extension&gt;jar&lt;/extension&gt;
        &lt;value&gt;12.0.0-20260822.190854-265&lt;/value&gt;
        &lt;updated&gt;20260822190854&lt;/updated&gt;
      &lt;/snapshotVersion&gt;
      &lt;snapshotVersion&gt;
        &lt;classifier&gt;javadoc&lt;/classifier&gt;
        &lt;extension&gt;jar&lt;/extension&gt;
        &lt;value&gt;12.0.0-20260822.190854-265&lt;/value&gt;
        &lt;updated&gt;20260822190854&lt;/updated&gt;
      &lt;/snapshotVersion&gt;
      &lt;snapshotVersion&gt;
        &lt;classifier&gt;executable&lt;/classifier&gt;
        &lt;extension&gt;jar&lt;/extension&gt;
        &lt;value&gt;12.0.0-20260822.190854-265&lt;/value&gt;
        &lt;updated&gt;20260822190854&lt;/updated&gt;
      &lt;/snapshotVersion&gt;
      &lt;snapshotVersion&gt;
        &lt;classifier&gt;stress-client&lt;/classifier&gt;
        &lt;extension&gt;jar&lt;/extension&gt;
        &lt;value&gt;12.0.0-20260822.190854-265&lt;/value&gt;
        &lt;updated&gt;20260822190854&lt;/updated&gt;
      &lt;/snapshotVersion&gt;
      &lt;snapshotVersion&gt;
        &lt;classifier&gt;rest-perf-client&lt;/classifier&gt;
        &lt;extension&gt;jar&lt;/extension&gt;
        &lt;value&gt;12.0.0-20260822.190854-265&lt;/value&gt;
        &lt;updated&gt;20260822190854&lt;/updated&gt;
      &lt;/snapshotVersion&gt;
      &lt;snapshotVersion&gt;
        &lt;classifier&gt;scale-util&lt;/classifier&gt;
        &lt;extension&gt;jar&lt;/extension&gt;
        &lt;value&gt;12.0.0-20260822.190854-265&lt;/value&gt;
        &lt;updated&gt;20260822190854&lt;/updated&gt;
      &lt;/snapshotVersion&gt;
      &lt;snapshotVersion&gt;
        &lt;classifier&gt;stress-client&lt;/classifier&gt;
        &lt;extension&gt;tar.gz&lt;/extension&gt;
        &lt;value&gt;12.0.0-20260822.190854-265&lt;/value&gt;
        &lt;updated&gt;20260822190854&lt;/updated&gt;
      &lt;/snapshotVersion&gt;
      &lt;snapshotVersion&gt;
        &lt;classifier&gt;cyclonedx&lt;/classifier&gt;
        &lt;extension&gt;xml&lt;/extension&gt;
        &lt;value&gt;12.0.0-20260822.190854-265&lt;/value&gt;
        &lt;updated&gt;20260822190854&lt;/updated&gt;
      &lt;/snapshotVersion&gt;
      &lt;snapshotVersion&gt;
        &lt;classifier&gt;cyclonedx&lt;/classifier&gt;
        &lt;extension&gt;json&lt;/extension&gt;
        &lt;value&gt;12.0.0-20260822.190854-265&lt;/value&gt;
        &lt;updated&gt;20260822190854&lt;/updated&gt;
      &lt;/snapshotVersion&gt;
      &lt;snapshotVersion&gt;
        &lt;classifier&gt;sources&lt;/classifier&gt;
        &lt;extension&gt;jar&lt;/extension&gt;
        &lt;value&gt;12.0.0-20260822.190854-265&lt;/value&gt;
        &lt;updated&gt;20260822190854&lt;/updated&gt;
      &lt;/snapshotVersion&gt;
    &lt;/snapshotVersions&gt;
  &lt;/versioning&gt;
  &lt;version&gt;12.0.0-SNAPSHOT&lt;/version&gt;
&lt;/metadata&gt;</msg>
<arg>${stdout}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:43.768800" elapsed="0.000482"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:43.769821" level="INFO">  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0100  2787  100  2787    0     0  49907      0 --:--:-- --:--:-- --:--:-- 50672</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:43.769491" elapsed="0.000417"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:43.770444" level="INFO">0</msg>
<arg>${rc}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:43.770115" elapsed="0.000389"/>
</kw>
<arg>${stdout}</arg>
<arg>${stderr}</arg>
<arg>${rc}</arg>
<doc>Log everything returned by SSHLibrary.Execute_Command</doc>
<status status="PASS" start="2026-08-23T02:12:43.767794" elapsed="0.002783"/>
</kw>
<status status="PASS" start="2026-08-23T02:12:43.767008" elapsed="0.003617"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:43.766961" elapsed="0.003699"/>
</if>
<if>
<branch type="IF" condition="${return_success_only}">
<return>
<value>${success}</value>
<status status="NOT RUN" start="2026-08-23T02:12:43.770898" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:43.770737" elapsed="0.000223"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:43.770713" elapsed="0.000277"/>
</if>
<if>
<branch type="IF" condition="${success}">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-08-23T02:12:43.771187" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-08-23T02:12:43.771062" elapsed="0.000205"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:43.771040" elapsed="0.000260"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Got rc: ${rc} or stderr was not empty: ${stderr}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:43.771497" elapsed="0.000030"/>
</kw>
<arg>${command}</arg>
<arg>return_success_only=False</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Execute command via the active SSH connection. For success, rc has to be zero and optionally stderr has to be empty.
Log everything, depending on arguments and success. Return either success string or stdout.
TODO: Do we want to support customizing return values the same way as SSHLibrary.Execute_Command does?</doc>
<status status="PASS" start="2026-08-23T02:12:43.686982" elapsed="0.084700"/>
</kw>
<msg time="2026-08-23T02:12:43.771795" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Execute_Command_Passes</arg>
<arg>${command}</arg>
<arg>return_success_only=False</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:12:43.686399" elapsed="0.085486"/>
</kw>
<msg time="2026-08-23T02:12:43.772164" level="INFO">${metadata} = &lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;metadata modelVersion="1.1.0"&gt;
  &lt;groupId&gt;org.opendaylight.netconf&lt;/groupId&gt;
  &lt;artifactId&gt;netconf-testtool&lt;/artifactId&gt;
  &lt;versioning&gt;
    &lt;lastUpdated&gt;2026082...</msg>
<var>${metadata}</var>
<arg>curl -L ${url}/maven-metadata.xml</arg>
<doc>A wrapper for Execute_Command_Passes with return_success_only=False
Also, log_on_success defaults to True (but is customizable, unlike return_success_only)..</doc>
<status status="PASS" start="2026-08-23T02:12:43.686062" elapsed="0.086143"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Command_Should_Pass" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Execute_Command_Passes" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-23T02:12:43.775315" level="INFO">Executing command 'echo "&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;metadata modelVersion="1.1.0"&gt;
  &lt;groupId&gt;org.opendaylight.netconf&lt;/groupId&gt;
  &lt;artifactId&gt;netconf-testtool&lt;/artifactId&gt;
  &lt;versioning&gt;
    &lt;lastUpdated&gt;20260822190854&lt;/lastUpdated&gt;
    &lt;snapshot&gt;
      &lt;timestamp&gt;20260822.190854&lt;/timestamp&gt;
      &lt;buildNumber&gt;265&lt;/buildNumber&gt;
    &lt;/snapshot&gt;
    &lt;snapshotVersions&gt;
      &lt;snapshotVersion&gt;
        &lt;extension&gt;pom&lt;/extension&gt;
        &lt;value&gt;12.0.0-20260822.190854-265&lt;/value&gt;
        &lt;updated&gt;20260822190854&lt;/updated&gt;
      &lt;/snapshotVersion&gt;
      &lt;snapshotVersion&gt;
        &lt;extension&gt;jar&lt;/extension&gt;
        &lt;value&gt;12.0.0-20260822.190854-265&lt;/value&gt;
        &lt;updated&gt;20260822190854&lt;/updated&gt;
      &lt;/snapshotVersion&gt;
      &lt;snapshotVersion&gt;
        &lt;classifier&gt;javadoc&lt;/classifier&gt;
        &lt;extension&gt;jar&lt;/extension&gt;
        &lt;value&gt;12.0.0-20260822.190854-265&lt;/value&gt;
        &lt;updated&gt;20260822190854&lt;/updated&gt;
      &lt;/snapshotVersion&gt;
      &lt;snapshotVersion&gt;
        &lt;classifier&gt;executable&lt;/classifier&gt;
        &lt;extension&gt;jar&lt;/extension&gt;
        &lt;value&gt;12.0.0-20260822.190854-265&lt;/value&gt;
        &lt;updated&gt;20260822190854&lt;/updated&gt;
      &lt;/snapshotVersion&gt;
      &lt;snapshotVersion&gt;
        &lt;classifier&gt;stress-client&lt;/classifier&gt;
        &lt;extension&gt;jar&lt;/extension&gt;
        &lt;value&gt;12.0.0-20260822.190854-265&lt;/value&gt;
        &lt;updated&gt;20260822190854&lt;/updated&gt;
      &lt;/snapshotVersion&gt;
      &lt;snapshotVersion&gt;
        &lt;classifier&gt;rest-perf-client&lt;/classifier&gt;
        &lt;extension&gt;jar&lt;/extension&gt;
        &lt;value&gt;12.0.0-20260822.190854-265&lt;/value&gt;
        &lt;updated&gt;20260822190854&lt;/updated&gt;
      &lt;/snapshotVersion&gt;
      &lt;snapshotVersion&gt;
        &lt;classifier&gt;scale-util&lt;/classifier&gt;
        &lt;extension&gt;jar&lt;/extension&gt;
        &lt;value&gt;12.0.0-20260822.190854-265&lt;/value&gt;
        &lt;updated&gt;20260822190854&lt;/updated&gt;
      &lt;/snapshotVersion&gt;
      &lt;snapshotVersion&gt;
        &lt;classifier&gt;stress-client&lt;/classifier&gt;
        &lt;extension&gt;tar.gz&lt;/extension&gt;
        &lt;value&gt;12.0.0-20260822.190854-265&lt;/value&gt;
        &lt;updated&gt;20260822190854&lt;/updated&gt;
      &lt;/snapshotVersion&gt;
      &lt;snapshotVersion&gt;
        &lt;classifier&gt;cyclonedx&lt;/classifier&gt;
        &lt;extension&gt;xml&lt;/extension&gt;
        &lt;value&gt;12.0.0-20260822.190854-265&lt;/value&gt;
        &lt;updated&gt;20260822190854&lt;/updated&gt;
      &lt;/snapshotVersion&gt;
      &lt;snapshotVersion&gt;
        &lt;classifier&gt;cyclonedx&lt;/classifier&gt;
        &lt;extension&gt;json&lt;/extension&gt;
        &lt;value&gt;12.0.0-20260822.190854-265&lt;/value&gt;
        &lt;updated&gt;20260822190854&lt;/updated&gt;
      &lt;/snapshotVersion&gt;
      &lt;snapshotVersion&gt;
        &lt;classifier&gt;sources&lt;/classifier&gt;
        &lt;extension&gt;jar&lt;/extension&gt;
        &lt;value&gt;12.0.0-20260822.190854-265&lt;/value&gt;
        &lt;updated&gt;20260822190854&lt;/updated&gt;
      &lt;/snapshotVersion&gt;
    &lt;/snapshotVersions&gt;
  &lt;/versioning&gt;
  &lt;version&gt;12.0.0-SNAPSHOT&lt;/version&gt;
&lt;/metadata&gt;" | grep value | head -n 1 | cut -d '&gt;' -f 2 | cut -d '&lt;' -f 1'.</msg>
<msg time="2026-08-23T02:12:43.814156" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-23T02:12:43.814399" level="INFO">${stdout} = 12.0.0-20260822.190854-265</msg>
<msg time="2026-08-23T02:12:43.814494" level="INFO">${stderr} = </msg>
<msg time="2026-08-23T02:12:43.814581" level="INFO">${rc} = 0</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>${command}</arg>
<arg>return_stderr=True</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-23T02:12:43.775062" elapsed="0.039568"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Should Be Empty" owner="BuiltIn">
<msg time="2026-08-23T02:12:43.816562" level="INFO">Length is 0.</msg>
<arg>${stderr}</arg>
<doc>Verifies that the given item is empty.</doc>
<status status="PASS" start="2026-08-23T02:12:43.815827" elapsed="0.000838"/>
</kw>
<msg time="2026-08-23T02:12:43.816917" level="INFO">${emptiness_status} = PASS</msg>
<msg time="2026-08-23T02:12:43.817020" level="INFO">${result} = None</msg>
<var>${emptiness_status}</var>
<var>${result}</var>
<arg>BuiltIn.Should_Be_Empty</arg>
<arg>${stderr}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:12:43.815061" elapsed="0.002008"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:12:43.818383" level="INFO">${success} = True</msg>
<var>${success}</var>
<arg>(${rc} == 0) and (("${emptiness_status}" == "PASS") or not ${stderr_must_be_empty})</arg>
<arg>True</arg>
<arg>False</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T02:12:43.817435" elapsed="0.001006"/>
</kw>
<if>
<branch type="IF" condition="(${log_on_success} and ${success}) or (${log_on_failure} and not ${success})">
<kw name="Log_Command_Results" owner="SSHKeywords">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:43.821038" level="INFO">12.0.0-20260822.190854-265</msg>
<arg>${stdout}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:43.820282" elapsed="0.000819"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:43.821936" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:43.821307" elapsed="0.000687"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:43.822798" level="INFO">0</msg>
<arg>${rc}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:43.822199" elapsed="0.000692"/>
</kw>
<arg>${stdout}</arg>
<arg>${stderr}</arg>
<arg>${rc}</arg>
<doc>Log everything returned by SSHLibrary.Execute_Command</doc>
<status status="PASS" start="2026-08-23T02:12:43.819391" elapsed="0.003576"/>
</kw>
<status status="PASS" start="2026-08-23T02:12:43.818609" elapsed="0.004407"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:43.818565" elapsed="0.004486"/>
</if>
<if>
<branch type="IF" condition="${return_success_only}">
<return>
<value>${success}</value>
<status status="NOT RUN" start="2026-08-23T02:12:43.823266" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:43.823126" elapsed="0.000201"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:43.823103" elapsed="0.000255"/>
</if>
<if>
<branch type="IF" condition="${success}">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-08-23T02:12:43.823550" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-08-23T02:12:43.823428" elapsed="0.000242"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:43.823407" elapsed="0.000314"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Got rc: ${rc} or stderr was not empty: ${stderr}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:43.823954" elapsed="0.000032"/>
</kw>
<arg>${command}</arg>
<arg>return_success_only=False</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Execute command via the active SSH connection. For success, rc has to be zero and optionally stderr has to be empty.
Log everything, depending on arguments and success. Return either success string or stdout.
TODO: Do we want to support customizing return values the same way as SSHLibrary.Execute_Command does?</doc>
<status status="PASS" start="2026-08-23T02:12:43.774288" elapsed="0.049833"/>
</kw>
<msg time="2026-08-23T02:12:43.824191" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Execute_Command_Passes</arg>
<arg>${command}</arg>
<arg>return_success_only=False</arg>
<arg>log_on_success=${log_on_success}</arg>
<arg>log_on_failure=${log_on_failure}</arg>
<arg>stderr_must_be_empty=${stderr_must_be_empty}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:12:43.773557" elapsed="0.050699"/>
</kw>
<arg>echo "${metadata}" | grep value | head -n 1 | cut -d '&gt;' -f 2 | cut -d '&lt;' -f 1</arg>
<arg>stderr_must_be_empty=${True}</arg>
<doc>A wrapper for Execute_Command_Passes with return_success_only=False
Also, log_on_success defaults to True (but is customizable, unlike return_success_only)..</doc>
<status status="PASS" start="2026-08-23T02:12:43.772994" elapsed="0.051368"/>
</kw>
<msg time="2026-08-23T02:12:43.824493" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:12:43.824553" level="INFO">${namepart} = 12.0.0-20260822.190854-265</msg>
<var>${status}</var>
<var>${namepart}</var>
<arg>SSHKeywords.Execute_Command_Should_Pass</arg>
<arg>echo "${metadata}" | grep value | head -n 1 | cut -d '&gt;' -f 2 | cut -d '&lt;' -f 1</arg>
<arg>stderr_must_be_empty=${True}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:12:43.772429" elapsed="0.052155"/>
</kw>
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-08-23T02:12:43.825204" level="INFO">Length is 26.</msg>
<msg time="2026-08-23T02:12:43.825307" level="INFO">${length} = 26</msg>
<var>${length}</var>
<arg>${namepart}</arg>
<doc>Returns and logs the length of the given item as an integer.</doc>
<status status="PASS" start="2026-08-23T02:12:43.824807" elapsed="0.000532"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:12:43.826184" level="INFO">${namepart} = 12.0.0-20260822.190854-265</msg>
<var>${namepart}</var>
<arg>"${status}" != "PASS" or ${length} == 0</arg>
<arg>${version}</arg>
<arg>${namepart}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T02:12:43.825560" elapsed="0.000661"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:43.827209" level="INFO">${filename} = netconf-testtool-12.0.0-20260822.190854-265-executable.jar</msg>
<var>${filename}</var>
<arg>${name_prefix}${namepart}${name_suffix}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:43.826441" elapsed="0.000806"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:43.827834" level="INFO">netconf-testtool-12.0.0-20260822.190854-265-executable.jar</msg>
<arg>${filename}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:43.827458" elapsed="0.000459"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:43.828560" level="INFO">${url} = https://nexus.opendaylight.org/content/repositories/opendaylight.snapshot/org/opendaylight/netconf/netconf-testtool/12.0.0-SNAPSHOT/netconf-testtool-12.0.0-20260822.190854-265-executable.jar</msg>
<var>${url}</var>
<arg>${url}/${filename}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:43.828128" elapsed="0.000469"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-23T02:12:43.828947" level="INFO">Executing command 'wget -q -N 'https://nexus.opendaylight.org/content/repositories/opendaylight.snapshot/org/opendaylight/netconf/netconf-testtool/12.0.0-SNAPSHOT/netconf-testtool-12.0.0-20260822.190854-265-executable.jar' 2&gt;&amp;1'.</msg>
<msg time="2026-08-23T02:12:43.886052" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-23T02:12:43.886290" level="INFO">${response} = </msg>
<msg time="2026-08-23T02:12:43.886387" level="INFO">${result} = 0</msg>
<var>${response}</var>
<var>${result}</var>
<arg>wget -q -N '${url}' 2&gt;&amp;1</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-23T02:12:43.828766" elapsed="0.057671"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:43.887396" level="INFO"/>
<arg>${response}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:43.886797" elapsed="0.000690"/>
</kw>
<if>
<branch type="IF" condition="${result} == 0">
<return>
<value>${filename}</value>
<status status="PASS" start="2026-08-23T02:12:43.887968" elapsed="0.000059"/>
</return>
<status status="PASS" start="2026-08-23T02:12:43.887649" elapsed="0.000453"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:43.887601" elapsed="0.000554"/>
</if>
<kw name="Replace String Using Regexp" owner="String">
<var>${release_url}</var>
<arg>${url}</arg>
<arg>autorelease-[0-9]{4}</arg>
<arg>opendaylight.release</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:43.888478" elapsed="0.000049"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${response}</var>
<var>${result}</var>
<arg>wget -q -N '${release_url}' 2&gt;&amp;1</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:43.888899" elapsed="0.000049"/>
</kw>
<if>
<branch type="IF" condition="${result} != 0">
<kw name="Fail" owner="BuiltIn">
<arg>Artifact "${artifact}" in component "${component}" could not be downloaded from ${release_url} nor ${url}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:43.889412" elapsed="0.000044"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:43.889106" elapsed="0.000421"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:43.889070" elapsed="0.000507"/>
</if>
<return>
<value>${filename}</value>
<status status="NOT RUN" start="2026-08-23T02:12:43.889647" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T02:12:43.889982" level="INFO">${filename} = netconf-testtool-12.0.0-20260822.190854-265-executable.jar</msg>
<var>${filename}</var>
<arg>${component}</arg>
<arg>${artifact}</arg>
<arg>${name_prefix}</arg>
<arg>${name_suffix}</arg>
<arg>${fallback_url}</arg>
<arg>${explicit_url}</arg>
<arg>${build_version}</arg>
<arg>${build_location}</arg>
<doc>Deploy the specified artifact from Nexus to the cwd of the machine to which the active SSHLibrary connection points.
netconf is a name part of an artifact present in system/ of ODl installation with the same version as netconf-testtool should have.
Must have https://nexus.opendaylight.org/content/repositories/opendaylight.snapshot/org/opendaylight/netconf/netconf-karaf/12.0.0-SNAPSHOT/netconf-karaf-12.0.0-20260822.190854-265.zip variable set to the URL from which the
tested ODL distribution was downloaded and this place must be
inside a repository created by a standard distribution
construction job. If this is detected to ne be the case, fallback URL is used.
If  is non-empty, Deploy_From_Utrl is called instead.
TODO: Allow deploying to a specific directory, we have SSHKeywords.Execute_Command_At_Cwd_Should_Pass now.</doc>
<status status="PASS" start="2026-08-23T02:12:43.235429" elapsed="0.654611"/>
</kw>
<return>
<value>${filename}</value>
<status status="PASS" start="2026-08-23T02:12:43.890265" elapsed="0.000060"/>
</return>
<msg time="2026-08-23T02:12:43.890612" level="INFO">${filename} = netconf-testtool-12.0.0-20260822.190854-265-executable.jar</msg>
<var>${filename}</var>
<arg>netconf</arg>
<arg>netconf-testtool</arg>
<doc>Deploy a test tool.
The test tools have naming convention of the form
"&lt;repository_url&gt;/some/dir/somewhere/&lt;tool-name&gt;/&lt;tool-name&gt;-&lt;version-tag&gt;-${suffix}.jar"
where "&lt;tool-name&gt;" is the name of the tool and "&lt;version-tag&gt;" is
the version tag that is digged out of the maven metadata. This
keyword calculates ${name_prefix} and ${name_suffix} for
"Deploy_Artifact" and then calls "Deploy_Artifact" to do the real
work of deploying the artifact.</doc>
<status status="PASS" start="2026-08-23T02:12:43.227599" elapsed="0.663077"/>
</kw>
<kw name="Start_Testtool" owner="NetconfKeywords">
<kw name="NetconfKeywords__Deploy_Additional_Schemas" owner="NetconfKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-23T02:12:43.893968" level="INFO">Executing command 'rm -rf schemas 2&gt;&amp;1'.</msg>
<msg time="2026-08-23T02:12:43.933563" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-23T02:12:43.933769" level="INFO">${response} = </msg>
<var>${response}</var>
<arg>rm -rf schemas 2&gt;&amp;1</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-23T02:12:43.893726" elapsed="0.040098"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:43.934802" level="INFO"/>
<arg>${response}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:43.934219" elapsed="0.000716"/>
</kw>
<if>
<branch type="IF" condition="'${schemas}' == 'none'">
<return>
<value>${EMPTY}</value>
<status status="NOT RUN" start="2026-08-23T02:12:43.935334" elapsed="0.000033"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:43.935085" elapsed="0.000348"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:43.935044" elapsed="0.000439"/>
</if>
<kw name="Put Directory" owner="SSHLibrary">
<msg time="2026-08-23T02:12:43.977447" level="INFO">[chan 5] Opened sftp connection (server version 3)</msg>
<msg time="2026-08-23T02:12:44.055173" level="INFO">'/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/schemas/yang-ext@2013-07-09.yang' -&gt; '/home/jenkins/./schemas/yang-ext@2013-07-09.yang'</msg>
<msg time="2026-08-23T02:12:44.055232" level="INFO">'/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/schemas/example-action@2016-07-07.yang' -&gt; '/home/jenkins/./schemas/example-action@2016-07-07.yang'</msg>
<msg time="2026-08-23T02:12:44.055270" level="INFO">'/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/schemas/car@2014-08-18.yang' -&gt; '/home/jenkins/./schemas/car@2014-08-18.yang'</msg>
<msg time="2026-08-23T02:12:44.055305" level="INFO">'/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/schemas/car-purchase@2014-08-18.yang' -&gt; '/home/jenkins/./schemas/car-purchase@2014-08-18.yang'</msg>
<msg time="2026-08-23T02:12:44.055340" level="INFO">'/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/schemas/ncmount-l2fib@2016-03-07.yang' -&gt; '/home/jenkins/./schemas/ncmount-l2fib@2016-03-07.yang'</msg>
<msg time="2026-08-23T02:12:44.055375" level="INFO">'/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/schemas/augment-main-a@2014-01-21.yang' -&gt; '/home/jenkins/./schemas/augment-main-a@2014-01-21.yang'</msg>
<msg time="2026-08-23T02:12:44.055408" level="INFO">'/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/schemas/ietf-netconf-monitoring@2010-10-04.yang' -&gt; '/home/jenkins/./schemas/ietf-netconf-monitoring@2010-10-04.yang'</msg>
<msg time="2026-08-23T02:12:44.055442" level="INFO">'/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/schemas/ietf-netconf-monitoring-extension@2013-12-10.yang' -&gt; '/home/jenkins/./schemas/ietf-netconf-monitoring-extension@2013-12-10.yang'</msg>
<msg time="2026-08-23T02:12:44.055477" level="INFO">'/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/schemas/people@2014-08-18.yang' -&gt; '/home/jenkins/./schemas/people@2014-08-18.yang'</msg>
<msg time="2026-08-23T02:12:44.055511" level="INFO">'/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/schemas/test@2014-10-18.yang' -&gt; '/home/jenkins/./schemas/test@2014-10-18.yang'</msg>
<msg time="2026-08-23T02:12:44.055544" level="INFO">'/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/schemas/car-people@2014-08-18.yang' -&gt; '/home/jenkins/./schemas/car-people@2014-08-18.yang'</msg>
<msg time="2026-08-23T02:12:44.055578" level="INFO">'/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/schemas/ietf-inet-types@2010-09-24.yang' -&gt; '/home/jenkins/./schemas/ietf-inet-types@2010-09-24.yang'</msg>
<msg time="2026-08-23T02:12:44.055612" level="INFO">'/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/schemas/main@2014-01-21.yang' -&gt; '/home/jenkins/./schemas/main@2014-01-21.yang'</msg>
<arg>${schemas}</arg>
<arg>destination=./schemas</arg>
<doc>Uploads a directory, including its content, from the local machine to the remote machine.</doc>
<status status="PASS" start="2026-08-23T02:12:43.935869" elapsed="0.119806"/>
</kw>
<kw name="List Directory" owner="SSHLibrary">
<msg time="2026-08-23T02:12:44.059023" level="INFO">13 items:
augment-main-a@2014-01-21.yang
car-people@2014-08-18.yang
car-purchase@2014-08-18.yang
car@2014-08-18.yang
example-action@2016-07-07.yang
ietf-inet-types@2010-09-24.yang
ietf-netconf-monitoring-extension@2013-12-10.yang
ietf-netconf-monitoring@2010-10-04.yang
main@2014-01-21.yang
ncmount-l2fib@2016-03-07.yang
people@2014-08-18.yang
test@2014-10-18.yang
yang-ext@2013-07-09.yang</msg>
<arg>./schemas</arg>
<doc>Returns and logs items in the remote ``path``, optionally filtered with ``pattern``.</doc>
<status status="PASS" start="2026-08-23T02:12:44.055938" elapsed="0.003163"/>
</kw>
<return>
<value>--schemas-dir ./schemas</value>
<status status="PASS" start="2026-08-23T02:12:44.059165" elapsed="0.000042"/>
</return>
<msg time="2026-08-23T02:12:44.059349" level="INFO">${schemas_option} = --schemas-dir ./schemas</msg>
<var>${schemas_option}</var>
<arg>${schemas}</arg>
<doc>Internal keyword for Install_And_Start_TestTool
This deploys the additional schemas if any and returns a
command line argument to be added to the testtool commandline
to tell it to load them. While this code could be integrated
into its only user, I considered the resulting code to be too
unreadable as the actions are quite different in the two
possibilities (additional schemas present versus no additional
schemas present), therefore a separate keyword is used.</doc>
<status status="PASS" start="2026-08-23T02:12:43.893121" elapsed="0.166263"/>
</kw>
<kw name="NetconfKeywords__Deploy_Custom_RPC" owner="NetconfKeywords">
<if>
<branch type="IF" condition="'${rpc_config}' == 'none'">
<return>
<value>${EMPTY}</value>
<status status="NOT RUN" start="2026-08-23T02:12:44.060237" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:44.060085" elapsed="0.000257"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:44.060059" elapsed="0.000318"/>
</if>
<kw name="Copy_File_To_Tools_System" owner="SSHKeywords">
<kw name="Copy_File_To_Remote_System" owner="SSHKeywords">
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:12:44.063060" level="INFO">index=18
host=10.30.170.120
alias=None
port=22
timeout=10 seconds
newline=

prompt=&gt;
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-08-23T02:12:44.063200" level="INFO">${current_connection} = index=18
host=10.30.170.120
alias=None
port=22
timeout=10 seconds
newline=

prompt=&gt;
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-08-23T02:12:44.062890" elapsed="0.000346"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Unsafe_Copy_File_To_Remote_System" owner="SSHKeywords">
<kw name="Open Connection" owner="SSHLibrary">
<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-08-23T02:12:44.079002" elapsed="0.000424"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-08-23T02:12:44.080585" level="INFO">Length is 0.</msg>
<msg time="2026-08-23T02:12:44.080701" 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-08-23T02:12:44.080072" elapsed="0.000654"/>
</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-08-23T02:12:44.080936" elapsed="0.000773"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-08-23T02:12:44.083776" level="INFO">Logging into '10.30.170.120:22' as 'jenkins'.</msg>
<msg time="2026-08-23T02:12:44.369337" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-186-generic x86_64)

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

 System information as of Sun Aug 23 02:12:42 UTC 2026

  System load:  0.0                Processes:             116
  Usage of /:   21.4% of 38.58GB   Users logged in:       1
  Memory usage: 5%                 IPv4 address for ens3: 10.30.170.120
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

42 updates can be applied immediately.
35 of these updates are standard security updates.
To see these additional updates run: apt list --upgradable

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

New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sun Aug 23 02:12:43 2026 from 10.30.171.240
[?2004h[jenkins@releng-19126-54-1-docker-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-08-23T02:12:44.083220" elapsed="0.286263"/>
</kw>
<msg time="2026-08-23T02:12:44.369594" 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-08-23T02:12:44.081960" elapsed="0.287778"/>
</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-08-23T02:12:44.079619" elapsed="0.290287"/>
</kw>
<kw name="Put File" owner="SSHLibrary">
<msg time="2026-08-23T02:12:44.376914" level="INFO">[chan 1] Opened sftp connection (server version 3)</msg>
<msg time="2026-08-23T02:12:44.383717" level="INFO">'/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/customaction/customaction.xml' -&gt; '/tmp/customaction.xml'</msg>
<arg>${source}</arg>
<arg>${destination}</arg>
<doc>Uploads file(s) from the local machine to the remote machine.</doc>
<status status="PASS" start="2026-08-23T02:12:44.370081" elapsed="0.013726"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-08-23T02:12:44.384105" elapsed="0.000352"/>
</kw>
<arg>@{args}</arg>
<arg>&amp;{kwargs}</arg>
<doc>Copy the ${source} file to the ${destination} file on the remote ${system}. The keyword opens and closes a single
ssh connection and does not rely on any existing ssh connection that may be open.</doc>
<status status="PASS" start="2026-08-23T02:12:44.078537" elapsed="0.306005"/>
</kw>
<msg time="2026-08-23T02:12:44.384603" 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-08-23T02:12:44.063448" elapsed="0.321231"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-23T02:12:44.389664" elapsed="0.000269"/>
</kw>
<msg time="2026-08-23T02:12:44.389997" 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-08-23T02:12:44.388880" elapsed="0.001207"/>
</kw>
<kw name="Open 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-08-23T02:12:44.390318" elapsed="0.000031"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:44.390552" elapsed="0.000029"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:12:44.385163" elapsed="0.005506"/>
</kw>
<arg>SSHKeywords.Unsafe_Copy_File_To_Remote_System</arg>
<arg>${system}</arg>
<arg>${source}</arg>
<arg>${destination}</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>${prompt}</arg>
<arg>${prompt_timeout}</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-08-23T02:12:44.062153" elapsed="0.328597"/>
</kw>
<arg>${system}</arg>
<arg>${source}</arg>
<arg>${destination}</arg>
<arg>${TOOLS_SYSTEM_USER}</arg>
<arg>${TOOLS_SYSTEM_PASSWORD}</arg>
<arg>${TOOLS_SYSTEM_PROMPT}</arg>
<doc>Copy the /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/customaction/customaction.xml file to the /tmp file on the remote 10.30.170.120. Any pre-existing active
ssh connection will be retained.</doc>
<status status="PASS" start="2026-08-23T02:12:44.061332" elapsed="0.329544"/>
</kw>
<arg>${TOOLS_SYSTEM_1_IP}</arg>
<arg>${rpc_config}</arg>
<arg>/tmp</arg>
<doc>Wrapper keyword to make it easier to copy a file to an Tools specific system</doc>
<status status="PASS" start="2026-08-23T02:12:44.060638" elapsed="0.330391"/>
</kw>
<return>
<value>--rpc-config /tmp/customaction.xml</value>
<status status="PASS" start="2026-08-23T02:12:44.391098" elapsed="0.000043"/>
</return>
<msg time="2026-08-23T02:12:44.391286" level="INFO">${rpc_config_option} = --rpc-config /tmp/customaction.xml</msg>
<var>${rpc_config_option}</var>
<arg>${rpc_config}</arg>
<doc>Internal keyword for Install_And_Start_TestTool
This deploys the optional custom rpc file.
Drop out of the keyword, returning no command line argument when there
is no rpc file to deploy.</doc>
<status status="PASS" start="2026-08-23T02:12:44.059744" elapsed="0.331580"/>
</kw>
<kw name="Compose_Full_Java_Command" owner="NexusKeywords">
<kw name="Compose_Base_Java_Command" owner="NexusKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${openjdk}""" == "openjdk8"</arg>
<arg>Compose_Dilemma_Filepath</arg>
<arg>${JAVA_8_HOME_CENTOS}/bin/java</arg>
<arg>${JAVA_8_HOME_UBUNTU}/bin/java</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:12:44.393244" elapsed="0.000471"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${openjdk}""" == "openjdk11"</arg>
<arg>Compose_Dilemma_Filepath</arg>
<arg>${JAVA_11_HOME_CENTOS}/bin/java</arg>
<arg>${JAVA_11_HOME_UBUNTU}/bin/java</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:12:44.393982" elapsed="0.000724"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>"""${openjdk}""" == "openjdk17"</arg>
<arg>Compose_Dilemma_Filepath</arg>
<arg>${JAVA_17_HOME_CENTOS}/bin/java</arg>
<arg>${JAVA_17_HOME_UBUNTU}/bin/java</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:12:44.394975" elapsed="0.000458"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Compose_Dilemma_Filepath" owner="NexusKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-23T02:12:44.397022" level="INFO">Executing command 'ls -lA /usr/lib/jvm/java-21-openjdk-amd64/bin/java 2&gt;&amp;1'.</msg>
<msg time="2026-08-23T02:12:44.409172" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-23T02:12:44.409405" level="INFO">${out} = -rwxr-xr-x 1 root root 14456 Apr 26 09:33 /usr/lib/jvm/java-21-openjdk-amd64/bin/java</msg>
<msg time="2026-08-23T02:12:44.409502" level="INFO">${rc} = 0</msg>
<var>${out}</var>
<var>${rc}</var>
<arg>ls -lA ${specific_path} 2&gt;&amp;1</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-23T02:12:44.396831" elapsed="0.012721"/>
</kw>
<if>
<branch type="IF" condition="${rc} == 0">
<return>
<value>${specific_path}</value>
<status status="PASS" start="2026-08-23T02:12:44.410003" elapsed="0.000058"/>
</return>
<status status="PASS" start="2026-08-23T02:12:44.409725" elapsed="0.000411"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:44.409683" elapsed="0.000509"/>
</if>
<return>
<value>${default_path}</value>
<status status="NOT RUN" start="2026-08-23T02:12:44.410268" elapsed="0.000031"/>
</return>
<arg>${JAVA_21_HOME_CENTOS}/bin/java</arg>
<arg>${JAVA_21_HOME_UBUNTU}/bin/java</arg>
<doc>Query active SSH connection, return specific path if it exists else default path.</doc>
<status status="PASS" start="2026-08-23T02:12:44.396447" elapsed="0.014059"/>
</kw>
<msg time="2026-08-23T02:12:44.410598" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>"""${openjdk}""" == "openjdk21"</arg>
<arg>Compose_Dilemma_Filepath</arg>
<arg>${JAVA_21_HOME_CENTOS}/bin/java</arg>
<arg>${JAVA_21_HOME_UBUNTU}/bin/java</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:12:44.395674" elapsed="0.015025"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${out}</var>
<var>${rc}</var>
<arg>java -version 2&gt;&amp;1</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:44.411096" elapsed="0.000049"/>
</kw>
<if>
<branch type="IF" condition="${rc} == 0">
<return>
<value>java</value>
<status status="NOT RUN" start="2026-08-23T02:12:44.411381" elapsed="0.000030"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:44.411302" elapsed="0.000168"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:44.411266" elapsed="0.000251"/>
</if>
<kw name="Execute Command" owner="SSHLibrary">
<var>${java}</var>
<arg>echo $JAVA_HOME/bin/java 2&gt;&amp;1</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:44.411823" elapsed="0.000073"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${out}</var>
<var>${rc}</var>
<arg>${java} -version 2&gt;&amp;1</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:44.412272" elapsed="0.000045"/>
</kw>
<if>
<branch type="IF" condition="${rc} == 0">
<return>
<value>${java}</value>
<status status="NOT RUN" start="2026-08-23T02:12:44.412546" elapsed="0.000029"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:44.412469" elapsed="0.000165"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:44.412433" elapsed="0.000232"/>
</if>
<kw name="Get Environment Variable" owner="OperatingSystem">
<var>${JAVA_HOME}</var>
<arg>JAVA_HOME</arg>
<arg>${EMPTY}</arg>
<doc>Returns the value of an environment variable with the given name.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:44.412886" elapsed="0.000031"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<var>${java}</var>
<arg>"""${JAVA_HOME}"""!=""</arg>
<arg>${JAVA_HOME}/bin/java</arg>
<arg>false</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:44.413146" elapsed="0.000030"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<var>${out}</var>
<var>${rc}</var>
<arg>${java} -version 2&gt;&amp;1</arg>
<arg>return_rc=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:44.413400" elapsed="0.000028"/>
</kw>
<if>
<branch type="IF" condition="${rc} == 0">
<return>
<value>${java}</value>
<status status="NOT RUN" start="2026-08-23T02:12:44.413579" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:44.413526" elapsed="0.000113"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:44.413503" elapsed="0.000167"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Unable to find Java; specify \${JDKVERSION}, put it to your PATH or set JAVA_HOME environment variable.</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:44.413887" elapsed="0.000031"/>
</kw>
<msg time="2026-08-23T02:12:44.414065" level="INFO">${base_command} = /usr/lib/jvm/java-21-openjdk-amd64/bin/java</msg>
<var>${base_command}</var>
<arg>openjdk=${openjdk}</arg>
<doc>Return string suitable for launching Java programs over SSHLibrary, depending on JRE version needed.
This requires that the SSH connection on which the command is going to be used is active as it is needed for querying files.
Commands composed for one SSH connection shall not be reused on other SSH connections as the two connections may have different Java setups.
Not directly related to Nexus, but versioned Java tools may need this.</doc>
<status status="PASS" start="2026-08-23T02:12:44.392756" elapsed="0.021346"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:44.414805" level="INFO">${full_command} = /usr/lib/jvm/java-21-openjdk-amd64/bin/java -Xmx1G -Djava.security.egd=file:/dev/./urandom -jar netconf-testtool-12.0.0-20260822.190854-265-executable.jar  --device-count 1 --debug true --schemas-dir ...</msg>
<var>${full_command}</var>
<arg>${base_command} ${options}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:44.414322" elapsed="0.000592"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:44.415507" level="INFO">/usr/lib/jvm/java-21-openjdk-amd64/bin/java -Xmx1G -Djava.security.egd=file:/dev/./urandom -jar netconf-testtool-12.0.0-20260822.190854-265-executable.jar  --device-count 1 --debug true --schemas-dir ./schemas --rpc-config /tmp/customaction.xml --md-sal true</msg>
<arg>${full_command}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:44.415145" elapsed="0.000429"/>
</kw>
<return>
<value>${full_command}</value>
<status status="PASS" start="2026-08-23T02:12:44.415636" elapsed="0.000040"/>
</return>
<msg time="2026-08-23T02:12:44.415878" level="INFO">${command} = /usr/lib/jvm/java-21-openjdk-amd64/bin/java -Xmx1G -Djava.security.egd=file:/dev/./urandom -jar netconf-testtool-12.0.0-20260822.190854-265-executable.jar  --device-count 1 --debug true --schemas-dir ...</msg>
<var>${command}</var>
<arg>${java_options} -jar ${filename} ${tool_options} --device-count ${device-count} --debug ${debug} ${schemas_option} ${rpc_config_option} --md-sal ${mdsal}</arg>
<doc>Return full Bash command to run Java with given options.
This requires that the SSH connection on which the command is going to be used is active as it is needed for querying files.
The options may include JVM options, application command line arguments, Bash redirects and other constructs.</doc>
<status status="PASS" start="2026-08-23T02:12:44.391657" elapsed="0.024262"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:44.416550" level="INFO">Running testtool: /usr/lib/jvm/java-21-openjdk-amd64/bin/java -Xmx1G -Djava.security.egd=file:/dev/./urandom -jar netconf-testtool-12.0.0-20260822.190854-265-executable.jar  --device-count 1 --debug true --schemas-dir ./schemas --rpc-config /tmp/customaction.xml --md-sal true</msg>
<arg>Running testtool: ${command}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:44.416176" elapsed="0.000442"/>
</kw>
<kw name="Get Log File Name" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:12:44.420597" level="INFO">${name} = netconf-gate-userfeatures-txt-CRUD-ACTION-CRUD-ACTION</msg>
<var>${name}</var>
<arg>"""${SUITE_NAME}""".replace(" ","-").replace("/","-").replace(".","-")</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-23T02:12:44.420066" elapsed="0.000571"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:12:44.422921" level="INFO">${suffix} = </msg>
<var>${suffix}</var>
<arg>'${testcase}' != ''</arg>
<arg>--${testcase}</arg>
<arg>${EMPTY}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T02:12:44.420804" elapsed="0.002144"/>
</kw>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-23T02:12:44.423280" level="INFO">${date} = 2026-08-23 02:12:44.423</msg>
<var>${date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-23T02:12:44.423112" elapsed="0.000194"/>
</kw>
<kw name="Convert Date" owner="DateTime">
<msg time="2026-08-23T02:12:44.423756" level="INFO">${timestamp} = 1787451164.423</msg>
<var>${timestamp}</var>
<arg>${date}</arg>
<arg>epoch</arg>
<doc>Converts between supported `date formats`.</doc>
<status status="PASS" start="2026-08-23T02:12:44.423451" elapsed="0.000331"/>
</kw>
<return>
<value>${testtool}--${name}${suffix}.${timestamp}.log</value>
<status status="PASS" start="2026-08-23T02:12:44.423829" elapsed="0.000046"/>
</return>
<msg time="2026-08-23T02:12:44.424094" level="INFO">${logfile} = testtool--netconf-gate-userfeatures-txt-CRUD-ACTION-CRUD-ACTION.1787451164.423.log</msg>
<var>${logfile}</var>
<arg>testtool</arg>
<doc>Get the name of the suite sanitized to be usable as a part of filename.
These names are used to constructs names of the log files produced
by the testing tools so two suites using a tool wont overwrite the
log files if they happen to run in one job.</doc>
<status status="PASS" start="2026-08-23T02:12:44.416973" elapsed="0.007147"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:44.428826" level="INFO">${testtool_log} = testtool--netconf-gate-userfeatures-txt-CRUD-ACTION-CRUD-ACTION.1787451164.423.log</msg>
<arg>${testtool_log}</arg>
<arg>${logfile}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-23T02:12:44.424284" elapsed="0.004604"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:12:44.450310" level="INFO">/usr/lib/jvm/java-21-openjdk-amd64/bin/java -Xmx1G -Djava.security.egd=file:/dev/./urandom -jar netconf-testtool-12.0.0-20260822.190854-265-executable.jar  --device-count 1 --debug true --schemas-dir ./schemas --rpc-config /tmp/customaction.xml --md-sal true &gt;testtool--netconf-gate-userfeatures-txt-CRUD-ACTION-CRUD-ACTION.1787451164.423.log 2&gt;&amp;1</msg>
<arg>${command} &gt;${logfile} 2&gt;&amp;1</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:12:44.429044" elapsed="0.021329"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:44.454553" level="INFO">${NetconfKeywords__testtool_device_count} = 1</msg>
<arg>${NetconfKeywords__testtool_device_count}</arg>
<arg>${device-count}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-23T02:12:44.450543" elapsed="0.004056"/>
</kw>
<kw name="Perform_Operation_On_Each_Device" owner="NetconfKeywords">
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-23T02:12:44.455367" level="INFO">${current_Date} = 2026-08-23 02:12:44.455</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-23T02:12:44.455213" elapsed="0.000179"/>
</kw>
<kw name="Add Time To Date" owner="DateTime">
<msg time="2026-08-23T02:12:44.455871" level="INFO">${deadline_Date} = 2026-08-23 02:57:44.455</msg>
<var>${deadline_Date}</var>
<arg>${current_Date}</arg>
<arg>${timeout}</arg>
<doc>Adds time to date and returns the resulting date.</doc>
<status status="PASS" start="2026-08-23T02:12:44.455539" elapsed="0.000359"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:44.460467" level="INFO">${current_port} = 17830</msg>
<arg>${current_port}</arg>
<arg>${BASE_NETCONF_DEVICE_PORT}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-23T02:12:44.456069" elapsed="0.004445"/>
</kw>
<kw name="Repeat Keyword" owner="BuiltIn">
<msg time="2026-08-23T02:12:44.461007" level="INFO">Repeating keyword, round 1/1.</msg>
<kw name="NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device" owner="NetconfKeywords">
<kw name="NetconfKeywords__Check_Netconf_Test_Timeout_Not_Expired" owner="NetconfKeywords">
<if>
<branch type="IF" condition="not ${ENABLE_NETCONF_TEST_TIMEOUT}">
<return>
<status status="NOT RUN" start="2026-08-23T02:12:44.462014" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:44.461904" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:44.461885" elapsed="0.000193"/>
</if>
<kw name="Get Current Date" owner="DateTime">
<msg time="2026-08-23T02:12:44.462371" level="INFO">${current_Date} = 2026-08-23 02:12:44.462</msg>
<var>${current_Date}</var>
<doc>Returns current local or UTC time with an optional increment.</doc>
<status status="PASS" start="2026-08-23T02:12:44.462219" elapsed="0.000178"/>
</kw>
<kw name="Subtract Date From Date" owner="DateTime">
<msg time="2026-08-23T02:12:44.462916" level="INFO">${ellapsed_seconds} = 2699.993</msg>
<var>${ellapsed_seconds}</var>
<arg>${deadline_Date}</arg>
<arg>${current_Date}</arg>
<doc>Subtracts date from another date and returns time between.</doc>
<status status="PASS" start="2026-08-23T02:12:44.462584" elapsed="0.000358"/>
</kw>
<if>
<branch type="IF" condition="${ellapsed_seconds}&lt;0">
<kw name="Fail" owner="BuiltIn">
<arg>The global time out period expired</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:44.463258" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:44.463014" elapsed="0.000298"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:44.462996" elapsed="0.000340"/>
</if>
<arg>${deadline_Date}</arg>
<status status="PASS" start="2026-08-23T02:12:44.461701" elapsed="0.001680"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:12:44.463902" level="INFO">${number} = 1</msg>
<var>${number}</var>
<arg>${current_port}-${BASE_NETCONF_DEVICE_PORT}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-23T02:12:44.463522" elapsed="0.000406"/>
</kw>
<kw name="Run Keyword" owner="BuiltIn">
<kw name="NetconfKeywords__Wait_Device_Is_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:12:44.465302" level="INFO">${number} = 1</msg>
<var>${number}</var>
<arg>'${device_name}'.split('-').pop()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-23T02:12:44.464964" elapsed="0.000365"/>
</kw>
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:12:44.466984" level="INFO">${device-port} = 17830</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-23T02:12:44.466353" elapsed="0.000727"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-23T02:12:44.470188" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-23T02:12:44.482203" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-23T02:12:44.482344" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-23T02:12:44.470090" elapsed="0.012292"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:44.482984" elapsed="0.000038"/>
</kw>
<msg time="2026-08-23T02:12:44.483073" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-23T02:12:44.482489" elapsed="0.000657">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-23T02:12:44.482461" elapsed="0.000745">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-23T02:12:44.469722" elapsed="0.013674">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:12:44.469328" elapsed="0.014203"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-23T02:12:44.484169" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17830 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-23T02:12:44.539712" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-23T02:12:44.539951" level="INFO">${output} = 0</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-23T02:12:44.483786" elapsed="0.056222"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-23T02:12:44.540181" elapsed="0.000071"/>
</return>
<msg time="2026-08-23T02:12:44.540944" level="INFO">${count} = 0</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-23T02:12:44.468779" elapsed="0.072265"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<msg time="2026-08-23T02:12:44.544672" level="FAIL">0 != 1</msg>
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="FAIL" start="2026-08-23T02:12:44.543196" elapsed="0.001703">0 != 1</status>
</kw>
<arg>${device-port}</arg>
<status status="FAIL" start="2026-08-23T02:12:44.467396" elapsed="0.077682">0 != 1</status>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="FAIL" start="2026-08-23T02:12:44.466014" elapsed="0.079320">0 != 1</status>
</kw>
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:12:45.548905" level="INFO">${device-port} = 17830</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-23T02:12:45.547230" elapsed="0.001921"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-23T02:12:45.556312" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-23T02:12:45.569262" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-23T02:12:45.569365" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-23T02:12:45.556073" elapsed="0.013318"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:45.570052" elapsed="0.000060"/>
</kw>
<msg time="2026-08-23T02:12:45.570193" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-23T02:12:45.569479" elapsed="0.000827">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-23T02:12:45.569452" elapsed="0.000949">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-23T02:12:45.555519" elapsed="0.015167">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:12:45.554441" elapsed="0.016512"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-23T02:12:45.571885" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17830 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-23T02:12:45.618085" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-23T02:12:45.618292" level="INFO">${output} = 0</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-23T02:12:45.571348" elapsed="0.046999"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-23T02:12:45.618508" elapsed="0.000077"/>
</return>
<msg time="2026-08-23T02:12:45.619252" level="INFO">${count} = 0</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-23T02:12:45.553106" elapsed="0.066246"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<msg time="2026-08-23T02:12:45.622942" level="FAIL">0 != 1</msg>
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="FAIL" start="2026-08-23T02:12:45.621479" elapsed="0.001717">0 != 1</status>
</kw>
<arg>${device-port}</arg>
<status status="FAIL" start="2026-08-23T02:12:45.549927" elapsed="0.073547">0 != 1</status>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="FAIL" start="2026-08-23T02:12:45.546175" elapsed="0.077928">0 != 1</status>
</kw>
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:12:46.630893" level="INFO">${device-port} = 17830</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-23T02:12:46.626148" elapsed="0.004897"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-23T02:12:46.635338" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-23T02:12:46.648236" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-23T02:12:46.648460" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-23T02:12:46.635185" elapsed="0.013334"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:46.649488" elapsed="0.000059"/>
</kw>
<msg time="2026-08-23T02:12:46.649627" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-23T02:12:46.648695" elapsed="0.001046">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-23T02:12:46.648644" elapsed="0.001224">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-23T02:12:46.634878" elapsed="0.015286">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:12:46.634279" elapsed="0.016129"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-23T02:12:46.651351" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17830 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-23T02:12:46.697963" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-23T02:12:46.698175" level="INFO">${output} = 0</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-23T02:12:46.650804" elapsed="0.047426"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-23T02:12:46.698393" elapsed="0.000081"/>
</return>
<msg time="2026-08-23T02:12:46.699143" level="INFO">${count} = 0</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-23T02:12:46.633496" elapsed="0.065747"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<msg time="2026-08-23T02:12:46.702879" level="FAIL">0 != 1</msg>
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="FAIL" start="2026-08-23T02:12:46.701374" elapsed="0.001772">0 != 1</status>
</kw>
<arg>${device-port}</arg>
<status status="FAIL" start="2026-08-23T02:12:46.631526" elapsed="0.071906">0 != 1</status>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="FAIL" start="2026-08-23T02:12:46.625016" elapsed="0.079067">0 != 1</status>
</kw>
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:12:47.707694" level="INFO">${device-port} = 17830</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-23T02:12:47.706099" elapsed="0.001859"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-23T02:12:47.715056" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-23T02:12:47.727556" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-23T02:12:47.727659" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-23T02:12:47.714931" elapsed="0.012754"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:47.728406" elapsed="0.000057"/>
</kw>
<msg time="2026-08-23T02:12:47.728544" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-23T02:12:47.727776" elapsed="0.000881">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-23T02:12:47.727748" elapsed="0.001009">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-23T02:12:47.714368" elapsed="0.014712">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:12:47.713362" elapsed="0.015994"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-23T02:12:47.730319" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17830 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-23T02:12:47.814214" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-23T02:12:47.814427" level="INFO">${output} = 0</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-23T02:12:47.729771" elapsed="0.084709"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-23T02:12:47.814641" elapsed="0.000079"/>
</return>
<msg time="2026-08-23T02:12:47.815394" level="INFO">${count} = 0</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-23T02:12:47.711958" elapsed="0.103535"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<msg time="2026-08-23T02:12:47.819129" level="FAIL">0 != 1</msg>
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="FAIL" start="2026-08-23T02:12:47.817610" elapsed="0.001782">0 != 1</status>
</kw>
<arg>${device-port}</arg>
<status status="FAIL" start="2026-08-23T02:12:47.708699" elapsed="0.110975">0 != 1</status>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="FAIL" start="2026-08-23T02:12:47.705007" elapsed="0.115310">0 != 1</status>
</kw>
<kw name="Check_Device_Up_And_Running" owner="NetconfKeywords">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:12:48.823598" level="INFO">${device-port} = 17830</msg>
<var>${device-port}</var>
<arg>${FIRST_TESTTOOL_PORT}+${device-number}-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-23T02:12:48.822023" elapsed="0.001799"/>
</kw>
<kw name="NetconfKeywords__Check_Device_Is_Up" owner="NetconfKeywords">
<kw name="Count_Port_Occurences" owner="SSHKeywords">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Check_And_Install_Netstat" owner="SSHKeywords">
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-23T02:12:48.830747" level="INFO">Executing command 'netstat --version'.</msg>
<msg time="2026-08-23T02:12:48.843677" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-23T02:12:48.843937" level="INFO">${netstat_installed} = net-tools 2.10-alpha
Fred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others
+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX
AF: (inet) +UNIX +INET...</msg>
<var>${netstat_installed}</var>
<arg>netstat --version</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-23T02:12:48.830504" elapsed="0.013497"/>
</kw>
<if>
<branch type="IF" condition="'${netstat_installed}' is not string and '${netstat_installed}' != '0'">
<kw name="Install_Netstat" owner="SSHKeywords">
<doc>Install netstat if it is not already installed.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:48.844974" elapsed="0.000061"/>
</kw>
<msg time="2026-08-23T02:12:48.845116" level="FAIL">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</msg>
<status status="FAIL" start="2026-08-23T02:12:48.844181" elapsed="0.001046">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</branch>
<status status="FAIL" start="2026-08-23T02:12:48.844129" elapsed="0.001195">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</if>
<doc>Check if netstat is installed and install it if not.</doc>
<status status="FAIL" start="2026-08-23T02:12:48.829947" elapsed="0.015663">Invalid IF condition: Evaluating expression "'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' is not string and 'net-tools 2.10-alpha\nFred Baumgarten, Alan Cox, Bernd Eckenfels, Phil Blundell, Tuan Hoang, Brian Micek and others\n+NEW_ADDRT +RTF_IRTT +RTF_REJECT +FW_MASQUERADE +I18N +SELINUX\nAF: (inet) +UNIX +INET +INET6 +IPX +AX25 +NETROM +X25 +ATALK +ECONET +ROSE -BLUETOOTH\nHW:  +ETHER +ARC +SLIP +PPP +TUNNEL -TR +AX25 +NETROM +X25 +FR +ROSE +ASH +SIT +FDDI +HIPPI +HDLC/LAPB +EUI64 ' != '0'" failed: SyntaxError: unterminated string literal (detected at line 1) (&lt;string&gt;, line 1)

Variables in the original expression "'${netstat_installed}' is not string and '${netstat_installed}' != '0'" were resolved before the expression was evaluated. Try using "$netstat_installed is not string and $netstat_installed != '0'" syntax to avoid that. See Evaluating Expressions appendix in Robot Framework User Guide for more details.</status>
</kw>
<arg>Check_And_Install_Netstat</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:12:48.829010" elapsed="0.016897"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-23T02:12:48.846903" level="INFO">Executing command 'netstat -punta 2&gt; /dev/null | grep -E ":17830 .+ LISTEN .+java" | wc -l'.</msg>
<msg time="2026-08-23T02:12:48.897605" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-23T02:12:48.897813" level="INFO">${output} = 1</msg>
<var>${output}</var>
<arg>${NETSTAT_COMMAND} 2&gt; /dev/null | grep -E ":${port} .+ ${state} .+${name}" | wc -l</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-23T02:12:48.846351" elapsed="0.051549"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-23T02:12:48.898063" elapsed="0.000080"/>
</return>
<msg time="2026-08-23T02:12:48.898793" level="INFO">${count} = 1</msg>
<var>${count}</var>
<arg>${last-port}</arg>
<arg>LISTEN</arg>
<arg>java</arg>
<doc>Run 'netstat' on the remote machine and count occurences of given port in the given state connected to process with the given name.</doc>
<status status="PASS" start="2026-08-23T02:12:48.827707" elapsed="0.071230"/>
</kw>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="PASS" start="2026-08-23T02:12:48.901039" elapsed="0.001214"/>
</kw>
<arg>${device-port}</arg>
<status status="PASS" start="2026-08-23T02:12:48.824594" elapsed="0.077857"/>
</kw>
<arg>${number}</arg>
<doc>Query netstat on remote machine whether testtool device with the specified number has its port open and fail if not.</doc>
<status status="PASS" start="2026-08-23T02:12:48.821097" elapsed="0.081606"/>
</kw>
<arg>${TESTTOOL_BOOT_TIMEOUT}</arg>
<arg>1s</arg>
<arg>Check_Device_Up_And_Running</arg>
<arg>${number}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="PASS" start="2026-08-23T02:12:44.465490" elapsed="4.437317"/>
</kw>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-23T02:12:44.464556" elapsed="4.438425"/>
</kw>
<arg>${operation}</arg>
<arg>${DEVICE_NAME_BASE}-${number}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the given keyword with the given arguments.</doc>
<status status="PASS" start="2026-08-23T02:12:44.464105" elapsed="4.438977"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:12:48.904367" level="INFO">${next} = 17831</msg>
<var>${next}</var>
<arg>${current_port}+1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-23T02:12:48.903432" elapsed="0.000994"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:48.905740" level="INFO">${current_port} = 17831</msg>
<arg>${current_port}</arg>
<arg>${next}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-23T02:12:48.904789" elapsed="0.001071"/>
</kw>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-23T02:12:44.461204" elapsed="4.444789"/>
</kw>
<arg>${count} times</arg>
<arg>NetconfKeywords__Perform_Operation_With_Checking_On_Next_Device</arg>
<arg>${operation}</arg>
<arg>${deadline_Date}</arg>
<arg>log_response=${log_response}</arg>
<doc>Executes the specified keyword multiple times.</doc>
<status status="PASS" start="2026-08-23T02:12:44.460675" elapsed="4.445433"/>
</kw>
<arg>NetconfKeywords__Wait_Device_Is_Up_And_Running</arg>
<arg>log_response=${log_response}</arg>
<status status="PASS" start="2026-08-23T02:12:44.454795" elapsed="4.451446"/>
</kw>
<arg>${filename}</arg>
<arg>${device-count}</arg>
<arg>${debug}</arg>
<arg>${schemas}</arg>
<arg>${rpc_config}</arg>
<arg>${tool_options}</arg>
<arg>${java_options}</arg>
<arg>${mdsal}</arg>
<arg>log_response=${log_response}</arg>
<doc>Arrange to collect tool's output into a log file.
Will use specific /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/schemas unless argument resolves to 'none',
which signifies that there are no additional schemas to be deployed.
If so the directory for the additional schemas is deleted on the
remote machine and the additional schemas argument is left out.</doc>
<status status="PASS" start="2026-08-23T02:12:43.891313" elapsed="5.015084"/>
</kw>
<arg>device-count=1</arg>
<arg>schemas=/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/schemas</arg>
<arg>rpc_config=${RPC_FILE}</arg>
<arg>mdsal=true</arg>
<doc>Install and run testtool.</doc>
<status status="PASS" start="2026-08-23T02:12:43.213071" elapsed="5.693493"/>
</kw>
<doc>Initialize SetupUtils. Setup everything needed for the test cases.</doc>
<status status="PASS" start="2026-08-23T02:12:41.282387" elapsed="7.624306"/>
</kw>
<test id="s1-s5-s1-t1" name="Check_Device_Is_Not_Configured_At_Beginning" line="44">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-08-23T02:12:48.911641" elapsed="0.000316"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:12:48.911277" elapsed="0.000756"/>
</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-08-23T02:12:48.913420" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:48.913261" elapsed="0.000226"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:48.913234" elapsed="0.000285"/>
</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-08-23T02:12:48.918986" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:48.918871" elapsed="0.000161"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:48.918851" elapsed="0.000203"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:12:48.920071" 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-08-23T02:12:48.919663" elapsed="0.000435"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:12:48.920552" 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-08-23T02:12:48.920257" elapsed="0.000320"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:12:48.920621" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:12:48.920775" 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-08-23T02:12:48.919287" elapsed="0.001516"/>
</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-08-23T02:12:48.926346" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:48.926218" elapsed="0.000185"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:48.926199" elapsed="0.000232"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:12:48.927647" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:48.927539" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:48.927520" elapsed="0.000196"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:12:48.928249" level="INFO">${karaf_connection_index} = 16</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-08-23T02:12:48.927881" elapsed="0.000394"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:12:48.928685" level="INFO">${current_connection_index} = 18</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-08-23T02:12:48.928433" elapsed="0.000278"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:12:48.961778" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:12:48.929273" elapsed="0.032693"/>
</kw>
<msg time="2026-08-23T02:12:48.962139" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:12:48.962186" 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 "n "e "t "c "o "n "f "...</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-08-23T02:12:48.928884" elapsed="0.033338"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:12:48.995438" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D "- "A "C "T "I "O "N ". "C "R "U "D "- "A "C "T "I "O "N ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "I "s "_ "N "o "t "_ "C "o "n "f "i "g "u "r "e "d "_ "A "t "_ "B "e "g "i "n "n "i "n "g "[78C[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-08-23T02:12:48.962811" elapsed="0.032809"/>
</kw>
<msg time="2026-08-23T02:12:48.995788" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:12:48.995852" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D "- "A "C "T "I "O "N ". "C "R "U "D "- "A "C "T "I "O "N ". "C "h "e "c "k ...</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-08-23T02:12:48.962417" elapsed="0.033475"/>
</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-08-23T02:12:48.996193" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:48.995970" elapsed="0.000300"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:48.995950" elapsed="0.000346"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:48.996812" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D "- "A "C "T "I "O "N ". "C "R "U "D "- "A "C "T "I "O "N ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "I "s "_ "N "o "t "_ "C "o "n "f "i "g "u "r "e "d "_ "A "t "_ "B "e "g "i "n "n "i "n "g "[78C[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-08-23T02:12:48.996441" elapsed="0.000470"/>
</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-08-23T02:12:48.997207" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:48.996978" elapsed="0.000306"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:48.996960" elapsed="0.000350"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:12:48.997343" 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-08-23T02:12:49.000456" elapsed="0.000147"/>
</kw>
<msg time="2026-08-23T02:12:49.000673" 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-08-23T02:12:48.999726" elapsed="0.001044"/>
</kw>
<kw name="Open 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-08-23T02:12:49.001709" elapsed="0.000037"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:49.002713" elapsed="0.000038"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:12:48.998242" elapsed="0.004589"/>
</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-08-23T02:12:48.997624" elapsed="0.005466"/>
</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-08-23T02:12:48.927236" elapsed="0.075953"/>
</kw>
<msg time="2026-08-23T02:12:49.003280" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:12:49.003325" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D "- "A "C "T "I "O "N ". "C "R "U "D "- "A "C "T "I "O "N ". "C "h "e "c "k ...</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-08-23T02:12:48.926584" elapsed="0.076811"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:12:49.003585" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:12:49.003477" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:49.003458" elapsed="0.000210"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:49.004081" 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-08-23T02:12:49.004410" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:12:49.004482" 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-08-23T02:12:48.925881" elapsed="0.078712"/>
</kw>
<msg time="2026-08-23T02:12:49.004687" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:12:49.004731" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D "- "A "C "T "I "O "N ". "C "R "U "D "- "A "C "T "I "O "N ". "C "h "e "c "k ...</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-08-23T02:12:48.921257" elapsed="0.083511"/>
</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-08-23T02:12:49.005172" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:49.004919" elapsed="0.000308"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:49.004825" elapsed="0.000425"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:12:48.921112" elapsed="0.084162"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:12:48.920920" elapsed="0.084386"/>
</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-08-23T02:12:48.918486" elapsed="0.086873"/>
</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-08-23T02:12:48.912831" elapsed="0.092582"/>
</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-08-23T02:12:48.912238" elapsed="0.093220"/>
</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-08-23T02:12:48.907794" elapsed="0.097715"/>
</kw>
<kw name="Check_Device_Has_No_Netconf_Connector" owner="NetconfKeywords">
<kw name="Count_Netconf_Connectors_For_Device" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:49.016830" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:49.014566" elapsed="0.002304"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:49.017194" elapsed="0.000021"/>
</kw>
<var name="${nv}"/>
<status status="NOT RUN" start="2026-08-23T02:12:49.017043" elapsed="0.000208"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="NOT RUN" start="2026-08-23T02:12:49.016924" elapsed="0.000353"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:49.017577" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:49.017338" elapsed="0.000295"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:49.018374" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:49.017900" elapsed="0.000522"/>
</kw>
<status status="PASS" start="2026-08-23T02:12:49.017657" elapsed="0.000806"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:49.018648" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:49.018488" elapsed="0.000215"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:49.017321" elapsed="0.001403"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:12:49.018761" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:12:49.018927" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:12:49.014093" elapsed="0.004860"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:12:49.018999" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:12:49.019141" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:12:49.013596" elapsed="0.005570"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:49.026497" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:49.026220" elapsed="0.000322"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:49.026956" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:49.026695" elapsed="0.000305"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:12:49.037065" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:49.037123" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '407'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:12:49.037241" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:12:49.029128" elapsed="0.008526">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:12:49.027066" elapsed="0.010679">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:49.038048" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:49.037786" elapsed="0.000355"/>
</branch>
<status status="FAIL" start="2026-08-23T02:12:49.027047" elapsed="0.011127">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:49.038728" elapsed="0.000036"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:49.038935" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:49.038883" elapsed="0.000110"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:49.038858" elapsed="0.000164"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:49.039220" elapsed="0.000029"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:12:49.039316" elapsed="0.000021"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:12:49.021857" elapsed="0.017607">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:49.039559" elapsed="0.000022"/>
</return>
<var>${mounts}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:12:49.019420" elapsed="0.020270">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${mounts}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:49.039941" elapsed="0.000029"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${actual_count}</var>
<arg>len('''${mounts}'''.split('"node-id": "${device_name}"'))-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:49.040171" elapsed="0.000028"/>
</kw>
<return>
<value>${actual_count}</value>
<status status="NOT RUN" start="2026-08-23T02:12:49.040259" elapsed="0.000020"/>
</return>
<var>${count}</var>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Count all instances of the specified device in the Netconf topology (usually 0 or 1).</doc>
<status status="FAIL" start="2026-08-23T02:12:49.006136" elapsed="0.034254">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${count}</arg>
<arg>0</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:49.040615" elapsed="0.000028"/>
</kw>
<arg>${DEVICE_NAME}</arg>
<doc>Check that there are no instances of the specified device in the Netconf topology.</doc>
<status status="FAIL" start="2026-08-23T02:12:49.005723" elapsed="0.035043">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<doc>Sanity check making sure our device is not there. Fail if found.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-08-23T02:12:48.906856" elapsed="0.134126">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</test>
<test id="s1-s5-s1-t2" name="Configure_Device_On_Netconf" line="49">
<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-08-23T02:12:49.045859" elapsed="0.000300"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:12:49.045475" elapsed="0.000762"/>
</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-08-23T02:12:49.047485" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:49.047372" elapsed="0.000160"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:49.047352" elapsed="0.000203"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:12:49.052798" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:49.052692" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:49.052674" elapsed="0.000208"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:12:49.053878" 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-08-23T02:12:49.053474" elapsed="0.000432"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:12:49.054358" 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-08-23T02:12:49.054065" elapsed="0.000320"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:12:49.054467" elapsed="0.000034"/>
</return>
<msg time="2026-08-23T02:12:49.054631" 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-08-23T02:12:49.053103" elapsed="0.001553"/>
</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-08-23T02:12:49.060115" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:49.060008" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:49.059988" elapsed="0.000197"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:12:49.061395" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:49.061289" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:49.061270" elapsed="0.000193"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:12:49.061980" level="INFO">${karaf_connection_index} = 16</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-08-23T02:12:49.061604" elapsed="0.000402"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:12:49.062429" level="INFO">${current_connection_index} = 18</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-08-23T02:12:49.062162" elapsed="0.000294"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:12:49.094619" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:12:49.063023" elapsed="0.031773"/>
</kw>
<msg time="2026-08-23T02:12:49.094989" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:12:49.095035" 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 "n "e "t "c "o "n "f "...</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-08-23T02:12:49.062612" elapsed="0.032460"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:12:49.115878" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D "- "A "C "T "I "O "N ". "C "R "U "D "- "A "C "T "I "O "N ". "C "o "n "f "i "g "u "r "e "_ "D "e "v "i "c "e "_ "O "n "_ "N "e "t "c "o "n "f "[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-08-23T02:12:49.095757" elapsed="0.020302"/>
</kw>
<msg time="2026-08-23T02:12:49.116227" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:12:49.116273" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D "- "A "C "T "I "O "N ". "C "R "U "D "- "A "C "T "I "O "N ". "C "o "n "f "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-08-23T02:12:49.095238" elapsed="0.021072"/>
</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-08-23T02:12:49.116610" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:49.116387" elapsed="0.000303"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:49.116367" elapsed="0.000348"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:49.117253" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D "- "A "C "T "I "O "N ". "C "R "U "D "- "A "C "T "I "O "N ". "C "o "n "f "i "g "u "r "e "_ "D "e "v "i "c "e "_ "O "n "_ "N "e "t "c "o "n "f "[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-08-23T02:12:49.116879" elapsed="0.000448"/>
</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-08-23T02:12:49.117645" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:49.117394" elapsed="0.000328"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:49.117376" elapsed="0.000371"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:12:49.117781" 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-08-23T02:12:49.120781" elapsed="0.000166"/>
</kw>
<msg time="2026-08-23T02:12:49.121018" 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-08-23T02:12:49.120176" elapsed="0.000948"/>
</kw>
<kw name="Open 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-08-23T02:12:49.122078" elapsed="0.000039"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:49.123060" elapsed="0.000037"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:12:49.118674" elapsed="0.004504"/>
</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-08-23T02:12:49.118065" elapsed="0.005235"/>
</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-08-23T02:12:49.060980" elapsed="0.062419"/>
</kw>
<msg time="2026-08-23T02:12:49.123492" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:12:49.123536" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D "- "A "C "T "I "O "N ". "C "R "U "D "- "A "C "T "I "O "N ". "C "o "n "f "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-08-23T02:12:49.060333" elapsed="0.063239"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:12:49.123754" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-08-23T02:12:49.123647" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:49.123629" elapsed="0.000405"/>
</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-08-23T02:12:49.124424" 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-08-23T02:12:49.124754" elapsed="0.000026"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:12:49.124827" elapsed="0.000030"/>
</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-08-23T02:12:49.059654" elapsed="0.065297"/>
</kw>
<msg time="2026-08-23T02:12:49.125044" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:12:49.125087" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D "- "A "C "T "I "O "N ". "C "R "U "D "- "A "C "T "I "O "N ". "C "o "n "f "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-08-23T02:12:49.055034" elapsed="0.070090"/>
</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-08-23T02:12:49.125444" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:49.125197" elapsed="0.000300"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:49.125180" elapsed="0.000340"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:12:49.054893" elapsed="0.070650"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:12:49.054708" elapsed="0.070864"/>
</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-08-23T02:12:49.052333" elapsed="0.073292"/>
</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-08-23T02:12:49.047081" elapsed="0.078600"/>
</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-08-23T02:12:49.046482" elapsed="0.079243"/>
</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-08-23T02:12:49.042217" elapsed="0.083560"/>
</kw>
<kw name="Configure_Device_In_Netconf" owner="NetconfKeywords">
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T02:12:49.145219" elapsed="0.000420"/>
</kw>
<msg time="2026-08-23T02:12:49.145691" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:12:49.144855" elapsed="0.000885"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return scandium if vanadium is at least ${lower_bound},
return calcium otherwise.</doc>
<status status="PASS" start="2026-08-23T02:12:49.144446" elapsed="0.001422"/>
</kw>
<msg time="2026-08-23T02:12:49.145913" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:12:49.135616" elapsed="0.010342"/>
</kw>
<msg time="2026-08-23T02:12:49.146060" level="INFO">${version} = scandium</msg>
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-08-23T02:12:49.135295" elapsed="0.010789"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:12:49.147018" level="INFO">${mapping} = {'DEVICE_IP': '10.30.170.120', 'DEVICE_NAME': 'netconf-test-device', 'DEVICE_PORT': '17830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'topsecret', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/t...</msg>
<var>${mapping}</var>
<arg>DEVICE_IP=${device_address}</arg>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>DEVICE_PORT=${device_port}</arg>
<arg>DEVICE_USER=${device_user}</arg>
<arg>DEVICE_PASSWORD=${device_password}</arg>
<arg>DEVICE_KEY=${device_key}</arg>
<arg>SCHEMA_DIRECTORY=${schema_directory}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-23T02:12:49.146249" elapsed="0.000798"/>
</kw>
<if>
<branch type="IF" condition="'${http_method}'=='post'">
<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-08-23T02:12:49.179355" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:49.178981" elapsed="0.000402"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T02:12:49.180145" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/rpc-create-device.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-23T02:12:49.179897" elapsed="0.000321">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/rpc-create-device.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-23T02:12:49.180314" 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-08-23T02:12:49.179545" elapsed="0.000793"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:12:49.180898" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device/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-08-23T02:12:49.180499" elapsed="0.000426"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:12:49.181221" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/rpc-create-device/location.uri"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/rpc-create-device/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:12:49.181380" level="INFO">${template} = $RESTCONF_ROOT/operations/netconf-node-topology:create-device
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:12:49.181084" elapsed="0.000321"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:49.181800" level="INFO">$RESTCONF_ROOT/operations/netconf-node-topology:create-device
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:49.181557" elapsed="0.000304"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:49.182829" level="INFO">mapping: {'DEVICE_IP': '10.30.170.120', 'DEVICE_NAME': 'netconf-test-device', 'DEVICE_PORT': '17830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'topsecret', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:49.182569" elapsed="0.000323"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:12:49.183307" 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-08-23T02:12:49.183047" elapsed="0.000286"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:12:49.184366" level="INFO">${value} = 10.30.170.120</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:12:49.183690" elapsed="0.000702"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:12:49.185551" level="INFO">${encoded} = 10.30.170.120</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-08-23T02:12:49.185047" elapsed="0.000545"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:12:49.185710" elapsed="0.000032"/>
</return>
<msg time="2026-08-23T02:12:49.185960" level="INFO">${encoded_value} = 10.30.170.120</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-08-23T02:12:49.184579" elapsed="0.001407"/>
</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-08-23T02:12:49.186140" elapsed="0.000528"/>
</kw>
<var name="${key}">DEVICE_IP</var>
<var name="${value}">10.30.170.120</var>
<status status="PASS" start="2026-08-23T02:12:49.183558" elapsed="0.003153"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:12:49.187482" level="INFO">${value} = netconf-test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:12:49.186976" elapsed="0.000568"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:12:49.188683" level="INFO">${encoded} = netconf-test-device</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-08-23T02:12:49.188203" elapsed="0.000520"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:12:49.188865" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T02:12:49.189097" level="INFO">${encoded_value} = netconf-test-device</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-08-23T02:12:49.187727" elapsed="0.001397"/>
</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-08-23T02:12:49.189272" elapsed="0.000481"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:12:49.186825" elapsed="0.002970"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:12:49.190670" level="INFO">${value} = 17830</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:12:49.190158" elapsed="0.000538"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:12:49.191808" level="INFO">${encoded} = 17830</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-08-23T02:12:49.191331" elapsed="0.000558"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:12:49.192004" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T02:12:49.192233" level="INFO">${encoded_value} = 17830</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-08-23T02:12:49.190893" elapsed="0.001366"/>
</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-08-23T02:12:49.192407" elapsed="0.000487"/>
</kw>
<var name="${key}">DEVICE_PORT</var>
<var name="${value}">17830</var>
<status status="PASS" start="2026-08-23T02:12:49.190027" elapsed="0.002909"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:12:49.193683" level="INFO">${value} = admin</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:12:49.193179" elapsed="0.000530"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:12:49.194946" level="INFO">${encoded} = admin</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-08-23T02:12:49.194391" elapsed="0.000596"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:12:49.195101" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T02:12:49.195326" level="INFO">${encoded_value} = admin</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-08-23T02:12:49.193955" elapsed="0.001397"/>
</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-08-23T02:12:49.195503" elapsed="0.000501"/>
</kw>
<var name="${key}">DEVICE_USER</var>
<var name="${value}">admin</var>
<status status="PASS" start="2026-08-23T02:12:49.193050" elapsed="0.002998"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:12:49.196792" level="INFO">${value} = topsecret</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:12:49.196292" elapsed="0.000526"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:12:49.197975" level="INFO">${encoded} = topsecret</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-08-23T02:12:49.197461" elapsed="0.000555"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:12:49.198128" elapsed="0.000033"/>
</return>
<msg time="2026-08-23T02:12:49.198355" level="INFO">${encoded_value} = topsecret</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-08-23T02:12:49.197024" elapsed="0.001357"/>
</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-08-23T02:12:49.198556" elapsed="0.000504"/>
</kw>
<var name="${key}">DEVICE_PASSWORD</var>
<var name="${value}">topsecret</var>
<status status="PASS" start="2026-08-23T02:12:49.196162" elapsed="0.002941"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:12:49.199913" level="INFO">${value} = device-key</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:12:49.199345" elapsed="0.000597"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:12:49.201269" level="INFO">${encoded} = device-key</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-08-23T02:12:49.200749" elapsed="0.000560"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:12:49.201421" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T02:12:49.201648" level="INFO">${encoded_value} = device-key</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-08-23T02:12:49.200122" elapsed="0.001552"/>
</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-08-23T02:12:49.201830" elapsed="0.000545"/>
</kw>
<var name="${key}">DEVICE_KEY</var>
<var name="${value}">device-key</var>
<status status="PASS" start="2026-08-23T02:12:49.199215" elapsed="0.003202"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:12:49.203204" level="INFO">${value} = /tmp/schema</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:12:49.202688" elapsed="0.000601"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:12:49.204448" level="INFO">${encoded} = /tmp/schema</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-08-23T02:12:49.203969" elapsed="0.000519"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:12:49.204601" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T02:12:49.204845" level="INFO">${encoded_value} = /tmp/schema</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-08-23T02:12:49.203475" elapsed="0.001398"/>
</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-08-23T02:12:49.205023" elapsed="0.000469"/>
</kw>
<var name="${key}">SCHEMA_DIRECTORY</var>
<var name="${value}">/tmp/schema</var>
<status status="PASS" start="2026-08-23T02:12:49.202559" elapsed="0.002975"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:12:49.206376" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:12:49.205774" elapsed="0.000632"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:12:49.207687" level="INFO">${encoded} = /rests</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-08-23T02:12:49.207124" elapsed="0.000604"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:12:49.207918" elapsed="0.000034"/>
</return>
<msg time="2026-08-23T02:12:49.208153" level="INFO">${encoded_value} = /rests</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-08-23T02:12:49.206629" elapsed="0.001549"/>
</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-08-23T02:12:49.208328" elapsed="0.000474"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-23T02:12:49.205646" elapsed="0.003214"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-23T02:12:49.183383" elapsed="0.025514"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-23T02:12:49.208940" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:12:49.209104" level="INFO">${mapping_to_use} = {'DEVICE_IP': '10.30.170.120', 'DEVICE_NAME': 'netconf-test-device', 'DEVICE_PORT': '17830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'topsecret', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/t...</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-23T02:12:49.182222" elapsed="0.026908"/>
</kw>
<status status="PASS" start="2026-08-23T02:12:49.181928" elapsed="0.027235"/>
</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-08-23T02:12:49.209334" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:49.209188" elapsed="0.000202"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:49.181909" elapsed="0.027502"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:12:49.210330" level="INFO">${final_text} = /rests/operations/netconf-node-topology:create-device</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-08-23T02:12:49.209552" elapsed="0.000806"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T02:12:49.210406" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device/${file_name}.</doc>
<status status="PASS" start="2026-08-23T02:12:49.178326" elapsed="0.032236"/>
</kw>
<msg time="2026-08-23T02:12:49.210616" 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-08-23T02:12:49.165612" elapsed="0.045054"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:49.223216" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:49.235560" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:49.248022" 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-08-23T02:12:49.248214" 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-08-23T02:12:49.248382" 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-08-23T02:12:49.248746" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:49.248603" elapsed="0.000198"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:49.248587" 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-08-23T02:12:49.248977" 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-08-23T02:12:49.249141" 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-08-23T02:12:49.249303" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T02:12:49.248560" elapsed="0.000796"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T02:12:49.248459" 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-08-23T02:12:49.249523" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:49.249599" elapsed="0.000015"/>
</return>
<msg time="2026-08-23T02:12:49.249708" level="INFO">${uri} = /rests/operations/netconf-node-topology:create-device</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-08-23T02:12:49.161364" elapsed="0.088370"/>
</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-08-23T02:12:49.274921" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device.vanadium/post_data.xml</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:49.274532" elapsed="0.000417"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T02:12:49.275645" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/rpc-create-device.vanadium/post_data.xml' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-23T02:12:49.275434" elapsed="0.000276">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/rpc-create-device.vanadium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-08-23T02:12:49.275802" 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-08-23T02:12:49.275106" elapsed="0.000720"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:12:49.276382" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device/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-08-23T02:12:49.276002" elapsed="0.000407"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:12:49.276698" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/rpc-create-device/post_data.xml"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/rpc-create-device/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:12:49.276827" level="INFO">${template} = &lt;input xmlns="urn:opendaylight:netconf-node-topology"&gt;
   &lt;node-id&gt;$DEVICE_NAME&lt;/node-id&gt;
   &lt;host&gt;$DEVICE_IP&lt;/host&gt;
   &lt;port&gt;$DEVICE_PORT&lt;/port&gt;
   &lt;login-password&gt;
     &lt;username&gt;$DEVICE_USER&lt;/usern...</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:12:49.276565" elapsed="0.000306"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:49.277266" level="INFO">&lt;input xmlns="urn:opendaylight:netconf-node-topology"&gt;
   &lt;node-id&gt;$DEVICE_NAME&lt;/node-id&gt;
   &lt;host&gt;$DEVICE_IP&lt;/host&gt;
   &lt;port&gt;$DEVICE_PORT&lt;/port&gt;
   &lt;login-password&gt;
     &lt;username&gt;$DEVICE_USER&lt;/username&gt;
     &lt;password&gt;$DEVICE_PASSWORD&lt;/password&gt;
   &lt;/login-password&gt;
   &lt;tcp-only&gt;false&lt;/tcp-only&gt;
   &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
 &lt;/input&gt;
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:49.277025" 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-08-23T02:12:49.277704" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:49.277418" elapsed="0.000346"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:49.278248" level="INFO">${mapping_to_use} = {'DEVICE_IP': '10.30.170.120', 'DEVICE_NAME': 'netconf-test-device', 'DEVICE_PORT': '17830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'topsecret', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/t...</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-08-23T02:12:49.277950" elapsed="0.000326"/>
</kw>
<status status="PASS" start="2026-08-23T02:12:49.277792" elapsed="0.000518"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:49.277399" elapsed="0.000933"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:12:49.279191" level="INFO">${final_text} = &lt;input xmlns="urn:opendaylight:netconf-node-topology"&gt;
   &lt;node-id&gt;netconf-test-device&lt;/node-id&gt;
   &lt;host&gt;10.30.170.120&lt;/host&gt;
   &lt;port&gt;17830&lt;/port&gt;
   &lt;login-password&gt;
     &lt;username&gt;admin&lt;/username&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-08-23T02:12:49.278475" elapsed="0.000746"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T02:12:49.279271" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device/${file_name}.</doc>
<status status="PASS" start="2026-08-23T02:12:49.273912" elapsed="0.005485"/>
</kw>
<msg time="2026-08-23T02:12:49.279450" 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-08-23T02:12:49.260918" elapsed="0.018581"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:49.291884" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:49.304362" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:49.316965" 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-08-23T02:12:49.317161" 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-08-23T02:12:49.317331" 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-08-23T02:12:49.317691" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:49.317550" elapsed="0.000196"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:49.317535" 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-08-23T02:12:49.317921" 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-08-23T02:12:49.318087" 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-08-23T02:12:49.318249" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T02:12:49.317507" elapsed="0.000794"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T02:12:49.317406" 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-08-23T02:12:49.318505" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:49.318607" elapsed="0.000017"/>
</return>
<msg time="2026-08-23T02:12:49.318731" level="INFO">${data} = &lt;input xmlns="urn:opendaylight:netconf-node-topology"&gt;
   &lt;node-id&gt;netconf-test-device&lt;/node-id&gt;
   &lt;host&gt;10.30.170.120&lt;/host&gt;
   &lt;port&gt;17830&lt;/port&gt;
   &lt;login-password&gt;
     &lt;username&gt;admin&lt;/username&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-08-23T02:12:49.260049" elapsed="0.058712"/>
</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-08-23T02:12:49.320026" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/rpc-create-device/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-08-23T02:12:49.319775" elapsed="0.000316">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/rpc-create-device/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-23T02:12:49.320182" 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-08-23T02:12:49.319437" 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-08-23T02:12:49.320520" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:49.320275" elapsed="0.000301"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:49.321073" 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-08-23T02:12:49.320762" elapsed="0.000338"/>
</kw>
<status status="PASS" start="2026-08-23T02:12:49.320601" elapsed="0.000534"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:49.320257" elapsed="0.000899"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:12:49.323491" 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-08-23T02:12:49.321305" elapsed="0.002212"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-23T02:12:49.323569" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:12:49.323723" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-create-device/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-23T02:12:49.319113" elapsed="0.004635"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:49.325321" level="INFO">/rests/operations/netconf-node-topology:create-device</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:49.325039" elapsed="0.000327"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:49.325753" level="INFO">&lt;input xmlns="urn:opendaylight:netconf-node-topology"&gt;
   &lt;node-id&gt;netconf-test-device&lt;/node-id&gt;
   &lt;host&gt;10.30.170.120&lt;/host&gt;
   &lt;port&gt;17830&lt;/port&gt;
   &lt;login-password&gt;
     &lt;username&gt;admin&lt;/username&gt;
     &lt;password&gt;topsecret&lt;/password&gt;
   &lt;/login-password&gt;
   &lt;tcp-only&gt;false&lt;/tcp-only&gt;
   &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
 &lt;/input&gt;</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:49.325516" elapsed="0.000287"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:49.326209" 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-08-23T02:12:49.325968" elapsed="0.000284"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:49.326657" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:49.326398" elapsed="0.000302"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-08-23T02:12:49.327509" 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-08-23T02:12:49.327315" elapsed="0.000220"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-08-23T02:12:49.327874" 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-08-23T02:12:49.327684" 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-08-23T02:12:49.328046" elapsed="0.000198"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:49.328641" 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-08-23T02:12:49.328397" elapsed="0.000287"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-08-23T02:12:49.328726" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:12:49.328896" 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-08-23T02:12:49.326915" elapsed="0.002041"/>
</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">
<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="NOT RUN" start="2026-08-23T02:12:49.332460" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:49.329029" elapsed="0.003499"/>
</branch>
<branch type="ELSE">
<kw name="POST On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:12:49.336745" level="INFO">POST Request : url=http://10.30.170.114:8181/rests/operations/netconf-node-topology:create-device 
 path_url=/rests/operations/netconf-node-topology:create-device 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Content-Length': '337', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="urn:opendaylight:netconf-node-topology"&gt;
   &lt;node-id&gt;netconf-test-device&lt;/node-id&gt;
   &lt;host&gt;10.30.170.120&lt;/host&gt;
   &lt;port&gt;17830&lt;/port&gt;
   &lt;login-password&gt;
     &lt;username&gt;admin&lt;/username&gt;
     &lt;password&gt;topsecret&lt;/password&gt;
   &lt;/login-password&gt;
   &lt;tcp-only&gt;false&lt;/tcp-only&gt;
   &lt;keepalive-delay&gt;0&lt;/keepalive-delay&gt;
 &lt;/input&gt; 
 </msg>
<msg time="2026-08-23T02:12:49.336804" level="INFO">POST Response : url=http://10.30.170.114:8181/rests/operations/netconf-node-topology:create-device 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:49.336928" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-node-topology:create-device</msg>
<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="FAIL" start="2026-08-23T02:12:49.332693" elapsed="0.004605">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-node-topology:create-device</status>
</kw>
<status status="FAIL" start="2026-08-23T02:12:49.332554" elapsed="0.004833">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-node-topology:create-device</status>
</branch>
<status status="FAIL" start="2026-08-23T02:12:49.329010" elapsed="0.008408">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-node-topology:create-device</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:49.337790" elapsed="0.000028"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:49.337949" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:49.337911" elapsed="0.000079"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:49.337894" elapsed="0.000117"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:49.338154" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:12:49.338220" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>content_type=${content_type}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>POST data to given URI, check status code and return response text.
${content_type} and ${accept} are mandatory Python objects with headers to use.
If ${normalize_json}, normalize text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:12:49.324095" elapsed="0.014231">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-node-topology:create-device</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:49.338403" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>extension=xml</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>content_type=${HEADERS_XML}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>endline=${\n}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve URI and data from folder, call Post_To_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-23T02:12:49.150149" elapsed="0.188347">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-node-topology:create-device</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=response</arg>
<arg>mapping=${mapping}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:49.338809" elapsed="0.000039"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:49.338629" elapsed="0.000265"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:49.338607" elapsed="0.000310"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:49.338950" elapsed="0.000015"/>
</return>
<arg>folder=${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Add arguments sensible for XML data, return Post_Templated response text.
Optionally, verification against response.xml (no iteration) is called.</doc>
<status status="FAIL" start="2026-08-23T02:12:49.147451" elapsed="0.191593">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-node-topology:create-device</status>
</kw>
<status status="FAIL" start="2026-08-23T02:12:49.147137" elapsed="0.191971">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-node-topology:create-device</status>
</branch>
<branch type="ELSE">
<kw name="Put_As_Xml_Templated" owner="TemplatedRequests">
<arg>folder=${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Add arguments sensible for XML data, return Put_Templated response text.
Optionally, verification against response.xml (no iteration) is called.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:49.339376" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:49.339136" elapsed="0.000341"/>
</branch>
<status status="FAIL" start="2026-08-23T02:12:49.147117" elapsed="0.192385">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-node-topology:create-device</status>
</if>
<kw name="Set To Dictionary" owner="Collections">
<arg>${NetconfKeywords__mounted_device_types}</arg>
<arg>${device_name}</arg>
<arg>${device_type}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:49.339652" elapsed="0.000021"/>
</kw>
<arg>${DEVICE_NAME}</arg>
<arg>device_type=${DEVICE_TYPE_RPC_CREATE}</arg>
<arg>http_timeout=2</arg>
<arg>http_method=post</arg>
<doc>Tell Netconf about the specified device so it can add it into its configuration.</doc>
<status status="FAIL" start="2026-08-23T02:12:49.126087" elapsed="0.213682">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-node-topology:create-device</status>
</kw>
<doc>Make request to configure a testtool device on Netconf connector.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-08-23T02:12:49.041399" elapsed="0.298543">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-node-topology:create-device</status>
</test>
<test id="s1-s5-s1-t3" name="Check_ODL_Has_Netconf_Connector_For_Device" line="58">
<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-08-23T02:12:49.343246" elapsed="0.000210"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:12:49.342986" elapsed="0.000525"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:12:49.344803" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:49.344651" elapsed="0.000238"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:49.344626" elapsed="0.000295"/>
</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-08-23T02:12:49.351914" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:49.351707" elapsed="0.000267"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:49.351681" elapsed="0.000317"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:12:49.352985" 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-08-23T02:12:49.352586" elapsed="0.000426"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:12:49.353461" 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-08-23T02:12:49.353167" elapsed="0.000320"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:12:49.353532" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:12:49.353686" 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-08-23T02:12:49.352216" elapsed="0.001495"/>
</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-08-23T02:12:49.359366" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:49.359260" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:49.359241" 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-08-23T02:12:49.360627" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:49.360521" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:49.360502" elapsed="0.000193"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:12:49.361213" level="INFO">${karaf_connection_index} = 16</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-08-23T02:12:49.360855" elapsed="0.000384"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:12:49.361642" level="INFO">${current_connection_index} = 18</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-08-23T02:12:49.361394" elapsed="0.000274"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:12:49.394638" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:12:49.362226" elapsed="0.032591"/>
</kw>
<msg time="2026-08-23T02:12:49.395009" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:12:49.395056" 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 "n "e "t "c "o "n "f "...</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-08-23T02:12:49.361825" elapsed="0.033267"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:12:49.421568" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D "- "A "C "T "I "O "N ". "C "R "U "D "- "A "C "T "I "O "N ". "C "h "e "c "k "_ "O "D "L "_ "H "a "s "_ "N "e "t "c "o "n "f "_ "C "o "n "n "e "c "t "o "r "_ "F "o "r "_ "D "e "v "i "c "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-08-23T02:12:49.395648" elapsed="0.026145"/>
</kw>
<msg time="2026-08-23T02:12:49.421989" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:12:49.422035" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D "- "A "C "T "I "O "N ". "C "R "U "D "- "A "C "T "I "O "N ". "C "h "e "c "k ...</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-08-23T02:12:49.395260" elapsed="0.026813"/>
</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-08-23T02:12:49.422371" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:49.422150" elapsed="0.000296"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:49.422131" elapsed="0.000341"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:49.423019" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D "- "A "C "T "I "O "N ". "C "R "U "D "- "A "C "T "I "O "N ". "C "h "e "c "k "_ "O "D "L "_ "H "a "s "_ "N "e "t "c "o "n "f "_ "C "o "n "n "e "c "t "o "r "_ "F "o "r "_ "D "e "v "i "c "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-08-23T02:12:49.422623" elapsed="0.000475"/>
</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-08-23T02:12:49.423376" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:49.423164" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:49.423146" elapsed="0.000330"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:12:49.423509" 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-08-23T02:12:49.426513" elapsed="0.000161"/>
</kw>
<msg time="2026-08-23T02:12:49.426746" 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-08-23T02:12:49.425858" elapsed="0.001007"/>
</kw>
<kw name="Open 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-08-23T02:12:49.427774" elapsed="0.000036"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:49.428724" elapsed="0.000037"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:12:49.424371" elapsed="0.004487"/>
</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-08-23T02:12:49.423764" elapsed="0.005214"/>
</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-08-23T02:12:49.360221" elapsed="0.068855"/>
</kw>
<msg time="2026-08-23T02:12:49.429168" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:12:49.429212" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D "- "A "C "T "I "O "N ". "C "R "U "D "- "A "C "T "I "O "N ". "C "h "e "c "k ...</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-08-23T02:12:49.359585" elapsed="0.069664"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:12:49.429430" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-08-23T02:12:49.429324" elapsed="0.000164"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:49.429305" 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-08-23T02:12:49.430130" 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-08-23T02:12:49.430460" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:12:49.430532" 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-08-23T02:12:49.358923" elapsed="0.071741"/>
</kw>
<msg time="2026-08-23T02:12:49.430757" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:12:49.430800" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D "- "A "C "T "I "O "N ". "C "R "U "D "- "A "C "T "I "O "N ". "C "h "e "c "k ...</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-08-23T02:12:49.354086" elapsed="0.076771"/>
</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-08-23T02:12:49.431183" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:49.430934" elapsed="0.000302"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:49.430916" elapsed="0.000344"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:12:49.353948" elapsed="0.077336"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:12:49.353763" elapsed="0.077549"/>
</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-08-23T02:12:49.351210" elapsed="0.080154"/>
</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-08-23T02:12:49.344258" elapsed="0.087196"/>
</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-08-23T02:12:49.343659" elapsed="0.087839"/>
</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-08-23T02:12:49.340816" elapsed="0.090733"/>
</kw>
<kw name="Count_Netconf_Connectors_For_Device" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:49.442382" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:49.440306" elapsed="0.002103"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:49.442733" elapsed="0.000022"/>
</kw>
<var name="${nv}"/>
<status status="NOT RUN" start="2026-08-23T02:12:49.442574" elapsed="0.000216"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="NOT RUN" start="2026-08-23T02:12:49.442461" elapsed="0.000355"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:49.443131" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:49.442898" elapsed="0.000289"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:49.443922" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:49.443435" elapsed="0.000514"/>
</kw>
<status status="PASS" start="2026-08-23T02:12:49.443211" elapsed="0.000774"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:49.444167" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:49.444009" elapsed="0.000214"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:49.442881" elapsed="0.001363"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:12:49.444278" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:12:49.444425" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:12:49.439861" elapsed="0.004589"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:12:49.444496" elapsed="0.000025"/>
</return>
<msg time="2026-08-23T02:12:49.444637" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:12:49.439372" elapsed="0.005289"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:49.451962" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:49.451698" elapsed="0.000311"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:49.452404" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:49.452159" elapsed="0.000288"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:12:49.458139" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:49.458192" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '407'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:12:49.458293" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:12:49.454569" elapsed="0.004078">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:12:49.452513" elapsed="0.006212">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:49.458927" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:49.458757" elapsed="0.000235"/>
</branch>
<status status="FAIL" start="2026-08-23T02:12:49.452495" elapsed="0.006521">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:49.459416" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:49.459547" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:49.459510" elapsed="0.000078"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:49.459494" elapsed="0.000116"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:49.459750" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:12:49.459823" elapsed="0.000031"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:12:49.447318" elapsed="0.012626">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:49.460012" elapsed="0.000016"/>
</return>
<var>${mounts}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:12:49.444896" elapsed="0.015209">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${mounts}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:49.460269" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${actual_count}</var>
<arg>len('''${mounts}'''.split('"node-id": "${device_name}"'))-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:49.460431" elapsed="0.000020"/>
</kw>
<return>
<value>${actual_count}</value>
<status status="NOT RUN" start="2026-08-23T02:12:49.460493" elapsed="0.000015"/>
</return>
<var>${count}</var>
<arg>${DEVICE_NAME}</arg>
<doc>Count all instances of the specified device in the Netconf topology (usually 0 or 1).</doc>
<status status="FAIL" start="2026-08-23T02:12:49.431775" elapsed="0.028812">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:49.460742" elapsed="0.000020"/>
</kw>
<doc>Get the list of configured devices and search for our device there. Fail if not found.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-08-23T02:12:49.340230" elapsed="0.120682">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</test>
<test id="s1-s5-s1-t4" name="Wait_For_Device_To_Become_Connected" line="64">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-08-23T02:12:49.464344" elapsed="0.000213"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:12:49.464084" elapsed="0.000527"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:12:49.465593" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:49.465482" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:49.465463" 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-08-23T02:12:49.470936" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:49.470810" elapsed="0.000172"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:49.470792" elapsed="0.000212"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:12:49.472000" 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-08-23T02:12:49.471598" elapsed="0.000429"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:12:49.472479" 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-08-23T02:12:49.472184" elapsed="0.000321"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:12:49.472549" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:12:49.472701" 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-08-23T02:12:49.471222" elapsed="0.001503"/>
</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-08-23T02:12:49.478190" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:49.478082" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:49.478062" 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-08-23T02:12:49.479480" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:49.479374" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:49.479356" elapsed="0.000191"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:12:49.480060" level="INFO">${karaf_connection_index} = 16</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-08-23T02:12:49.479687" elapsed="0.000433"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:12:49.480523" level="INFO">${current_connection_index} = 18</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-08-23T02:12:49.480278" elapsed="0.000271"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:12:49.512328" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:12:49.481116" elapsed="0.031374"/>
</kw>
<msg time="2026-08-23T02:12:49.512661" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:12:49.512707" 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 "n "e "t "c "o "n "f "...</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-08-23T02:12:49.480705" elapsed="0.032039"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:12:49.536541" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D "- "A "C "T "I "O "N ". "C "R "U "D "- "A "C "T "I "O "N ". "W "a "i "t "_ "F "o "r "_ "D "e "v "i "c "e "_ "T "o "_ "B "e "c "o "m "e "_ "C "o "n "n "e "c "t "e "d "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-08-23T02:12:49.513464" elapsed="0.023263"/>
</kw>
<msg time="2026-08-23T02:12:49.536920" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:12:49.536967" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D "- "A "C "T "I "O "N ". "C "R "U "D "- "A "C "T "I "O "N ". "W "a "i "t "_ ...</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-08-23T02:12:49.512939" elapsed="0.024066"/>
</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-08-23T02:12:49.537305" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:49.537084" elapsed="0.000297"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:49.537064" elapsed="0.000342"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:49.537952" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D "- "A "C "T "I "O "N ". "C "R "U "D "- "A "C "T "I "O "N ". "W "a "i "t "_ "F "o "r "_ "D "e "v "i "c "e "_ "T "o "_ "B "e "c "o "m "e "_ "C "o "n "n "e "c "t "e "d "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:49.537550" elapsed="0.000481"/>
</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-08-23T02:12:49.538315" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:49.538098" elapsed="0.000293"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:49.538080" elapsed="0.000337"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:12:49.538450" 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-08-23T02:12:49.541539" elapsed="0.000150"/>
</kw>
<msg time="2026-08-23T02:12:49.541761" 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-08-23T02:12:49.540870" elapsed="0.001017"/>
</kw>
<kw name="Open 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-08-23T02:12:49.542857" elapsed="0.000043"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:49.543817" elapsed="0.000210"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:12:49.539353" elapsed="0.004758"/>
</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-08-23T02:12:49.538731" elapsed="0.005493"/>
</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-08-23T02:12:49.479072" elapsed="0.065252"/>
</kw>
<msg time="2026-08-23T02:12:49.544429" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:12:49.544474" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D "- "A "C "T "I "O "N ". "C "R "U "D "- "A "C "T "I "O "N ". "W "a "i "t "_ ...</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-08-23T02:12:49.478406" elapsed="0.066106"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:12:49.544695" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:12:49.544588" elapsed="0.000166"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:49.544569" elapsed="0.000210"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:49.545184" 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-08-23T02:12:49.545527" elapsed="0.000063"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:12:49.545642" 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-08-23T02:12:49.477692" elapsed="0.068062"/>
</kw>
<msg time="2026-08-23T02:12:49.545934" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:12:49.545983" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D "- "A "C "T "I "O "N ". "C "R "U "D "- "A "C "T "I "O "N ". "W "a "i "t "_ ...</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-08-23T02:12:49.473101" elapsed="0.072920"/>
</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-08-23T02:12:49.546347" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:49.546097" elapsed="0.000305"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:49.546080" elapsed="0.000346"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:12:49.472962" elapsed="0.073487"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:12:49.472778" elapsed="0.073700"/>
</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-08-23T02:12:49.470419" elapsed="0.076112"/>
</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-08-23T02:12:49.465196" elapsed="0.081402"/>
</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-08-23T02:12:49.464758" elapsed="0.081887"/>
</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-08-23T02:12:49.461643" elapsed="0.085082"/>
</kw>
<kw name="Wait_Device_Connected" owner="NetconfKeywords">
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:49.558810" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:49.556498" elapsed="0.002353"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:49.559535" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:49.559190" elapsed="0.000372"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:12:49.559038" elapsed="0.000561"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:49.560167" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:49.559828" elapsed="0.000365"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:12:49.559679" elapsed="0.000550"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:12:49.558907" elapsed="0.001352"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:49.560562" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:49.560322" elapsed="0.000298"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:49.561354" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:49.560887" elapsed="0.000494"/>
</kw>
<status status="PASS" start="2026-08-23T02:12:49.560644" elapsed="0.000773"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:49.561603" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:49.561442" elapsed="0.000225"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:49.560304" elapsed="0.001384"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:12:49.561724" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:12:49.561892" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:12:49.556036" elapsed="0.005883"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:12:49.561966" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:12:49.562110" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:12:49.555470" elapsed="0.006665"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:49.569606" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:49.569357" elapsed="0.000343"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:49.570119" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:49.569869" elapsed="0.000295"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:12:49.576280" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:49.576335" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:12:49.576438" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:12:49.572333" elapsed="0.004450">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:12:49.570231" elapsed="0.006661">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:49.577079" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:49.576927" elapsed="0.000217"/>
</branch>
<status status="FAIL" start="2026-08-23T02:12:49.570212" elapsed="0.006955">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:49.577528" elapsed="0.000030"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:49.577676" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:49.577638" elapsed="0.000080"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:49.577620" elapsed="0.000119"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:49.577899" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:12:49.577971" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:12:49.564824" elapsed="0.013253">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:49.578147" elapsed="0.000015"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:12:49.562354" elapsed="0.015886">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:49.578406" elapsed="0.000021"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:12:49.547971" elapsed="0.030542">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:50.596466" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:50.593630" elapsed="0.002869"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:50.597210" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:50.596882" elapsed="0.000355"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:12:50.596714" elapsed="0.000560"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:50.597945" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:50.597572" elapsed="0.000401"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:12:50.597422" elapsed="0.000586"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:12:50.596571" elapsed="0.001467"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:50.598373" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:50.598111" elapsed="0.000319"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:50.599170" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:50.598681" elapsed="0.000532"/>
</kw>
<status status="PASS" start="2026-08-23T02:12:50.598455" elapsed="0.000797"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:50.599442" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:50.599282" elapsed="0.000215"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:50.598091" elapsed="0.001427"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:12:50.599556" elapsed="0.000038"/>
</return>
<msg time="2026-08-23T02:12:50.599717" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:12:50.592970" elapsed="0.006773"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:12:50.599791" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:12:50.599955" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:12:50.592160" elapsed="0.007821"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:50.607331" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:50.607050" elapsed="0.000328"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:50.607776" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:50.607529" elapsed="0.000294"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:12:50.613764" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:50.613821" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:12:50.613956" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:12:50.609969" elapsed="0.004385">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:12:50.607912" elapsed="0.006526">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:50.614621" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:50.614471" elapsed="0.000214"/>
</branch>
<status status="FAIL" start="2026-08-23T02:12:50.607893" elapsed="0.006815">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:50.615097" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:50.615277" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:50.615239" elapsed="0.000080"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:50.615220" elapsed="0.000121"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:50.615482" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:12:50.615554" elapsed="0.000016"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:12:50.602659" elapsed="0.013003">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:50.615731" elapsed="0.000016"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:12:50.600199" elapsed="0.015628">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:50.616008" elapsed="0.000022"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:12:50.579379" elapsed="0.036738">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:51.632402" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:51.630275" elapsed="0.002157"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:51.633131" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:51.632787" elapsed="0.000371"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:12:51.632636" elapsed="0.000558"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:51.633744" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:51.633425" elapsed="0.000346"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:12:51.633277" elapsed="0.000529"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:12:51.632495" elapsed="0.001360"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:51.634178" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:51.633925" elapsed="0.000310"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:51.634968" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:51.634486" elapsed="0.000511"/>
</kw>
<status status="PASS" start="2026-08-23T02:12:51.634260" elapsed="0.000773"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:51.635217" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:51.635057" elapsed="0.000216"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:51.633906" elapsed="0.001387"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:12:51.635331" elapsed="0.000032"/>
</return>
<msg time="2026-08-23T02:12:51.635487" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:12:51.629792" elapsed="0.005721"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:12:51.635559" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:12:51.635701" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:12:51.629235" elapsed="0.006491"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:51.643074" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:51.642798" elapsed="0.000322"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:51.643511" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:51.643270" elapsed="0.000285"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:12:51.649578" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:51.649633" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:12:51.649742" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:12:51.645755" elapsed="0.004386">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:12:51.643684" elapsed="0.006539">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:51.650405" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:51.650257" elapsed="0.000213"/>
</branch>
<status status="FAIL" start="2026-08-23T02:12:51.643665" elapsed="0.006828">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:51.650878" elapsed="0.000028"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:51.651012" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:51.650976" elapsed="0.000078"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:51.650959" elapsed="0.000116"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:51.651213" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:12:51.651282" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:12:51.638429" elapsed="0.012956">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:51.651454" elapsed="0.000015"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:12:51.635984" elapsed="0.015562">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:51.651709" elapsed="0.000021"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:12:51.616790" elapsed="0.035070">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:52.668530" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:52.666371" elapsed="0.002192"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:52.669273" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:52.668946" elapsed="0.000354"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:12:52.668778" elapsed="0.000559"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:52.669899" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:52.669565" elapsed="0.000361"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:12:52.669418" elapsed="0.000596"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:12:52.668633" elapsed="0.001411"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:52.670380" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:52.670118" elapsed="0.000319"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:52.671177" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:52.670690" elapsed="0.000515"/>
</kw>
<status status="PASS" start="2026-08-23T02:12:52.670463" elapsed="0.000778"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:52.671427" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:52.671266" elapsed="0.000218"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:52.670098" elapsed="0.001407"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:12:52.671544" elapsed="0.000035"/>
</return>
<msg time="2026-08-23T02:12:52.671703" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:12:52.665895" elapsed="0.005834"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:12:52.671777" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:12:52.671942" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:12:52.665302" elapsed="0.006666"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:52.679274" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:52.679016" elapsed="0.000305"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:52.679717" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:52.679472" elapsed="0.000289"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:12:52.685830" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:52.685906" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:12:52.686018" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:12:52.681941" elapsed="0.004466">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:12:52.679827" elapsed="0.006662">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:52.686674" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:52.686523" elapsed="0.000216"/>
</branch>
<status status="FAIL" start="2026-08-23T02:12:52.679809" elapsed="0.006953">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:52.687142" elapsed="0.000025"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:52.687273" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:52.687236" elapsed="0.000110"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:52.687219" elapsed="0.000152"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:52.687515" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:12:52.687585" elapsed="0.000014"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:12:52.674676" elapsed="0.013014">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:52.687759" elapsed="0.000016"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:12:52.672192" elapsed="0.015678">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:52.688036" elapsed="0.000021"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:12:52.652704" elapsed="0.035441">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:53.704904" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:53.702724" elapsed="0.002211"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:53.705610" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:53.705286" elapsed="0.000351"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:12:53.705135" elapsed="0.000538"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:53.706237" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:53.705918" elapsed="0.000345"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:12:53.705754" elapsed="0.000545"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:12:53.704996" elapsed="0.001332"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:53.706645" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:53.706394" elapsed="0.000308"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:53.707438" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:53.706974" elapsed="0.000492"/>
</kw>
<status status="PASS" start="2026-08-23T02:12:53.706726" elapsed="0.000776"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:53.707686" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:53.707527" elapsed="0.000215"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:53.706375" elapsed="0.001387"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:12:53.707799" elapsed="0.000046"/>
</return>
<msg time="2026-08-23T02:12:53.707971" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:12:53.702259" elapsed="0.005738"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:12:53.708044" elapsed="0.000025"/>
</return>
<msg time="2026-08-23T02:12:53.708185" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:12:53.701678" elapsed="0.006533"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:53.715492" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:53.715238" elapsed="0.000300"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:53.715943" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:53.715687" elapsed="0.000299"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:12:53.721939" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:53.722020" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:12:53.722168" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:12:53.718107" elapsed="0.004559">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:12:53.716053" elapsed="0.006725">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:53.723065" elapsed="0.000032"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:53.722826" elapsed="0.000332"/>
</branch>
<status status="FAIL" start="2026-08-23T02:12:53.716035" elapsed="0.007156">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:53.723699" elapsed="0.000035"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:53.723909" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:53.723852" elapsed="0.000116"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:53.723808" elapsed="0.000190"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:53.724194" elapsed="0.000030"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:12:53.724291" elapsed="0.000021"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:12:53.710905" elapsed="0.013532">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:53.724533" elapsed="0.000022"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:12:53.708432" elapsed="0.016233">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:53.724931" elapsed="0.000031"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:12:53.688871" elapsed="0.036214">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:54.741400" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:54.739238" elapsed="0.002193"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:54.742138" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:54.741794" elapsed="0.000371"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:12:54.741641" elapsed="0.000560"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:54.742753" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:54.742433" elapsed="0.000346"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:12:54.742285" elapsed="0.000529"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:12:54.741498" elapsed="0.001410"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:54.743242" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:54.742983" elapsed="0.000317"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:54.744035" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:54.743552" elapsed="0.000510"/>
</kw>
<status status="PASS" start="2026-08-23T02:12:54.743325" elapsed="0.000773"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:54.744281" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:54.744123" elapsed="0.000213"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:54.742964" elapsed="0.001393"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:12:54.744396" elapsed="0.000035"/>
</return>
<msg time="2026-08-23T02:12:54.744555" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:12:54.738750" elapsed="0.005832"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:12:54.744627" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:12:54.744768" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:12:54.738188" elapsed="0.006606"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:54.752077" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:54.751808" elapsed="0.000316"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:54.752512" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:54.752273" elapsed="0.000283"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:12:54.758680" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:54.758736" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:12:54.758866" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:12:54.754706" elapsed="0.004538">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:12:54.752621" elapsed="0.006705">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:54.759510" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:54.759359" elapsed="0.000216"/>
</branch>
<status status="FAIL" start="2026-08-23T02:12:54.752603" elapsed="0.006995">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:54.759983" elapsed="0.000027"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:54.760115" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:54.760079" elapsed="0.000077"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:54.760062" elapsed="0.000116"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:54.760316" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:12:54.760420" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:12:54.747502" elapsed="0.013023">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:54.760593" elapsed="0.000016"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:12:54.745033" elapsed="0.015654">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:54.760866" elapsed="0.000022"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:12:54.725801" elapsed="0.035176">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:55.778047" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:55.775882" elapsed="0.002198"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:55.778778" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:55.778451" elapsed="0.000354"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:12:55.778296" elapsed="0.000560"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:55.779414" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:55.779092" elapsed="0.000349"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:12:55.778942" elapsed="0.000534"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:12:55.778148" elapsed="0.001358"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:55.779851" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:55.779574" elapsed="0.000338"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:55.780635" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:55.780166" elapsed="0.000497"/>
</kw>
<status status="PASS" start="2026-08-23T02:12:55.779937" elapsed="0.000763"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:55.780903" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:55.780725" elapsed="0.000237"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:55.779555" elapsed="0.001428"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:12:55.781026" elapsed="0.000034"/>
</return>
<msg time="2026-08-23T02:12:55.781184" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:12:55.775389" elapsed="0.005822"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:12:55.781258" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:12:55.781401" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:12:55.774803" elapsed="0.006624"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:55.788712" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:55.788455" elapsed="0.000304"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:55.789173" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:55.788929" elapsed="0.000287"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:12:55.795309" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:55.795428" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:12:55.795543" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:12:55.791409" elapsed="0.004573">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:12:55.789282" elapsed="0.006839">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:55.796379" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:55.796170" elapsed="0.000300"/>
</branch>
<status status="FAIL" start="2026-08-23T02:12:55.789264" elapsed="0.007239">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:55.797038" elapsed="0.000036"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:55.797224" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:55.797173" elapsed="0.000110"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:55.797149" elapsed="0.000164"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:55.797507" elapsed="0.000029"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:12:55.797606" elapsed="0.000021"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:12:55.784148" elapsed="0.013603">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:55.797867" elapsed="0.000023"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:12:55.781648" elapsed="0.016374">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:55.798251" elapsed="0.000035"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:12:55.761726" elapsed="0.036680">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:56.818209" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:56.815243" elapsed="0.002999"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:56.818963" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:56.818619" elapsed="0.000371"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:12:56.818466" elapsed="0.000560"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:56.819579" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:56.819260" elapsed="0.000346"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:12:56.819109" elapsed="0.000533"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:12:56.818317" elapsed="0.001354"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:56.820027" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:56.819745" elapsed="0.000401"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:56.820895" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:56.820407" elapsed="0.000516"/>
</kw>
<status status="PASS" start="2026-08-23T02:12:56.820174" elapsed="0.000785"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:56.821145" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:56.820984" elapsed="0.000217"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:56.819724" elapsed="0.001497"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:12:56.821259" elapsed="0.000039"/>
</return>
<msg time="2026-08-23T02:12:56.821431" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:12:56.814570" elapsed="0.006888"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:12:56.821506" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:12:56.821648" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:12:56.813745" elapsed="0.007929"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:56.828975" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:56.828701" elapsed="0.000459"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:56.829572" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:56.829323" elapsed="0.000293"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:12:56.838041" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:56.838098" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:12:56.838219" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:12:56.831880" elapsed="0.006741">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:12:56.829683" elapsed="0.009020">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:56.838903" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:56.838737" elapsed="0.000234"/>
</branch>
<status status="FAIL" start="2026-08-23T02:12:56.829665" elapsed="0.009329">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:56.839362" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:56.839495" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:56.839458" elapsed="0.000079"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:56.839441" elapsed="0.000117"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:56.839698" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:12:56.839773" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:12:56.824366" elapsed="0.015526">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:56.840018" elapsed="0.000017"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:12:56.821920" elapsed="0.018196">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:56.840282" elapsed="0.000021"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:12:56.799194" elapsed="0.041197">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:57.860762" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:57.858580" elapsed="0.002215"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:57.861516" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:57.861187" elapsed="0.000356"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:12:57.861033" elapsed="0.000547"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:57.862152" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:57.861815" elapsed="0.000364"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:12:57.861663" elapsed="0.000552"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:12:57.860881" elapsed="0.001363"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:57.862586" elapsed="0.000034"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:57.862317" elapsed="0.000345"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:57.863409" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:57.862941" elapsed="0.000498"/>
</kw>
<status status="PASS" start="2026-08-23T02:12:57.862688" elapsed="0.000786"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:57.863660" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:57.863500" elapsed="0.000217"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:57.862297" elapsed="0.001441"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:12:57.863777" elapsed="0.000038"/>
</return>
<msg time="2026-08-23T02:12:57.863962" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:12:57.858095" elapsed="0.005900"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:12:57.864055" elapsed="0.000032"/>
</return>
<msg time="2026-08-23T02:12:57.864209" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:12:57.857470" elapsed="0.006765"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:57.871680" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:57.871423" elapsed="0.000304"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:57.872137" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:57.871893" elapsed="0.000287"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:12:57.878529" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:57.878585" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:12:57.878761" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:12:57.874320" elapsed="0.004874">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:12:57.872246" elapsed="0.007045">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:57.879479" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:57.879326" elapsed="0.000219"/>
</branch>
<status status="FAIL" start="2026-08-23T02:12:57.872227" elapsed="0.007341">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:57.879958" elapsed="0.000027"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:57.880096" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:57.880058" elapsed="0.000082"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:57.880040" elapsed="0.000122"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:57.880303" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:12:57.880374" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:12:57.867098" elapsed="0.013383">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:57.880550" elapsed="0.000016"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:12:57.864459" elapsed="0.016188">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:57.880818" elapsed="0.000037"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:12:57.841240" elapsed="0.039706">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:58.900381" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:58.898203" elapsed="0.002210"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:58.901148" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:58.900782" elapsed="0.000393"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:12:58.900627" elapsed="0.000584"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:58.901778" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:58.901441" elapsed="0.000364"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:12:58.901293" elapsed="0.000573"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:12:58.900481" elapsed="0.001416"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:58.902240" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:58.901968" elapsed="0.000328"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:58.903029" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:58.902549" elapsed="0.000509"/>
</kw>
<status status="PASS" start="2026-08-23T02:12:58.902322" elapsed="0.000771"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:58.903278" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:58.903118" elapsed="0.000286"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:58.901949" elapsed="0.001479"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:12:58.903468" elapsed="0.000036"/>
</return>
<msg time="2026-08-23T02:12:58.903629" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:12:58.897693" elapsed="0.005962"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:12:58.903702" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:12:58.903860" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:12:58.897116" elapsed="0.006771"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:58.911423" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:58.911167" elapsed="0.000303"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:58.911878" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:58.911621" elapsed="0.000301"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:12:58.918219" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:58.918276" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:12:58.918390" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:12:58.914067" elapsed="0.004697">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:12:58.911995" elapsed="0.006868">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:58.919050" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:58.918900" elapsed="0.000219"/>
</branch>
<status status="FAIL" start="2026-08-23T02:12:58.911976" elapsed="0.007166">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:58.919509" elapsed="0.000025"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:58.919640" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:58.919603" elapsed="0.000079"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:58.919586" elapsed="0.000117"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:58.919859" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:12:58.919930" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:12:58.906746" elapsed="0.013288">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:58.920102" elapsed="0.000015"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:12:58.904110" elapsed="0.016085">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:58.920397" elapsed="0.000021"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:12:58.881721" elapsed="0.038785">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:59.938144" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:59.935932" elapsed="0.002246"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:59.938910" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:59.938564" elapsed="0.000373"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:12:59.938407" elapsed="0.000566"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:59.939531" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:59.939215" elapsed="0.000342"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:12:59.939061" elapsed="0.000531"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:12:59.938253" elapsed="0.001369"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:59.939988" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:59.939700" elapsed="0.000347"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:12:59.940766" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:12:59.940301" elapsed="0.000494"/>
</kw>
<status status="PASS" start="2026-08-23T02:12:59.940073" elapsed="0.000757"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:59.941035" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:59.940873" elapsed="0.000216"/>
</branch>
<status status="PASS" start="2026-08-23T02:12:59.939679" elapsed="0.001431"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:12:59.941150" elapsed="0.000040"/>
</return>
<msg time="2026-08-23T02:12:59.941316" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:12:59.935442" elapsed="0.005900"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:12:59.941390" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:12:59.941532" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:12:59.934859" elapsed="0.006698"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:59.949085" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:59.948808" elapsed="0.000326"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:12:59.949537" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:12:59.949283" elapsed="0.000298"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:12:59.955600" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:12:59.955659" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:12:59.955773" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:12:59.951716" elapsed="0.004481">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:12:59.949646" elapsed="0.006706">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:59.956539" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:12:59.956388" elapsed="0.000216"/>
</branch>
<status status="FAIL" start="2026-08-23T02:12:59.949628" elapsed="0.006999">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:59.957014" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:59.957152" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:12:59.957116" elapsed="0.000079"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:12:59.957096" elapsed="0.000120"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:59.957368" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:12:59.957439" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:12:59.944397" elapsed="0.013147">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:12:59.957614" elapsed="0.000015"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:12:59.941800" elapsed="0.015908">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:12:59.957899" elapsed="0.000022"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:12:59.921355" elapsed="0.036654">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:00.975000" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:00.972726" elapsed="0.002310"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:00.975788" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:00.975459" elapsed="0.000355"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:13:00.975302" elapsed="0.000579"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:00.976552" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:00.976135" elapsed="0.000444"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:13:00.975970" elapsed="0.000645"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:13:00.975126" elapsed="0.001518"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:00.977016" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:00.976725" elapsed="0.000349"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:00.977808" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:00.977337" elapsed="0.000516"/>
</kw>
<status status="PASS" start="2026-08-23T02:13:00.977104" elapsed="0.000788"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:00.978092" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:00.977917" elapsed="0.000232"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:00.976703" elapsed="0.001467"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:13:00.978212" elapsed="0.000043"/>
</return>
<msg time="2026-08-23T02:13:00.978384" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:13:00.972231" elapsed="0.006271"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:13:00.978554" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:13:00.978700" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:13:00.971625" elapsed="0.007101"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:00.986111" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:00.985790" elapsed="0.000372"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:00.986578" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:00.986323" elapsed="0.000299"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:13:00.992646" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:13:00.992713" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:13:00.992858" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:13:00.988771" elapsed="0.004507">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:13:00.986693" elapsed="0.006672">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:00.993549" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:00.993399" elapsed="0.000214"/>
</branch>
<status status="FAIL" start="2026-08-23T02:13:00.986675" elapsed="0.006962">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:00.994051" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:00.994185" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:00.994148" elapsed="0.000078"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:13:00.994131" elapsed="0.000117"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:00.994389" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:13:00.994457" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:13:00.981447" elapsed="0.013117">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:00.994632" elapsed="0.000015"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:13:00.978972" elapsed="0.015753">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:00.994907" elapsed="0.000023"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:13:00.958910" elapsed="0.036145">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:02.013675" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:02.011451" elapsed="0.002259"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:02.014461" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:02.014119" elapsed="0.000369"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:13:02.013959" elapsed="0.000567"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:02.015121" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:02.014772" elapsed="0.000375"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:13:02.014616" elapsed="0.000567"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:13:02.013789" elapsed="0.001424"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:02.015563" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:02.015291" elapsed="0.000330"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:02.016610" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:02.015897" elapsed="0.000742"/>
</kw>
<status status="PASS" start="2026-08-23T02:13:02.015648" elapsed="0.001028"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:02.016884" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:02.016702" elapsed="0.000240"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:02.015270" elapsed="0.001693"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:13:02.017006" elapsed="0.000044"/>
</return>
<msg time="2026-08-23T02:13:02.017179" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:13:02.010962" elapsed="0.006243"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:13:02.017254" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:13:02.017396" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:13:02.010340" elapsed="0.007081"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:02.024878" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:02.024605" elapsed="0.000322"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:02.025328" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:02.025078" elapsed="0.000293"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:13:02.031530" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:13:02.031588" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:13:02.031705" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:13:02.027630" elapsed="0.004500">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:13:02.025437" elapsed="0.006846">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:02.032472" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:02.032320" elapsed="0.000217"/>
</branch>
<status status="FAIL" start="2026-08-23T02:13:02.025419" elapsed="0.007142">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:02.032953" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:02.033087" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:02.033049" elapsed="0.000080"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:13:02.033032" elapsed="0.000119"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:02.033291" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:13:02.033360" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:13:02.020260" elapsed="0.013206">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:02.033535" elapsed="0.000016"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:13:02.017645" elapsed="0.015985">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:02.033806" elapsed="0.000048"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:13:01.995877" elapsed="0.038070">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:03.052345" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:03.050180" elapsed="0.002196"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:03.053085" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:03.052741" elapsed="0.000372"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:13:03.052587" elapsed="0.000562"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:03.053711" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:03.053382" elapsed="0.000356"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:13:03.053231" elapsed="0.000542"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:13:03.052443" elapsed="0.001359"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:03.054274" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:03.053899" elapsed="0.000434"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:03.055082" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:03.054591" elapsed="0.000519"/>
</kw>
<status status="PASS" start="2026-08-23T02:13:03.054359" elapsed="0.000786"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:03.055336" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:03.055172" elapsed="0.000219"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:03.053879" elapsed="0.001532"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:13:03.055451" elapsed="0.000037"/>
</return>
<msg time="2026-08-23T02:13:03.055613" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:13:03.049672" elapsed="0.005967"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:13:03.055688" elapsed="0.000090"/>
</return>
<msg time="2026-08-23T02:13:03.055918" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:13:03.049089" elapsed="0.006856"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:03.063287" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:03.063030" elapsed="0.000305"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:03.063727" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:03.063485" elapsed="0.000285"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:13:03.069475" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:13:03.069533" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:13:03.069648" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:13:03.065937" elapsed="0.004117">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:13:03.063852" elapsed="0.006288">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:03.070334" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:03.070176" elapsed="0.000222"/>
</branch>
<status status="FAIL" start="2026-08-23T02:13:03.063818" elapsed="0.006604">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:03.070793" elapsed="0.000027"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:03.070944" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:03.070907" elapsed="0.000079"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:13:03.070889" elapsed="0.000118"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:03.071148" elapsed="0.000020"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:13:03.071217" elapsed="0.000014"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:13:03.058665" elapsed="0.012657">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:03.071391" elapsed="0.000016"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:13:03.056180" elapsed="0.015305">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:03.071649" elapsed="0.000022"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:13:03.034556" elapsed="0.037200">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:04.083746" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:04.081561" elapsed="0.002218"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:04.084506" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:04.084178" elapsed="0.000356"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:13:04.084022" elapsed="0.000548"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:04.085141" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:04.084804" elapsed="0.000363"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:13:04.084654" elapsed="0.000549"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:13:04.083874" elapsed="0.001359"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:04.085573" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:04.085308" elapsed="0.000323"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:04.086369" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:04.085902" elapsed="0.000495"/>
</kw>
<status status="PASS" start="2026-08-23T02:13:04.085657" elapsed="0.000776"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:04.086618" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:04.086459" elapsed="0.000215"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:04.085288" elapsed="0.001406"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:13:04.086733" elapsed="0.000039"/>
</return>
<msg time="2026-08-23T02:13:04.086915" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:13:04.081085" elapsed="0.005857"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:13:04.086988" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:13:04.087131" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:13:04.080495" elapsed="0.006661"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:04.094560" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:04.094302" elapsed="0.000305"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:04.095018" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:04.094755" elapsed="0.000306"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:13:04.100949" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:13:04.101009" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:13:04.101122" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:13:04.097200" elapsed="0.004348">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:13:04.095127" elapsed="0.006504">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:04.101815" elapsed="0.000095"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:04.101665" elapsed="0.000292"/>
</branch>
<status status="FAIL" start="2026-08-23T02:13:04.095108" elapsed="0.006873">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:04.102360" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:04.102493" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:04.102456" elapsed="0.000079"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:13:04.102438" elapsed="0.000118"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:04.102696" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:13:04.102765" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:13:04.089936" elapsed="0.012952">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:04.102959" elapsed="0.000016"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:13:04.087375" elapsed="0.015679">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:04.103218" elapsed="0.000022"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:13:04.072305" elapsed="0.031021">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:05.120852" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:05.118648" elapsed="0.002238"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:05.121616" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:05.121270" elapsed="0.000373"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:13:05.121115" elapsed="0.000565"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:05.122280" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:05.121945" elapsed="0.000362"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:13:05.121764" elapsed="0.000578"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:13:05.120966" elapsed="0.001406"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:05.122706" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:05.122444" elapsed="0.000320"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:05.123515" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:05.123044" elapsed="0.000499"/>
</kw>
<status status="PASS" start="2026-08-23T02:13:05.122789" elapsed="0.000789"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:05.123763" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:05.123603" elapsed="0.000216"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:05.122423" elapsed="0.001459"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:13:05.123924" elapsed="0.000037"/>
</return>
<msg time="2026-08-23T02:13:05.124087" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:13:05.118160" elapsed="0.005974"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:13:05.124183" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:13:05.124329" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:13:05.117548" elapsed="0.006807"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:05.131918" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:05.131645" elapsed="0.000320"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:05.132466" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:05.132204" elapsed="0.000305"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:13:05.138569" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:13:05.138626" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:13:05.138743" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:13:05.134648" elapsed="0.004543">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:13:05.132575" elapsed="0.006701">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:05.139462" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:05.139311" elapsed="0.000216"/>
</branch>
<status status="FAIL" start="2026-08-23T02:13:05.132557" elapsed="0.006993">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:05.139956" elapsed="0.000025"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:05.140088" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:05.140051" elapsed="0.000079"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:13:05.140034" elapsed="0.000118"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:05.140296" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:13:05.140365" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:13:05.127322" elapsed="0.013148">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:05.140538" elapsed="0.000016"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:13:05.124806" elapsed="0.015827">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:05.140796" elapsed="0.000022"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:13:05.104676" elapsed="0.036246">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:06.158329" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:06.156165" elapsed="0.002281"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:06.159208" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:06.158872" elapsed="0.000363"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:13:06.158672" elapsed="0.000599"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:06.159827" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:06.159506" elapsed="0.000376"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:13:06.159354" elapsed="0.000565"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:13:06.158521" elapsed="0.001429"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:06.160291" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:06.160025" elapsed="0.000325"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:06.161088" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:06.160602" elapsed="0.000513"/>
</kw>
<status status="PASS" start="2026-08-23T02:13:06.160375" elapsed="0.000776"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:06.161341" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:06.161176" elapsed="0.000221"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:06.160004" elapsed="0.001414"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:13:06.161457" elapsed="0.000039"/>
</return>
<msg time="2026-08-23T02:13:06.161622" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:13:06.155667" elapsed="0.005981"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:13:06.161696" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:13:06.161854" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:13:06.155092" elapsed="0.006789"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:06.169261" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:06.169002" elapsed="0.000307"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:06.169701" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:06.169459" elapsed="0.000286"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:13:06.175830" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:13:06.175907" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:13:06.176022" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:13:06.171889" elapsed="0.004532">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:13:06.169810" elapsed="0.006694">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:06.176686" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:06.176537" elapsed="0.000258"/>
</branch>
<status status="FAIL" start="2026-08-23T02:13:06.169792" elapsed="0.007030">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:06.177215" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:06.177348" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:06.177311" elapsed="0.000079"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:13:06.177293" elapsed="0.000119"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:06.177552" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:13:06.177622" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:13:06.164598" elapsed="0.013129">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:06.177796" elapsed="0.000016"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:13:06.162102" elapsed="0.015806">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:06.178073" elapsed="0.000021"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:13:06.141766" elapsed="0.036415">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:07.195854" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:07.193556" elapsed="0.002336"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:07.196629" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:07.196299" elapsed="0.000357"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:13:07.196137" elapsed="0.000556"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:07.197268" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:07.196946" elapsed="0.000349"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:13:07.196780" elapsed="0.000550"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:13:07.195976" elapsed="0.001383"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:07.197711" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:07.197441" elapsed="0.000329"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:07.198512" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:07.198044" elapsed="0.000495"/>
</kw>
<status status="PASS" start="2026-08-23T02:13:07.197797" elapsed="0.000778"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:07.198761" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:07.198601" elapsed="0.000215"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:07.197418" elapsed="0.001434"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:13:07.198897" elapsed="0.000046"/>
</return>
<msg time="2026-08-23T02:13:07.199075" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:13:07.193051" elapsed="0.006073"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:13:07.199174" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:13:07.199325" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:13:07.192446" elapsed="0.006904"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:07.206859" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:07.206584" elapsed="0.000325"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:07.207328" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:07.207069" elapsed="0.000303"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:13:07.213292" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:13:07.213352" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:13:07.213480" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:13:07.209628" elapsed="0.004312">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:13:07.207440" elapsed="0.006589">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:07.214213" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:07.214063" elapsed="0.000216"/>
</branch>
<status status="FAIL" start="2026-08-23T02:13:07.207419" elapsed="0.006889">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:07.214687" elapsed="0.000025"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:07.214818" elapsed="0.000027"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:07.214782" elapsed="0.000094"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:13:07.214765" elapsed="0.000132"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:07.215062" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:13:07.215134" elapsed="0.000014"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:13:07.202240" elapsed="0.013001">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:07.215314" elapsed="0.000015"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:13:07.199738" elapsed="0.015670">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:07.215573" elapsed="0.000020"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:13:07.179089" elapsed="0.036590">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:08.230266" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:08.228063" elapsed="0.002245"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:08.231119" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:08.230684" elapsed="0.000463"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:13:08.230527" elapsed="0.000657"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:08.231741" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:08.231418" elapsed="0.000350"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:13:08.231268" elapsed="0.000536"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:13:08.230380" elapsed="0.001489"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:08.232226" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:08.231947" elapsed="0.000338"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:08.233030" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:08.232537" elapsed="0.000521"/>
</kw>
<status status="PASS" start="2026-08-23T02:13:08.232311" elapsed="0.000783"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:08.233303" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:08.233119" elapsed="0.000239"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:08.231926" elapsed="0.001454"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:13:08.233420" elapsed="0.000039"/>
</return>
<msg time="2026-08-23T02:13:08.233585" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:13:08.227569" elapsed="0.006043"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:13:08.233658" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:13:08.233800" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:13:08.226985" elapsed="0.006842"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:08.243402" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:08.243142" elapsed="0.000308"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:08.243857" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:08.243598" elapsed="0.000305"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:13:08.250056" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:13:08.250115" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:13:08.250237" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:13:08.246090" elapsed="0.004547">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:13:08.243969" elapsed="0.006750">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:08.250919" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:08.250753" elapsed="0.000231"/>
</branch>
<status status="FAIL" start="2026-08-23T02:13:08.243951" elapsed="0.007057">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:08.251449" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:08.251582" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:08.251545" elapsed="0.000079"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:13:08.251528" elapsed="0.000117"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:08.251783" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:13:08.251867" elapsed="0.000016"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:13:08.238607" elapsed="0.013369">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:08.252045" elapsed="0.000015"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:13:08.234068" elapsed="0.018070">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:08.252302" elapsed="0.000024"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:13:08.216396" elapsed="0.036017">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:09.268875" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:09.266511" elapsed="0.002396"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:09.269611" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:09.269285" elapsed="0.000352"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:13:09.269126" elapsed="0.000547"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:09.270241" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:09.269922" elapsed="0.000345"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:13:09.269755" elapsed="0.000547"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:13:09.268977" elapsed="0.001354"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:09.270673" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:09.270415" elapsed="0.000316"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:09.271502" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:09.271036" elapsed="0.000494"/>
</kw>
<status status="PASS" start="2026-08-23T02:13:09.270757" elapsed="0.000808"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:09.271751" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:09.271591" elapsed="0.000214"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:09.270394" elapsed="0.001432"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:13:09.271893" elapsed="0.000037"/>
</return>
<msg time="2026-08-23T02:13:09.272053" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:13:09.266030" elapsed="0.006049"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:13:09.272125" elapsed="0.000025"/>
</return>
<msg time="2026-08-23T02:13:09.272265" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:13:09.265449" elapsed="0.006841"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:09.279689" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:09.279434" elapsed="0.000366"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:09.280215" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:09.279969" elapsed="0.000290"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:13:09.286199" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:13:09.286256" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:13:09.286370" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:13:09.282394" elapsed="0.004359">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:13:09.280325" elapsed="0.006530">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:09.287043" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:09.286892" elapsed="0.000216"/>
</branch>
<status status="FAIL" start="2026-08-23T02:13:09.280307" elapsed="0.006825">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:09.287501" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:09.287633" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:09.287596" elapsed="0.000078"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:13:09.287579" elapsed="0.000117"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:09.287849" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:13:09.287921" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:13:09.275013" elapsed="0.013012">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:09.288094" elapsed="0.000015"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:13:09.272535" elapsed="0.015652">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:09.288360" elapsed="0.000022"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:13:09.253198" elapsed="0.035271">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Check_Device_Connected" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:10.307295" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:10.305135" elapsed="0.002193"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:10.308044" level="INFO">${node_value_path} = /topology=topology-netconf</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:10.307701" elapsed="0.000370"/>
</kw>
<var name="${nv}">topology=topology-netconf</var>
<status status="PASS" start="2026-08-23T02:13:10.307547" elapsed="0.000560"/>
</iter>
<iter>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:10.308748" level="INFO">${node_value_path} = /topology=topology-netconf/node=netconf-test-device</msg>
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:10.308422" elapsed="0.000353"/>
</kw>
<var name="${nv}">node=netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:13:10.308269" elapsed="0.000542"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="PASS" start="2026-08-23T02:13:10.307400" elapsed="0.001458"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:10.309202" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:10.308931" elapsed="0.000330"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:10.310014" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:10.309524" elapsed="0.000518"/>
</kw>
<status status="PASS" start="2026-08-23T02:13:10.309287" elapsed="0.000792"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:10.310267" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:10.310105" elapsed="0.000243"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:10.308911" elapsed="0.001458"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:13:10.310407" elapsed="0.000034"/>
</return>
<msg time="2026-08-23T02:13:10.310565" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:13:10.304630" elapsed="0.005962"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:13:10.310639" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:13:10.310782" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:13:10.304054" elapsed="0.006754"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:10.318269" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:10.318008" elapsed="0.000309"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:10.318715" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:10.318469" elapsed="0.000291"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:13:10.324652" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:13:10.324709" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '458'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:13:10.324820" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:13:10.320921" elapsed="0.004313">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:13:10.318851" elapsed="0.006466">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:10.325502" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:10.325351" elapsed="0.000216"/>
</branch>
<status status="FAIL" start="2026-08-23T02:13:10.318809" elapsed="0.006781">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:10.325976" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:10.326149" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:10.326110" elapsed="0.000082"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:13:10.326092" elapsed="0.000122"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:10.326358" elapsed="0.000024"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:13:10.326431" elapsed="0.000016"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:13:10.313613" elapsed="0.012924">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:10.326608" elapsed="0.000016"/>
</return>
<var>${device_status}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:13:10.311048" elapsed="0.015657">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${device_status}</arg>
<arg>connection-status": "connected"</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:10.326886" elapsed="0.000022"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device is accessible from Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:13:10.289304" elapsed="0.037693">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<msg time="2026-08-23T02:13:10.327093" level="FAIL">Keyword 'Check_Device_Connected' failed after retrying for 20 seconds. The last error was: HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</msg>
<arg>${timeout}</arg>
<arg>${period}</arg>
<arg>Check_Device_Connected</arg>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-08-23T02:12:49.547351" elapsed="20.779837">Keyword 'Check_Device_Connected' failed after retrying for 20 seconds. The last error was: HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<arg>${DEVICE_NAME}</arg>
<doc>Wait for the device to become connected.
It is more readable to use this keyword in a test case than to put the whole WUKS below into it.</doc>
<status status="FAIL" start="2026-08-23T02:12:49.546946" elapsed="20.780353">Keyword 'Check_Device_Connected' failed after retrying for 20 seconds. The last error was: HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</kw>
<doc>Wait until the device becomes available through Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:12:49.461162" elapsed="20.866291">Keyword 'Check_Device_Connected' failed after retrying for 20 seconds. The last error was: HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device?content=nonconfig</status>
</test>
<test id="s1-s5-s1-t5" name="Check_Device_Data_Is_Empty" line="68">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-08-23T02:13:10.331049" elapsed="0.000218"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:13:10.330770" 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-08-23T02:13:10.332333" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:10.332222" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:10.332202" elapsed="0.000200"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:13:10.337883" elapsed="0.000022"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:10.337709" elapsed="0.000238"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:10.337684" elapsed="0.000301"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:13:10.339235" 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-08-23T02:13:10.338773" elapsed="0.000493"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:13:10.339874" 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-08-23T02:13:10.339511" elapsed="0.000394"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:13:10.339957" elapsed="0.000035"/>
</return>
<msg time="2026-08-23T02:13:10.340143" 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-08-23T02:13:10.338294" elapsed="0.001878"/>
</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-08-23T02:13:10.346004" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:10.345893" elapsed="0.000202"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:10.345872" elapsed="0.000248"/>
</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-08-23T02:13:10.347409" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:10.347298" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:10.347279" elapsed="0.000200"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:13:10.348016" level="INFO">${karaf_connection_index} = 16</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-08-23T02:13:10.347625" elapsed="0.000418"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:13:10.348467" level="INFO">${current_connection_index} = 18</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-08-23T02:13:10.348204" elapsed="0.000290"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:13:10.378312" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:13:10.349126" elapsed="0.029351"/>
</kw>
<msg time="2026-08-23T02:13:10.378650" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:13:10.378698" 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 "n "e "t "c "o "n "f "...</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-08-23T02:13:10.348653" elapsed="0.030083"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:13:10.402530" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D "- "A "C "T "I "O "N ". "C "R "U "D "- "A "C "T "I "O "N ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "I "s "_ "E "m "p "t "y "[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-08-23T02:13:10.379328" elapsed="0.023406"/>
</kw>
<msg time="2026-08-23T02:13:10.402933" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:13:10.402980" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D "- "A "C "T "I "O "N ". "C "R "U "D "- "A "C "T "I "O "N ". "C "h "e "c "k ...</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-08-23T02:13:10.378933" elapsed="0.024086"/>
</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-08-23T02:13:10.403337" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:10.403100" elapsed="0.000314"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:10.403080" elapsed="0.000361"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:10.403989" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D "- "A "C "T "I "O "N ". "C "R "U "D "- "A "C "T "I "O "N ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "D "a "t "a "_ "I "s "_ "E "m "p "t "y "[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-08-23T02:13:10.403585" elapsed="0.000479"/>
</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-08-23T02:13:10.404345" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:10.404131" elapsed="0.000308"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:10.404113" elapsed="0.000351"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:13:10.404499" elapsed="0.000034"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-23T02:13:10.407599" elapsed="0.000151"/>
</kw>
<msg time="2026-08-23T02:13:10.407821" 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-08-23T02:13:10.406892" elapsed="0.001088"/>
</kw>
<kw name="Open 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-08-23T02:13:10.408935" elapsed="0.000038"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:10.409883" elapsed="0.000038"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:13:10.405402" elapsed="0.004599"/>
</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-08-23T02:13:10.404786" elapsed="0.005328"/>
</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-08-23T02:13:10.346991" elapsed="0.063224"/>
</kw>
<msg time="2026-08-23T02:13:10.410308" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:13:10.410353" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D "- "A "C "T "I "O "N ". "C "R "U "D "- "A "C "T "I "O "N ". "C "h "e "c "k ...</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-08-23T02:13:10.346275" elapsed="0.064117"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:13:10.410575" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:13:10.410468" elapsed="0.000211"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:10.410449" elapsed="0.000257"/>
</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-08-23T02:13:10.411158" 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-08-23T02:13:10.411500" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:13:10.411572" 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-08-23T02:13:10.345532" elapsed="0.066148"/>
</kw>
<msg time="2026-08-23T02:13:10.411772" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:13:10.411816" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D "- "A "C "T "I "O "N ". "C "R "U "D "- "A "C "T "I "O "N ". "C "h "e "c "k ...</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-08-23T02:13:10.340621" elapsed="0.071277"/>
</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-08-23T02:13:10.412224" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:10.411976" elapsed="0.000302"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:10.411959" elapsed="0.000343"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:13:10.340439" elapsed="0.071887"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:13:10.340234" elapsed="0.072150"/>
</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-08-23T02:13:10.337227" elapsed="0.075214"/>
</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-08-23T02:13:10.331931" elapsed="0.080565"/>
</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-08-23T02:13:10.331481" elapsed="0.081060"/>
</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-08-23T02:13:10.328403" elapsed="0.084192"/>
</kw>
<kw name="Regexp Escape" owner="BuiltIn">
<msg time="2026-08-23T02:13:10.413279" level="INFO">${escaped} = urn:ietf:params:xml:ns:netconf:base:1\.0</msg>
<var>${escaped}</var>
<arg>${ODL_NETCONF_NAMESPACE}</arg>
<doc>Returns each argument escaped for use as a regular expression.</doc>
<status status="PASS" start="2026-08-23T02:13:10.412756" elapsed="0.000549"/>
</kw>
<kw name="Check_Config_Data">
<kw name="Get_Config_Data">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:10.414601" level="INFO">${url} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${url}</var>
<arg>${REST_API}/network-topology:network-topology/topology=topology-netconf/node=${DEVICE_NAME}/yang-ext:mount?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:10.414219" elapsed="0.000410"/>
</kw>
<kw name="Get_As_Xml_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:10.422102" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:10.421849" elapsed="0.000299"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:10.422546" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:10.422300" elapsed="0.000290"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:13:10.428390" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:13:10.428438" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:13:10.428539" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:13:10.424735" elapsed="0.004217">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<status status="FAIL" start="2026-08-23T02:13:10.422655" elapsed="0.006380">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:10.429219" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:10.429069" elapsed="0.000246"/>
</branch>
<status status="FAIL" start="2026-08-23T02:13:10.422637" elapsed="0.006705">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:10.429720" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:10.429870" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:10.429816" elapsed="0.000097"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:13:10.429799" elapsed="0.000136"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:10.430077" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:13:10.430147" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:13:10.417473" elapsed="0.012779">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:10.430322" elapsed="0.000016"/>
</return>
<var>${data}</var>
<arg>${url}</arg>
<doc>Specify XML headers and return Get_From_Uri response text.</doc>
<status status="FAIL" start="2026-08-23T02:13:10.414849" elapsed="0.015587">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<return>
<value>${data}</value>
<status status="NOT RUN" start="2026-08-23T02:13:10.430501" elapsed="0.000017"/>
</return>
<var>${data}</var>
<doc>Get and return the config data from the device.</doc>
<status status="FAIL" start="2026-08-23T02:13:10.413955" elapsed="0.016639">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<if>
<branch type="IF" condition="${regex}">
<kw name="Should Match Regexp" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``string`` does not match ``pattern`` as a regular expression.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:10.430821" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:10.430666" elapsed="0.000228"/>
</branch>
<branch type="ELSE IF" condition="${contains}">
<kw name="Should Contain" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:10.431058" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:10.430918" elapsed="0.000194"/>
</branch>
<branch type="ELSE">
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${data}</arg>
<arg>${expected}</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:10.431268" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:10.431135" elapsed="0.000187"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:13:10.430650" elapsed="0.000693"/>
</if>
<arg>&lt;data xmlns\="${escaped}"(\/&gt;|&gt;&lt;\/data&gt;)</arg>
<arg>${True}</arg>
<status status="FAIL" start="2026-08-23T02:13:10.413512" elapsed="0.017911">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</kw>
<doc>Get the device data and make sure it is empty.</doc>
<status status="FAIL" start="2026-08-23T02:13:10.327885" elapsed="0.103685">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount?content=config</status>
</test>
<test id="s1-s5-s1-t6" name="Invoke_Yang1.1_Action_Via_Xml_Post" line="73">
<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-08-23T02:13:10.434927" elapsed="0.000213"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:13:10.434650" elapsed="0.000545"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:13:10.436201" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:10.436067" elapsed="0.000181"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:10.436049" elapsed="0.000221"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:13:10.441413" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:10.441306" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:10.441288" elapsed="0.000193"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:13:10.442479" 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-08-23T02:13:10.442092" elapsed="0.000414"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:13:10.442973" 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-08-23T02:13:10.442661" elapsed="0.000338"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:13:10.443043" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:13:10.443197" 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-08-23T02:13:10.441701" elapsed="0.001521"/>
</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-08-23T02:13:10.448875" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:10.448750" elapsed="0.000171"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:10.448731" 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-08-23T02:13:10.450224" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:10.450114" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:10.450095" elapsed="0.000197"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:13:10.450796" level="INFO">${karaf_connection_index} = 16</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-08-23T02:13:10.450434" elapsed="0.000389"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:13:10.451250" level="INFO">${current_connection_index} = 18</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-08-23T02:13:10.451004" elapsed="0.000272"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:13:10.483370" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:13:10.451819" elapsed="0.031732"/>
</kw>
<msg time="2026-08-23T02:13:10.483719" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:13:10.483765" 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 "n "e "t "c "o "n "f "...</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-08-23T02:13:10.451433" elapsed="0.032369"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:13:10.505534" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D "- "A "C "T "I "O "N ". "C "R "U "D "- "A "C "T "I "O "N ". "I "n "v "o "k "e "_ "Y "a "n "g "1 ". "1 "_ "A "c "t "i "o "n "_ "V "i "a "_ "X "m "l "_ "P "o "s "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-08-23T02:13:10.484401" elapsed="0.021311"/>
</kw>
<msg time="2026-08-23T02:13:10.505894" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:13:10.505940" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D "- "A "C "T "I "O "N ". "C "R "U "D "- "A "C "T "I "O "N ". "I "n "v "o "k ...</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-08-23T02:13:10.484013" elapsed="0.021965"/>
</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-08-23T02:13:10.506271" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:10.506054" elapsed="0.000291"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:10.506035" elapsed="0.000335"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:10.506896" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D "- "A "C "T "I "O "N ". "C "R "U "D "- "A "C "T "I "O "N ". "I "n "v "o "k "e "_ "Y "a "n "g "1 ". "1 "_ "A "c "t "i "o "n "_ "V "i "a "_ "X "m "l "_ "P "o "s "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-08-23T02:13:10.506511" elapsed="0.000461"/>
</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-08-23T02:13:10.507250" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:10.507038" elapsed="0.000286"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:10.507020" elapsed="0.000329"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:13:10.507382" 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-08-23T02:13:10.510401" elapsed="0.000147"/>
</kw>
<msg time="2026-08-23T02:13:10.510617" 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-08-23T02:13:10.509703" elapsed="0.001009"/>
</kw>
<kw name="Open 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-08-23T02:13:10.511804" elapsed="0.000107"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:10.512811" elapsed="0.000179"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:13:10.508253" elapsed="0.004821"/>
</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-08-23T02:13:10.507636" elapsed="0.005550"/>
</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-08-23T02:13:10.449706" elapsed="0.063579"/>
</kw>
<msg time="2026-08-23T02:13:10.513376" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:13:10.513420" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D "- "A "C "T "I "O "N ". "C "R "U "D "- "A "C "T "I "O "N ". "I "n "v "o "k ...</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-08-23T02:13:10.449093" elapsed="0.064396"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:13:10.513679" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:13:10.513569" elapsed="0.000169"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:10.513550" 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-08-23T02:13:10.514165" 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-08-23T02:13:10.514501" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:13:10.514573" 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-08-23T02:13:10.448408" elapsed="0.066274"/>
</kw>
<msg time="2026-08-23T02:13:10.514774" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:13:10.514817" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D "- "A "C "T "I "O "N ". "C "R "U "D "- "A "C "T "I "O "N ". "I "n "v "o "k ...</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-08-23T02:13:10.443676" elapsed="0.071261"/>
</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-08-23T02:13:10.515263" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:10.515015" elapsed="0.000302"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:10.514997" elapsed="0.000343"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:13:10.443534" elapsed="0.071830"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:13:10.443356" elapsed="0.072037"/>
</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-08-23T02:13:10.440945" elapsed="0.074501"/>
</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-08-23T02:13:10.435764" elapsed="0.079737"/>
</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-08-23T02:13:10.435341" elapsed="0.080203"/>
</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-08-23T02:13:10.432500" elapsed="0.083095"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:13:10.516222" level="INFO">${mapping} = {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping}</var>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-23T02:13:10.515768" elapsed="0.000481"/>
</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-08-23T02:13:10.549953" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/dataorigaction.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:10.549563" elapsed="0.000419"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T02:13:10.550785" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/dataorigaction.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-23T02:13:10.550472" elapsed="0.000399">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/dataorigaction.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-23T02:13:10.550968" 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-08-23T02:13:10.550142" elapsed="0.000851"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:13:10.551548" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/dataorigaction/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-08-23T02:13:10.551152" elapsed="0.000423"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:13:10.551889" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/dataorigaction/location.uri"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/dataorigaction/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:13:10.552050" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount/example-action:interfaces/interface=eth1/reset
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:13:10.551734" elapsed="0.000343"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:10.552472" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount/example-action:interfaces/interface=eth1/reset
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:10.552230" elapsed="0.000452"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:10.553644" level="INFO">mapping: {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:10.553387" elapsed="0.000302"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:13:10.554280" 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-08-23T02:13:10.553859" elapsed="0.000448"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:13:10.554976" level="INFO">${value} = netconf-test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:13:10.554658" elapsed="0.000345"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:13:10.555783" level="INFO">${encoded} = netconf-test-device</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-08-23T02:13:10.555537" elapsed="0.000272"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:13:10.555885" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T02:13:10.556039" level="INFO">${encoded_value} = netconf-test-device</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-08-23T02:13:10.555188" elapsed="0.000876"/>
</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-08-23T02:13:10.556213" elapsed="0.000240"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:13:10.554524" elapsed="0.001970"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:13:10.557053" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:13:10.556735" elapsed="0.000344"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:13:10.557806" level="INFO">${encoded} = /rests</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-08-23T02:13:10.557571" elapsed="0.000281"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:13:10.557905" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T02:13:10.558056" level="INFO">${encoded_value} = /rests</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-08-23T02:13:10.557259" elapsed="0.000822"/>
</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-08-23T02:13:10.558226" elapsed="0.000227"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-23T02:13:10.556607" elapsed="0.001886"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-23T02:13:10.554356" elapsed="0.004171"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-23T02:13:10.558569" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:13:10.558725" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-23T02:13:10.553065" elapsed="0.005686"/>
</kw>
<status status="PASS" start="2026-08-23T02:13:10.552751" elapsed="0.006032"/>
</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-08-23T02:13:10.558974" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:10.558808" elapsed="0.000223"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:10.552732" elapsed="0.006320"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:13:10.559792" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/example-action:interfaces/interface=eth1/reset</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-08-23T02:13:10.559191" elapsed="0.000629"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T02:13:10.559895" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/dataorigaction.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/dataorigaction.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/dataorigaction/${file_name}.</doc>
<status status="PASS" start="2026-08-23T02:13:10.548951" elapsed="0.011070"/>
</kw>
<msg time="2026-08-23T02:13:10.560075" 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-08-23T02:13:10.536182" elapsed="0.023941"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/dataorigaction.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/dataorigaction.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/dataorigaction/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:10.572450" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/dataorigaction.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/dataorigaction.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/dataorigaction/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:10.584961" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/dataorigaction.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/dataorigaction.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/dataorigaction/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:10.597308" 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-08-23T02:13:10.597499" 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-08-23T02:13:10.597668" 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-08-23T02:13:10.598043" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:10.597902" elapsed="0.000197"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:13:10.597887" 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-08-23T02:13:10.598257" 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-08-23T02:13:10.598417" 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-08-23T02:13:10.598576" elapsed="0.000019"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T02:13:10.597857" elapsed="0.000770"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T02:13:10.597744" 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-08-23T02:13:10.598792" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:10.598883" elapsed="0.000016"/>
</return>
<msg time="2026-08-23T02:13:10.599003" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/example-action:interfaces/interface=eth1/reset</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-08-23T02:13:10.531930" elapsed="0.067100"/>
</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-08-23T02:13:10.623981" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/dataorigaction.vanadium/post_data.xml</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:10.623584" elapsed="0.000426"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T02:13:10.624732" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/dataorigaction.vanadium/post_data.xml' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-23T02:13:10.624509" elapsed="0.000291">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/dataorigaction.vanadium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-08-23T02:13:10.624909" 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-08-23T02:13:10.624170" elapsed="0.000764"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:13:10.625477" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/dataorigaction/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-08-23T02:13:10.625095" elapsed="0.000409"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:13:10.625794" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/dataorigaction/post_data.xml"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/dataorigaction/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:13:10.625991" level="INFO">${template} = &lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;input xmlns="https://example.com/ns/example-action"&gt;
  &lt;delay&gt;600&lt;/delay&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-08-23T02:13:10.625659" elapsed="0.000360"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:10.626421" level="INFO">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;input xmlns="https://example.com/ns/example-action"&gt;
  &lt;delay&gt;600&lt;/delay&gt;
&lt;/input&gt;

</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:10.626175" 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-08-23T02:13:10.626828" elapsed="0.000041"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:10.626537" elapsed="0.000366"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:10.627391" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</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-08-23T02:13:10.627097" elapsed="0.000321"/>
</kw>
<status status="PASS" start="2026-08-23T02:13:10.626929" elapsed="0.000524"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:10.626517" elapsed="0.000957"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:13:10.628070" level="INFO">${final_text} = &lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;input xmlns="https://example.com/ns/example-action"&gt;
  &lt;delay&gt;600&lt;/delay&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-08-23T02:13:10.627618" elapsed="0.000481"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T02:13:10.628148" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/dataorigaction.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/dataorigaction.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/dataorigaction/${file_name}.</doc>
<status status="PASS" start="2026-08-23T02:13:10.622952" elapsed="0.005324"/>
</kw>
<msg time="2026-08-23T02:13:10.628328" 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-08-23T02:13:10.610308" elapsed="0.018068"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/dataorigaction.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/dataorigaction.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/dataorigaction/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:10.640740" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/dataorigaction.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/dataorigaction.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/dataorigaction/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:10.653114" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/dataorigaction.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/dataorigaction.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/dataorigaction/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:10.665923" 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-08-23T02:13:10.666116" 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-08-23T02:13:10.666286" elapsed="0.000019"/>
</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-08-23T02:13:10.666651" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:10.666509" elapsed="0.000209"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:13:10.666493" 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-08-23T02:13:10.666897" 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-08-23T02:13:10.667063" 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-08-23T02:13:10.667267" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T02:13:10.666466" elapsed="0.000855"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T02:13:10.666360" elapsed="0.000987"/>
</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-08-23T02:13:10.667488" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:10.667564" elapsed="0.000016"/>
</return>
<msg time="2026-08-23T02:13:10.667683" level="INFO">${data} = &lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;input xmlns="https://example.com/ns/example-action"&gt;
  &lt;delay&gt;600&lt;/delay&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-08-23T02:13:10.609307" elapsed="0.058404"/>
</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-08-23T02:13:10.668966" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/dataorigaction/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-08-23T02:13:10.668709" elapsed="0.000321">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/dataorigaction/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-23T02:13:10.669123" 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-08-23T02:13:10.668376" 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-08-23T02:13:10.669459" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:10.669216" elapsed="0.000299"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:10.670014" 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-08-23T02:13:10.669704" elapsed="0.000337"/>
</kw>
<status status="PASS" start="2026-08-23T02:13:10.669539" elapsed="0.000537"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:10.669198" elapsed="0.000899"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:13:10.672440" 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-08-23T02:13:10.670252" elapsed="0.002215"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-23T02:13:10.672518" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:13:10.672672" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/dataorigaction/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-23T02:13:10.668056" elapsed="0.004641"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:10.674211" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/example-action:interfaces/interface=eth1/reset</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:10.673965" elapsed="0.000292"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:10.674640" level="INFO">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;input xmlns="https://example.com/ns/example-action"&gt;
  &lt;delay&gt;600&lt;/delay&gt;
&lt;/input&gt;</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:10.674404" elapsed="0.000308"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:10.675121" 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-08-23T02:13:10.674877" elapsed="0.000288"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:10.675546" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:10.675309" elapsed="0.000280"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-08-23T02:13:10.676391" 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-08-23T02:13:10.676197" elapsed="0.000220"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-08-23T02:13:10.676737" 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-08-23T02:13:10.676565" 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-08-23T02:13:10.676920" elapsed="0.000201"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:10.677517" 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-08-23T02:13:10.677274" elapsed="0.000286"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-08-23T02:13:10.677635" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T02:13:10.677795" 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-08-23T02:13:10.675782" 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-08-23T02:13:10.683984" level="INFO">POST Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/example-action:interfaces/interface=eth1/reset 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/example-action:interfaces/interface=eth1/reset 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Content-Length': '122', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;input xmlns="https://example.com/ns/example-action"&gt;
  &lt;delay&gt;600&lt;/delay&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-08-23T02:13:10.684038" level="INFO">POST Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/example-action:interfaces/interface=eth1/reset 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:13:10.684128" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/example-action:interfaces/interface=eth1/reset</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:13:10.680134" elapsed="0.004353">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/example-action:interfaces/interface=eth1/reset</status>
</kw>
<status status="FAIL" start="2026-08-23T02:13:10.677907" elapsed="0.006663">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/example-action:interfaces/interface=eth1/reset</status>
</branch>
<branch type="ELSE">
<kw name="POST On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:10.684752" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:10.684604" elapsed="0.000215"/>
</branch>
<status status="FAIL" start="2026-08-23T02:13:10.677888" elapsed="0.006972">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/example-action:interfaces/interface=eth1/reset</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:10.685223" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:10.685358" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:10.685321" elapsed="0.000078"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:13:10.685304" elapsed="0.000116"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:10.685559" elapsed="0.000020"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:13:10.685625" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>content_type=${content_type}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>POST data to given URI, check status code and return response text.
${content_type} and ${accept} are mandatory Python objects with headers to use.
If ${normalize_json}, normalize text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:13:10.673029" elapsed="0.012699">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/example-action:interfaces/interface=eth1/reset</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:10.685807" elapsed="0.000016"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>extension=xml</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>content_type=${HEADERS_XML}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>endline=${\n}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve URI and data from folder, call Post_To_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-23T02:13:10.520931" elapsed="0.164990">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/example-action:interfaces/interface=eth1/reset</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=response</arg>
<arg>mapping=${mapping}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:10.686208" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:10.686033" elapsed="0.000242"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:13:10.686015" elapsed="0.000283"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:10.686331" elapsed="0.000014"/>
</return>
<arg>${DIRECTORY_WITH_TEMPLATE_FOLDERS}${/}dataorigaction</arg>
<arg>${mapping}</arg>
<doc>Add arguments sensible for XML data, return Post_Templated response text.
Optionally, verification against response.xml (no iteration) is called.</doc>
<status status="FAIL" start="2026-08-23T02:13:10.516500" elapsed="0.169930">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/example-action:interfaces/interface=eth1/reset</status>
</kw>
<doc>Send a sample test data label into the device and check that the request went OK.</doc>
<status status="FAIL" start="2026-08-23T02:13:10.431899" elapsed="0.254729">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/example-action:interfaces/interface=eth1/reset</status>
</test>
<test id="s1-s5-s1-t7" name="Invoke_Yang1.1_Action_Via_Json_Post" line="80">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-08-23T02:13:10.689979" elapsed="0.000211"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:13:10.689702" elapsed="0.000542"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:13:10.691243" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:10.691135" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:10.691116" elapsed="0.000195"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:13:10.696274" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:10.696168" elapsed="0.000151"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:10.696149" elapsed="0.000192"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:13:10.697327" 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-08-23T02:13:10.696951" elapsed="0.000403"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:13:10.697800" 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-08-23T02:13:10.697508" elapsed="0.000318"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:13:10.697888" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:13:10.698043" 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-08-23T02:13:10.696560" elapsed="0.001508"/>
</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-08-23T02:13:10.705435" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:10.705325" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:10.705306" elapsed="0.000200"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:13:10.706751" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:10.706644" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:10.706626" elapsed="0.000193"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:13:10.707348" level="INFO">${karaf_connection_index} = 16</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-08-23T02:13:10.706989" elapsed="0.000386"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:13:10.707774" level="INFO">${current_connection_index} = 18</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-08-23T02:13:10.707528" elapsed="0.000272"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:13:10.740171" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:13:10.708357" elapsed="0.031989"/>
</kw>
<msg time="2026-08-23T02:13:10.740516" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:13:10.740562" 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 "n "e "t "c "o "n "f "...</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-08-23T02:13:10.707974" elapsed="0.032624"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:13:10.763730" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D "- "A "C "T "I "O "N ". "C "R "U "D "- "A "C "T "I "O "N ". "I "n "v "o "k "e "_ "Y "a "n "g "1 ". "1 "_ "A "c "t "i "o "n "_ "V "i "a "_ "J "s "o "n "_ "P "o "s "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-08-23T02:13:10.741174" elapsed="0.022762"/>
</kw>
<msg time="2026-08-23T02:13:10.764105" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:13:10.764151" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D "- "A "C "T "I "O "N ". "C "R "U "D "- "A "C "T "I "O "N ". "I "n "v "o "k ...</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-08-23T02:13:10.740765" elapsed="0.023422"/>
</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-08-23T02:13:10.764482" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:10.764264" elapsed="0.000329"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:10.764244" elapsed="0.000375"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:10.765151" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D "- "A "C "T "I "O "N ". "C "R "U "D "- "A "C "T "I "O "N ". "I "n "v "o "k "e "_ "Y "a "n "g "1 ". "1 "_ "A "c "t "i "o "n "_ "V "i "a "_ "J "s "o "n "_ "P "o "s "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-08-23T02:13:10.764758" elapsed="0.000469"/>
</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-08-23T02:13:10.765504" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:10.765293" elapsed="0.000287"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:10.765275" elapsed="0.000329"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:13:10.765638" 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-08-23T02:13:10.768659" elapsed="0.000148"/>
</kw>
<msg time="2026-08-23T02:13:10.768907" 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-08-23T02:13:10.768005" elapsed="0.001003"/>
</kw>
<kw name="Open 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-08-23T02:13:10.769934" elapsed="0.000036"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:10.771039" elapsed="0.000036"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:13:10.766530" elapsed="0.004624"/>
</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-08-23T02:13:10.765920" elapsed="0.005346"/>
</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-08-23T02:13:10.706312" elapsed="0.065052"/>
</kw>
<msg time="2026-08-23T02:13:10.771454" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:13:10.771497" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D "- "A "C "T "I "O "N ". "C "R "U "D "- "A "C "T "I "O "N ". "I "n "v "o "k ...</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-08-23T02:13:10.705657" elapsed="0.065878"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:13:10.771716" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:13:10.771610" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:10.771592" 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-08-23T02:13:10.772211" 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-08-23T02:13:10.772543" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:13:10.772616" 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-08-23T02:13:10.704982" elapsed="0.067741"/>
</kw>
<msg time="2026-08-23T02:13:10.772815" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:13:10.772948" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D "- "A "C "T "I "O "N ". "C "R "U "D "- "A "C "T "I "O "N ". "I "n "v "o "k ...</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-08-23T02:13:10.698423" elapsed="0.074563"/>
</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-08-23T02:13:10.773309" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:10.773063" elapsed="0.000301"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:10.773045" elapsed="0.000342"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:13:10.698286" elapsed="0.075124"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:13:10.698118" elapsed="0.075322"/>
</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-08-23T02:13:10.695799" elapsed="0.077692"/>
</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-08-23T02:13:10.690823" elapsed="0.082721"/>
</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-08-23T02:13:10.690394" elapsed="0.083193"/>
</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-08-23T02:13:10.687568" elapsed="0.086068"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:13:10.774288" level="INFO">${mapping} = {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping}</var>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-23T02:13:10.773830" elapsed="0.000485"/>
</kw>
<kw name="Post_As_Json_Rfc8040_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-08-23T02:13:10.819506" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/dataorigaction.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:10.819127" elapsed="0.000408"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T02:13:10.820280" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/dataorigaction.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-23T02:13:10.820043" elapsed="0.000308">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/dataorigaction.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-23T02:13:10.820448" 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-08-23T02:13:10.819695" elapsed="0.000777"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:13:10.821039" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/dataorigaction/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-08-23T02:13:10.820637" elapsed="0.000429"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:13:10.821358" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/dataorigaction/location.uri"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/dataorigaction/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:13:10.821508" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount/example-action:interfaces/interface=eth1/reset
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:13:10.821223" elapsed="0.000312"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:10.821967" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount/example-action:interfaces/interface=eth1/reset
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:10.821687" elapsed="0.000326"/>
</kw>
<if>
<branch type="IF" condition="${percent_encode} == True">
<kw name="Encode_Mapping" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:10.822980" level="INFO">mapping: {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:10.822701" elapsed="0.000323"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:13:10.823444" 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-08-23T02:13:10.823180" elapsed="0.000289"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:13:10.824135" level="INFO">${value} = netconf-test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:13:10.823821" elapsed="0.000341"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:13:10.824939" level="INFO">${encoded} = netconf-test-device</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-08-23T02:13:10.824663" elapsed="0.000302"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:13:10.825017" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T02:13:10.825171" level="INFO">${encoded_value} = netconf-test-device</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-08-23T02:13:10.824346" 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-08-23T02:13:10.825347" elapsed="0.000233"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:13:10.823690" elapsed="0.001931"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:13:10.826212" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:13:10.825913" elapsed="0.000326"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:13:10.827149" level="INFO">${encoded} = /rests</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-08-23T02:13:10.826913" elapsed="0.000262"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:13:10.827226" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:13:10.827377" level="INFO">${encoded_value} = /rests</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-08-23T02:13:10.826570" elapsed="0.000831"/>
</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-08-23T02:13:10.827549" elapsed="0.000221"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-23T02:13:10.825733" elapsed="0.002077"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-23T02:13:10.823519" elapsed="0.004390"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-23T02:13:10.827956" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:13:10.828115" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-23T02:13:10.822380" elapsed="0.005761"/>
</kw>
<status status="PASS" start="2026-08-23T02:13:10.822083" elapsed="0.006091"/>
</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-08-23T02:13:10.828345" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:10.828200" elapsed="0.000201"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:10.822063" elapsed="0.006359"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:13:10.829154" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/example-action:interfaces/interface=eth1/reset</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-08-23T02:13:10.828561" elapsed="0.000622"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T02:13:10.829233" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/dataorigaction.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/dataorigaction.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/dataorigaction/${file_name}.</doc>
<status status="PASS" start="2026-08-23T02:13:10.818488" elapsed="0.010869"/>
</kw>
<msg time="2026-08-23T02:13:10.829410" 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-08-23T02:13:10.805816" elapsed="0.023642"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/dataorigaction.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/dataorigaction.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/dataorigaction/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:10.842531" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/dataorigaction.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/dataorigaction.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/dataorigaction/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:10.855031" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/dataorigaction.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/dataorigaction.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/dataorigaction/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:10.867760" elapsed="0.000083"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<var>${items}</var>
<doc>Returns a list containing given items.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:10.868022" 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-08-23T02:13:10.868196" 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-08-23T02:13:10.868568" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:10.868424" elapsed="0.000200"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:13:10.868407" 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-08-23T02:13:10.868787" 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-08-23T02:13:10.868973" 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-08-23T02:13:10.869138" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T02:13:10.868377" elapsed="0.000814"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T02:13:10.868274" elapsed="0.000944"/>
</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-08-23T02:13:10.869400" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:10.869477" elapsed="0.000033"/>
</return>
<msg time="2026-08-23T02:13:10.869627" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/example-action:interfaces/interface=eth1/reset</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-08-23T02:13:10.801540" elapsed="0.068114"/>
</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-08-23T02:13:10.894447" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/dataorigaction.vanadium/post_data.json</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-08-23T02:13:10.894075" elapsed="0.000400"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T02:13:10.895191" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/dataorigaction.vanadium/post_data.json' 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-08-23T02:13:10.894980" elapsed="0.000276">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/dataorigaction.vanadium/post_data.json' does not exist.</status>
</kw>
<msg time="2026-08-23T02:13:10.895348" 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-08-23T02:13:10.894634" elapsed="0.000739"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:13:10.895932" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/dataorigaction/post_data.json</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-08-23T02:13:10.895531" elapsed="0.000428"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:13:10.896249" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/dataorigaction/post_data.json"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/dataorigaction/post_data.json&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:13:10.896383" level="INFO">${template} = {
   "example-action:input":{
      "delay":600
   }
}

</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:13:10.896117" elapsed="0.000292"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:10.896805" level="INFO">{
   "example-action:input":{
      "delay":600
   }
}

</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:10.896565" 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-08-23T02:13:10.897225" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:10.896939" elapsed="0.000346"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:10.897767" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</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-08-23T02:13:10.897469" elapsed="0.000325"/>
</kw>
<status status="PASS" start="2026-08-23T02:13:10.897310" elapsed="0.000537"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:10.896921" elapsed="0.000949"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:13:10.898634" level="INFO">${final_text} = {
   "example-action:input":{
      "delay":600
   }
}</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-08-23T02:13:10.898016" elapsed="0.000646"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T02:13:10.898713" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/dataorigaction.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/dataorigaction.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/dataorigaction/${file_name}.</doc>
<status status="PASS" start="2026-08-23T02:13:10.893377" elapsed="0.005476"/>
</kw>
<msg time="2026-08-23T02:13:10.898908" 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-08-23T02:13:10.880643" elapsed="0.018313"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/dataorigaction.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/dataorigaction.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/dataorigaction/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:10.911432" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/dataorigaction.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/dataorigaction.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/dataorigaction/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:10.923923" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/dataorigaction.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/dataorigaction.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/dataorigaction/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:10.936325" 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-08-23T02:13:10.936518" 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-08-23T02:13:10.936689" 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-08-23T02:13:10.937064" elapsed="0.000041"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:10.936923" elapsed="0.000220"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:13:10.936907" 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-08-23T02:13:10.937304" 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-08-23T02:13:10.937468" 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-08-23T02:13:10.937630" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T02:13:10.936878" elapsed="0.000805"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T02:13:10.936764" 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-08-23T02:13:10.937863" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:10.937942" elapsed="0.000015"/>
</return>
<msg time="2026-08-23T02:13:10.938055" level="INFO">${data} = {
   "example-action:input":{
      "delay":600
   }
}</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-08-23T02:13:10.879778" elapsed="0.058303"/>
</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-08-23T02:13:10.939323" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/dataorigaction/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-08-23T02:13:10.939090" elapsed="0.000297">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/dataorigaction/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-23T02:13:10.939479" 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-08-23T02:13:10.938734" 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-08-23T02:13:10.939816" elapsed="0.000036"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:10.939574" elapsed="0.000315"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:10.940377" 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-08-23T02:13:10.940084" elapsed="0.000323"/>
</kw>
<status status="PASS" start="2026-08-23T02:13:10.939914" elapsed="0.000564"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:10.939556" elapsed="0.000945"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:13:10.942896" 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-08-23T02:13:10.940653" elapsed="0.002270"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-23T02:13:10.942975" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:13:10.943129" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/dataorigaction/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-23T02:13:10.938412" elapsed="0.004742"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:10.944678" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/example-action:interfaces/interface=eth1/reset</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:10.944428" elapsed="0.000297"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:10.945146" level="INFO">{
   "example-action:input":{
      "delay":600
   }
}</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:10.944889" elapsed="0.000301"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:10.945590" level="INFO">{'Content-Type': 'application/yang-data+json'}</msg>
<arg>${content_type}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:10.945338" elapsed="0.000296"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:10.946039" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:10.945781" elapsed="0.000300"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-08-23T02:13:10.946890" level="INFO">${accumulator} = {'Content-Type': 'application/yang-data+json'}</msg>
<var>${accumulator}</var>
<arg>${first}</arg>
<doc>Returns a copy of the given dictionary.</doc>
<status status="PASS" start="2026-08-23T02:13:10.946683" elapsed="0.000233"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-08-23T02:13:10.947235" 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-08-23T02:13:10.947065" 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-08-23T02:13:10.947404" elapsed="0.000187"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:10.948007" level="INFO">{'Content-Type': 'application/yang-data+json'}</msg>
<arg>${accumulator}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:10.947744" elapsed="0.000307"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-08-23T02:13:10.948093" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:13:10.948247" level="INFO">${headers} = {'Content-Type': 'application/yang-data+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-08-23T02:13:10.946279" 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-08-23T02:13:10.954577" level="INFO">POST Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/example-action:interfaces/interface=eth1/reset 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/example-action:interfaces/interface=eth1/reset 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Type': 'application/yang-data+json', 'Content-Length': '54', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body={
   "example-action:input":{
      "delay":600
   }
} 
 </msg>
<msg time="2026-08-23T02:13:10.954634" level="INFO">POST Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/example-action:interfaces/interface=eth1/reset 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '520'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/example-action:interfaces/interface=eth1/reset&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:13:10.954751" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/example-action:interfaces/interface=eth1/reset</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:13:10.950650" elapsed="0.004488">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/example-action:interfaces/interface=eth1/reset</status>
</kw>
<status status="FAIL" start="2026-08-23T02:13:10.948343" elapsed="0.006880">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/example-action:interfaces/interface=eth1/reset</status>
</branch>
<branch type="ELSE">
<kw name="POST On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:10.955405" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:10.955256" elapsed="0.000216"/>
</branch>
<status status="FAIL" start="2026-08-23T02:13:10.948325" elapsed="0.007201">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/example-action:interfaces/interface=eth1/reset</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:10.955919" elapsed="0.000027"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:10.956057" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:10.956020" elapsed="0.000080"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:13:10.956002" elapsed="0.000120"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:10.956263" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:13:10.956331" elapsed="0.000016"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>content_type=${content_type}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>POST data to given URI, check status code and return response text.
${content_type} and ${accept} are mandatory Python objects with headers to use.
If ${normalize_json}, normalize text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:13:10.943485" elapsed="0.012952">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/example-action:interfaces/interface=eth1/reset</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:10.956522" elapsed="0.000016"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>extension=json</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>content_type=${HEADERS_YANG_RFC8040_JSON}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>endline=${\n}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve URI and data from folder, call Post_To_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-23T02:13:10.790469" elapsed="0.166148">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/example-action:interfaces/interface=eth1/reset</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Json_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=response</arg>
<arg>mapping=${mapping}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected JSON data, should be equal to provided ${response}.
JSON normalization is used, endlines enabled for readability.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:10.956922" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:10.956730" elapsed="0.000275"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:13:10.956713" elapsed="0.000316"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:10.957063" elapsed="0.000014"/>
</return>
<arg>${DIRECTORY_WITH_TEMPLATE_FOLDERS}${/}dataorigaction</arg>
<arg>${mapping}</arg>
<doc>Add arguments sensible for JSON data, return Post_Templated response text.
Optionally, verification against response.json (no iteration) is called.
Only subset of JSON data is verified and returned if JMES path is specified in
file ${folder}/jmespath.expr.
Response status code must be one of values from ${explicit_status_codes} if specified or one of set
created from all positive HTTP status codes together with ${additional_allowed_status_codes}.
RFC8040 defines RESTCONF protocol, for configuring data defined in YANG version 1
or YANG version 1.1, using the datastore concepts defined in NETCONF.</doc>
<status status="FAIL" start="2026-08-23T02:13:10.786071" elapsed="0.171088">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/example-action:interfaces/interface=eth1/reset</status>
</kw>
<doc>Send a sample test data label into the device and check that the request went OK.</doc>
<status status="FAIL" start="2026-08-23T02:13:10.686983" elapsed="0.270331">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/example-action:interfaces/interface=eth1/reset</status>
</test>
<test id="s1-s5-s1-t8" name="Invoke_Yang1.1_Augmentation_Via_Xml_Post" 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-08-23T02:13:10.960737" elapsed="0.000255"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:13:10.960477" elapsed="0.000570"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:13:10.962027" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:10.961917" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:10.961898" elapsed="0.000196"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:13:10.967347" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:10.967241" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:10.967223" elapsed="0.000192"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:13:10.968406" 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-08-23T02:13:10.968029" elapsed="0.000404"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:13:10.968910" 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-08-23T02:13:10.968587" elapsed="0.000350"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:13:10.969021" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T02:13:10.969179" 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-08-23T02:13:10.967636" elapsed="0.001567"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:13:10.975125" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:10.975017" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:10.974998" 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-08-23T02:13:10.976413" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:10.976306" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:10.976287" elapsed="0.000195"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:13:10.977023" level="INFO">${karaf_connection_index} = 16</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-08-23T02:13:10.976626" elapsed="0.000424"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:13:10.977460" level="INFO">${current_connection_index} = 18</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-08-23T02:13:10.977208" elapsed="0.000277"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:13:11.004043" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:13:10.978053" elapsed="0.026166"/>
</kw>
<msg time="2026-08-23T02:13:11.004388" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:13:11.004434" 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 "n "e "t "c "o "n "f "...</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-08-23T02:13:10.977642" elapsed="0.026830"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:13:11.036382" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D "- "A "C "T "I "O "N ". "C "R "U "D "- "A "C "T "I "O "N ". "I "n "v "o "k "e "_ "Y "a "n "g "1 ". "1 "_ "A "u "g "m "e "n "t "a "t "i "o "n "_ "V "i "a "_ "X "m "l "_ "P "o "s "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-08-23T02:13:11.005069" elapsed="0.031519"/>
</kw>
<msg time="2026-08-23T02:13:11.036761" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:13:11.036808" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D "- "A "C "T "I "O "N ". "C "R "U "D "- "A "C "T "I "O "N ". "I "n "v "o "k ...</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-08-23T02:13:11.004640" elapsed="0.032230"/>
</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-08-23T02:13:11.037184" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:11.036953" elapsed="0.000308"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:11.036932" elapsed="0.000356"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.037812" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D "- "A "C "T "I "O "N ". "C "R "U "D "- "A "C "T "I "O "N ". "I "n "v "o "k "e "_ "Y "a "n "g "1 ". "1 "_ "A "u "g "m "e "n "t "a "t "i "o "n "_ "V "i "a "_ "X "m "l "_ "P "o "s "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-08-23T02:13:11.037432" elapsed="0.000478"/>
</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-08-23T02:13:11.038188" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:11.037976" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:11.037958" elapsed="0.000331"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:13:11.038325" elapsed="0.000031"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-23T02:13:11.041347" elapsed="0.000150"/>
</kw>
<msg time="2026-08-23T02:13:11.041567" 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-08-23T02:13:11.040708" elapsed="0.000960"/>
</kw>
<kw name="Open 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-08-23T02:13:11.042606" elapsed="0.000037"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:11.043624" elapsed="0.000038"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:13:11.039218" elapsed="0.004525"/>
</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-08-23T02:13:11.038601" elapsed="0.005280"/>
</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-08-23T02:13:10.976004" elapsed="0.068021"/>
</kw>
<msg time="2026-08-23T02:13:11.044120" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:13:11.044164" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D "- "A "C "T "I "O "N ". "C "R "U "D "- "A "C "T "I "O "N ". "I "n "v "o "k ...</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-08-23T02:13:10.975342" elapsed="0.068860"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:13:11.044385" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:13:11.044278" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:11.044259" elapsed="0.000235"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 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-08-23T02:13:11.045123" 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-08-23T02:13:11.045460" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:13:11.045532" 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-08-23T02:13:10.974663" elapsed="0.070978"/>
</kw>
<msg time="2026-08-23T02:13:11.045736" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:13:11.045779" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D "- "A "C "T "I "O "N ". "C "R "U "D "- "A "C "T "I "O "N ". "I "n "v "o "k ...</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-08-23T02:13:10.969563" elapsed="0.076254"/>
</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-08-23T02:13:11.046159" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:11.045910" elapsed="0.000304"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:11.045892" elapsed="0.000346"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:13:10.969424" elapsed="0.076837"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:13:10.969255" elapsed="0.077037"/>
</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-08-23T02:13:10.966879" elapsed="0.079469"/>
</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-08-23T02:13:10.961614" elapsed="0.084788"/>
</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-08-23T02:13:10.961196" elapsed="0.085252"/>
</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-08-23T02:13:10.958315" elapsed="0.088190"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.047123" level="INFO">${mapping} = {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping}</var>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-23T02:13:11.046669" elapsed="0.000480"/>
</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-08-23T02:13:11.081465" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/augment.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:11.081090" elapsed="0.000404"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T02:13:11.082263" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/augment.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-23T02:13:11.082000" elapsed="0.000344">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/augment.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-23T02:13:11.082472" 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-08-23T02:13:11.081654" elapsed="0.000849"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.083098" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/augment/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-08-23T02:13:11.082689" elapsed="0.000436"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:13:11.083421" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/augment/location.uri"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/augment/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:13:11.083688" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount/main:cont/augment-main-a:cont1/reset
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:13:11.083285" elapsed="0.000431"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.084135" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount/main:cont/augment-main-a:cont1/reset
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:11.083887" 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-08-23T02:13:11.085149" level="INFO">mapping: {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:11.084891" elapsed="0.000303"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.085607" 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-08-23T02:13:11.085348" elapsed="0.000284"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.086293" level="INFO">${value} = netconf-test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:13:11.085997" elapsed="0.000322"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:13:11.087079" level="INFO">${encoded} = netconf-test-device</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-08-23T02:13:11.086817" elapsed="0.000288"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:13:11.087157" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:13:11.087308" level="INFO">${encoded_value} = netconf-test-device</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-08-23T02:13:11.086503" elapsed="0.000829"/>
</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-08-23T02:13:11.087479" elapsed="0.000233"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:13:11.085864" elapsed="0.001888"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.088329" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:13:11.088019" elapsed="0.000335"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:13:11.089369" level="INFO">${encoded} = /rests</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-08-23T02:13:11.089132" elapsed="0.000263"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:13:11.089445" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:13:11.089596" level="INFO">${encoded_value} = /rests</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-08-23T02:13:11.088539" elapsed="0.001081"/>
</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-08-23T02:13:11.089768" elapsed="0.000244"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-23T02:13:11.087888" elapsed="0.002165"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-23T02:13:11.085682" elapsed="0.004405"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-23T02:13:11.090129" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:13:11.090284" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-23T02:13:11.084550" elapsed="0.005760"/>
</kw>
<status status="PASS" start="2026-08-23T02:13:11.084261" elapsed="0.006083"/>
</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-08-23T02:13:11.090522" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:11.090376" elapsed="0.000200"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:11.084242" elapsed="0.006354"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.091332" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/main:cont/augment-main-a:cont1/reset</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-08-23T02:13:11.090736" elapsed="0.000624"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T02:13:11.091409" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/augment.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/augment.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/augment/${file_name}.</doc>
<status status="PASS" start="2026-08-23T02:13:11.080462" elapsed="0.011075"/>
</kw>
<msg time="2026-08-23T02:13:11.091590" 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-08-23T02:13:11.067511" elapsed="0.024127"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/augment.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/augment.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/augment/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:11.104226" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/augment.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/augment.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/augment/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:11.116599" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/augment.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/augment.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/augment/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:11.128995" 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-08-23T02:13:11.129186" 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-08-23T02:13:11.129356" 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-08-23T02:13:11.129714" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:11.129574" elapsed="0.000196"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:13:11.129559" 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-08-23T02:13:11.129945" 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-08-23T02:13:11.130112" 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-08-23T02:13:11.130274" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T02:13:11.129532" elapsed="0.000795"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T02:13:11.129432" 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-08-23T02:13:11.130496" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:11.130572" elapsed="0.000015"/>
</return>
<msg time="2026-08-23T02:13:11.130690" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/main:cont/augment-main-a:cont1/reset</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-08-23T02:13:11.063235" elapsed="0.067482"/>
</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-08-23T02:13:11.155266" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/augment.vanadium/post_data.xml</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:11.154893" elapsed="0.000401"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T02:13:11.156018" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/augment.vanadium/post_data.xml' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-23T02:13:11.155779" elapsed="0.000302">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/augment.vanadium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-08-23T02:13:11.156175" 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-08-23T02:13:11.155452" elapsed="0.000782"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.156782" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/augment/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-08-23T02:13:11.156399" elapsed="0.000411"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:13:11.157118" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/augment/post_data.xml"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/augment/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:13:11.157257" level="INFO">${template} = &lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;input xmlns="ns:augment:main:a"&gt;
  &lt;delay&gt;600&lt;/delay&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-08-23T02:13:11.156984" elapsed="0.000300"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.157687" level="INFO">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;input xmlns="ns:augment:main:a"&gt;
  &lt;delay&gt;600&lt;/delay&gt;
&lt;/input&gt;

</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:11.157443" 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-08-23T02:13:11.158103" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:11.157799" elapsed="0.000363"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.158619" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</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-08-23T02:13:11.158329" elapsed="0.000316"/>
</kw>
<status status="PASS" start="2026-08-23T02:13:11.158187" elapsed="0.000494"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:11.157781" elapsed="0.000922"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.159295" level="INFO">${final_text} = &lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;input xmlns="ns:augment:main:a"&gt;
  &lt;delay&gt;600&lt;/delay&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-08-23T02:13:11.158861" elapsed="0.000463"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T02:13:11.159374" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/augment.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/augment.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/augment/${file_name}.</doc>
<status status="PASS" start="2026-08-23T02:13:11.154270" elapsed="0.005229"/>
</kw>
<msg time="2026-08-23T02:13:11.159552" 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-08-23T02:13:11.141639" elapsed="0.017960"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/augment.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/augment.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/augment/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:11.172252" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/augment.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/augment.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/augment/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:11.184932" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/augment.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/augment.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/augment/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:11.197355" 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-08-23T02:13:11.197546" 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-08-23T02:13:11.197716" 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-08-23T02:13:11.198128" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:11.197985" elapsed="0.000199"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:13:11.197970" 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-08-23T02:13:11.198346" 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-08-23T02:13:11.198509" 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-08-23T02:13:11.198670" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T02:13:11.197942" elapsed="0.000780"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T02:13:11.197825" 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-08-23T02:13:11.198904" elapsed="0.000022"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:11.198982" elapsed="0.000015"/>
</return>
<msg time="2026-08-23T02:13:11.199100" level="INFO">${data} = &lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;input xmlns="ns:augment:main:a"&gt;
  &lt;delay&gt;600&lt;/delay&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-08-23T02:13:11.140785" elapsed="0.058344"/>
</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-08-23T02:13:11.200409" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/augment/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-08-23T02:13:11.200159" elapsed="0.000314">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/augment/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-23T02:13:11.200566" 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-08-23T02:13:11.199803" 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-08-23T02:13:11.200916" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:11.200660" elapsed="0.000314"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.201458" 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-08-23T02:13:11.201164" elapsed="0.000322"/>
</kw>
<status status="PASS" start="2026-08-23T02:13:11.200998" elapsed="0.000523"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:11.200642" elapsed="0.000901"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.203910" 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-08-23T02:13:11.201690" elapsed="0.002246"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-23T02:13:11.203989" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:13:11.204141" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/augment/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-23T02:13:11.199457" elapsed="0.004709"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.205730" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/main:cont/augment-main-a:cont1/reset</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:11.205423" elapsed="0.000353"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.206180" level="INFO">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;input xmlns="ns:augment:main:a"&gt;
  &lt;delay&gt;600&lt;/delay&gt;
&lt;/input&gt;</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:11.205942" elapsed="0.000283"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.206611" 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-08-23T02:13:11.206370" elapsed="0.000283"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.207052" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:11.206798" elapsed="0.000297"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-08-23T02:13:11.207917" 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-08-23T02:13:11.207705" elapsed="0.000239"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-08-23T02:13:11.208308" 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-08-23T02:13:11.208135" 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-08-23T02:13:11.208479" elapsed="0.000198"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.209094" 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-08-23T02:13:11.208830" elapsed="0.000308"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-08-23T02:13:11.209180" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:13:11.209334" 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-08-23T02:13:11.207292" 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-08-23T02:13:11.215400" level="INFO">POST Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/main:cont/augment-main-a:cont1/reset 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/main:cont/augment-main-a:cont1/reset 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Content-Length': '102', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;input xmlns="ns:augment:main:a"&gt;
  &lt;delay&gt;600&lt;/delay&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-08-23T02:13:11.215471" level="INFO">POST Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/main:cont/augment-main-a:cont1/reset 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:13:11.215563" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/main:cont/augment-main-a:cont1/reset</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:13:11.211698" elapsed="0.004254">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/main:cont/augment-main-a:cont1/reset</status>
</kw>
<status status="FAIL" start="2026-08-23T02:13:11.209428" elapsed="0.006609">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/main:cont/augment-main-a:cont1/reset</status>
</branch>
<branch type="ELSE">
<kw name="POST On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:11.216220" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:11.216071" elapsed="0.000217"/>
</branch>
<status status="FAIL" start="2026-08-23T02:13:11.209410" elapsed="0.006901">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/main:cont/augment-main-a:cont1/reset</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:11.216674" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:11.216808" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:11.216772" elapsed="0.000095"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:13:11.216755" elapsed="0.000135"/>
</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-08-23T02:13:11.217031" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:13:11.217098" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>content_type=${content_type}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>POST data to given URI, check status code and return response text.
${content_type} and ${accept} are mandatory Python objects with headers to use.
If ${normalize_json}, normalize text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:13:11.204488" elapsed="0.012713">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/main:cont/augment-main-a:cont1/reset</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:11.217281" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>extension=xml</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>content_type=${HEADERS_XML}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>endline=${\n}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve URI and data from folder, call Post_To_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-23T02:13:11.052065" elapsed="0.165309">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/main:cont/augment-main-a:cont1/reset</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=response</arg>
<arg>mapping=${mapping}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:11.217698" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:11.217520" elapsed="0.000247"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:13:11.217502" elapsed="0.000289"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:11.217825" elapsed="0.000029"/>
</return>
<arg>${DIRECTORY_WITH_TEMPLATE_FOLDERS}${/}augment</arg>
<arg>${mapping}</arg>
<doc>Add arguments sensible for XML data, return Post_Templated response text.
Optionally, verification against response.xml (no iteration) is called.</doc>
<status status="FAIL" start="2026-08-23T02:13:11.047399" elapsed="0.170539">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/main:cont/augment-main-a:cont1/reset</status>
</kw>
<doc>Send a sample test data label into the device and check that the request went OK.</doc>
<status status="FAIL" start="2026-08-23T02:13:10.957686" elapsed="0.260401">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/main:cont/augment-main-a:cont1/reset</status>
</test>
<test id="s1-s5-s1-t9" name="Invoke_Yang1.1_Augmentation_Via_Json_Post" line="92">
<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-08-23T02:13:11.221471" elapsed="0.000213"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:13:11.221211" elapsed="0.000528"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:13:11.222716" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:11.222606" elapsed="0.000156"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:11.222588" elapsed="0.000196"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:13:11.227749" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:11.227642" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:11.227625" elapsed="0.000191"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.228800" 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-08-23T02:13:11.228424" elapsed="0.000403"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.229289" 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-08-23T02:13:11.228997" elapsed="0.000318"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:13:11.229358" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:13:11.229509" 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-08-23T02:13:11.228053" elapsed="0.001485"/>
</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-08-23T02:13:11.235180" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:11.235067" elapsed="0.000161"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:11.235047" 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-08-23T02:13:11.236513" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:11.236398" elapsed="0.000161"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:11.236380" elapsed="0.000201"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:13:11.237100" level="INFO">${karaf_connection_index} = 16</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-08-23T02:13:11.236721" elapsed="0.000406"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:13:11.237537" level="INFO">${current_connection_index} = 18</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-08-23T02:13:11.237287" elapsed="0.000276"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:13:11.266678" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:13:11.238128" elapsed="0.028730"/>
</kw>
<msg time="2026-08-23T02:13:11.267033" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:13:11.267079" 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 "n "e "t "c "o "n "f "...</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-08-23T02:13:11.237717" elapsed="0.029411"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:13:11.291623" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D "- "A "C "T "I "O "N ". "C "R "U "D "- "A "C "T "I "O "N ". "I "n "v "o "k "e "_ "Y "a "n "g "1 ". "1 "_ "A "u "g "m "e "n "t "a "t "i "o "n "_ "V "i "a "_ "J "s "o "n "_ "P "o "s "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-08-23T02:13:11.267681" elapsed="0.024190"/>
</kw>
<msg time="2026-08-23T02:13:11.292045" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:13:11.292090" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D "- "A "C "T "I "O "N ". "C "R "U "D "- "A "C "T "I "O "N ". "I "n "v "o "k ...</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-08-23T02:13:11.267295" elapsed="0.024831"/>
</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-08-23T02:13:11.292418" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:11.292201" elapsed="0.000293"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:11.292181" elapsed="0.000338"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.293058" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D "- "A "C "T "I "O "N ". "C "R "U "D "- "A "C "T "I "O "N ". "I "n "v "o "k "e "_ "Y "a "n "g "1 ". "1 "_ "A "u "g "m "e "n "t "a "t "i "o "n "_ "V "i "a "_ "J "s "o "n "_ "P "o "s "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-08-23T02:13:11.292658" elapsed="0.000475"/>
</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-08-23T02:13:11.293410" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:11.293200" elapsed="0.000283"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:11.293182" elapsed="0.000327"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:13:11.293542" elapsed="0.000031"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-23T02:13:11.296663" elapsed="0.000146"/>
</kw>
<msg time="2026-08-23T02:13:11.296902" 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-08-23T02:13:11.295962" elapsed="0.001042"/>
</kw>
<kw name="Open 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-08-23T02:13:11.297937" elapsed="0.000037"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:11.298882" elapsed="0.000036"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:13:11.294424" elapsed="0.004666"/>
</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-08-23T02:13:11.293807" elapsed="0.005402"/>
</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-08-23T02:13:11.236099" elapsed="0.063209"/>
</kw>
<msg time="2026-08-23T02:13:11.299399" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:13:11.299443" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D "- "A "C "T "I "O "N ". "C "R "U "D "- "A "C "T "I "O "N ". "I "n "v "o "k ...</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-08-23T02:13:11.235429" elapsed="0.064051"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:13:11.299661" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-08-23T02:13:11.299554" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:11.299536" 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-08-23T02:13:11.300346" 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-08-23T02:13:11.300677" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:13:11.300748" 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-08-23T02:13:11.234705" elapsed="0.066165"/>
</kw>
<msg time="2026-08-23T02:13:11.300965" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:13:11.301008" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D "- "A "C "T "I "O "N ". "C "R "U "D "- "A "C "T "I "O "N ". "I "n "v "o "k ...</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-08-23T02:13:11.229916" elapsed="0.071128"/>
</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-08-23T02:13:11.301359" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:11.301116" elapsed="0.000296"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:11.301099" elapsed="0.000336"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:13:11.229758" elapsed="0.071700"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:13:11.229593" elapsed="0.071896"/>
</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-08-23T02:13:11.227268" elapsed="0.074275"/>
</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-08-23T02:13:11.222321" elapsed="0.079325"/>
</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-08-23T02:13:11.221901" elapsed="0.079791"/>
</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-08-23T02:13:11.219065" elapsed="0.082680"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.302357" level="INFO">${mapping} = {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping}</var>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-23T02:13:11.301933" elapsed="0.000451"/>
</kw>
<kw name="Post_As_Json_Rfc8040_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-08-23T02:13:11.347218" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/augment.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:11.346845" elapsed="0.000401"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T02:13:11.347986" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/augment.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-23T02:13:11.347730" elapsed="0.000327">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/augment.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-23T02:13:11.348151" 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-08-23T02:13:11.347404" elapsed="0.000771"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.348715" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/augment/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-08-23T02:13:11.348334" elapsed="0.000408"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:13:11.349047" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/augment/location.uri"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/augment/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:13:11.349188" level="INFO">${template} = $RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount/main:cont/augment-main-a:cont1/reset
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:13:11.348911" elapsed="0.000303"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.349607" level="INFO">$RESTCONF_ROOT/data/network-topology:network-topology/topology=topology-netconf/node=$DEVICE_NAME/yang-ext:mount/main:cont/augment-main-a:cont1/reset
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:11.349366" 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-08-23T02:13:11.350608" level="INFO">mapping: {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:11.350353" elapsed="0.000314"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.351106" 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-08-23T02:13:11.350821" elapsed="0.000311"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.351775" level="INFO">${value} = netconf-test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:13:11.351480" elapsed="0.000321"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:13:11.352575" level="INFO">${encoded} = netconf-test-device</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-08-23T02:13:11.352331" elapsed="0.000270"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:13:11.352652" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:13:11.352802" level="INFO">${encoded_value} = netconf-test-device</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-08-23T02:13:11.352017" elapsed="0.000809"/>
</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-08-23T02:13:11.353004" elapsed="0.000234"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:13:11.351350" elapsed="0.001928"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.355716" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:13:11.353520" elapsed="0.002222"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:13:11.356500" level="INFO">${encoded} = /rests</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-08-23T02:13:11.356261" elapsed="0.000265"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:13:11.356577" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:13:11.356762" level="INFO">${encoded_value} = /rests</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-08-23T02:13:11.355945" elapsed="0.000842"/>
</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-08-23T02:13:11.356960" elapsed="0.000224"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-23T02:13:11.353392" elapsed="0.003833"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-23T02:13:11.351182" elapsed="0.006078"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-23T02:13:11.357302" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:13:11.357459" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-23T02:13:11.350021" elapsed="0.007462"/>
</kw>
<status status="PASS" start="2026-08-23T02:13:11.349716" elapsed="0.007800"/>
</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-08-23T02:13:11.357685" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:11.357541" elapsed="0.000200"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:11.349698" elapsed="0.008063"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.358481" level="INFO">${final_text} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/main:cont/augment-main-a:cont1/reset</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-08-23T02:13:11.357915" elapsed="0.000594"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T02:13:11.358558" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/augment.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/augment.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/augment/${file_name}.</doc>
<status status="PASS" start="2026-08-23T02:13:11.346206" elapsed="0.012490"/>
</kw>
<msg time="2026-08-23T02:13:11.358749" 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-08-23T02:13:11.333600" elapsed="0.025196"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/augment.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/augment.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/augment/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:11.371333" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/augment.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/augment.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/augment/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:11.384081" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/augment.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/augment.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/augment/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:11.396668" 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-08-23T02:13:11.396873" 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-08-23T02:13:11.397044" 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-08-23T02:13:11.397398" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:11.397260" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:13:11.397246" 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-08-23T02:13:11.397610" 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-08-23T02:13:11.397772" 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-08-23T02:13:11.398059" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T02:13:11.397219" elapsed="0.000894"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T02:13:11.397119" elapsed="0.001019"/>
</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-08-23T02:13:11.398277" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:11.398369" elapsed="0.000016"/>
</return>
<msg time="2026-08-23T02:13:11.398488" level="INFO">${uri} = /rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/main:cont/augment-main-a:cont1/reset</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-08-23T02:13:11.329379" elapsed="0.069135"/>
</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-08-23T02:13:11.423140" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/augment.vanadium/post_data.json</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-08-23T02:13:11.422749" elapsed="0.000419"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T02:13:11.423871" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/augment.vanadium/post_data.json' 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-08-23T02:13:11.423649" elapsed="0.000287">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/augment.vanadium/post_data.json' does not exist.</status>
</kw>
<msg time="2026-08-23T02:13:11.424029" 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-08-23T02:13:11.423324" elapsed="0.000728"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.424590" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/augment/post_data.json</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-08-23T02:13:11.424211" elapsed="0.000406"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:13:11.424919" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/augment/post_data.json"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/augment/post_data.json&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:13:11.425056" level="INFO">${template} = {
   "ns:augment:main:a:input":{
      "delay":600
   }
}
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:13:11.424771" elapsed="0.000310"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.425479" level="INFO">{
   "ns:augment:main:a:input":{
      "delay":600
   }
}
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:11.425231" 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-08-23T02:13:11.425887" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:11.425588" elapsed="0.000359"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.426435" level="INFO">${mapping_to_use} = {'DEVICE_NAME': 'netconf-test-device', 'RESTCONF_ROOT': '/rests'}</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-08-23T02:13:11.426117" elapsed="0.000344"/>
</kw>
<status status="PASS" start="2026-08-23T02:13:11.425973" elapsed="0.000523"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:11.425569" elapsed="0.000949"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.427303" level="INFO">${final_text} = {
   "ns:augment:main:a:input":{
      "delay":600
   }
}</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-08-23T02:13:11.426661" elapsed="0.000670"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T02:13:11.427381" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/augment.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/augment.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/augment/${file_name}.</doc>
<status status="PASS" start="2026-08-23T02:13:11.422119" elapsed="0.005387"/>
</kw>
<msg time="2026-08-23T02:13:11.427558" 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-08-23T02:13:11.409456" elapsed="0.018149"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/augment.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/augment.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/augment/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:11.440111" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/augment.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/augment.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/augment/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:11.452570" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/augment.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/augment.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/augment/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:11.465053" 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-08-23T02:13:11.465247" 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-08-23T02:13:11.465418" 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-08-23T02:13:11.465780" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:11.465640" elapsed="0.000235"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:13:11.465625" elapsed="0.000280"/>
</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-08-23T02:13:11.466057" 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-08-23T02:13:11.466221" 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-08-23T02:13:11.466382" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T02:13:11.465595" elapsed="0.000840"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T02:13:11.465496" elapsed="0.000965"/>
</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-08-23T02:13:11.466601" elapsed="0.000019"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:11.466676" elapsed="0.000015"/>
</return>
<msg time="2026-08-23T02:13:11.466792" level="INFO">${data} = {
   "ns:augment:main:a:input":{
      "delay":600
   }
}</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-08-23T02:13:11.408600" elapsed="0.058218"/>
</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-08-23T02:13:11.468098" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/augment/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-08-23T02:13:11.467851" elapsed="0.000313">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/CRUD/augment/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-23T02:13:11.468255" 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-08-23T02:13:11.467491" 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-08-23T02:13:11.468592" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:11.468348" elapsed="0.000338"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.469196" 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-08-23T02:13:11.468899" elapsed="0.000323"/>
</kw>
<status status="PASS" start="2026-08-23T02:13:11.468712" elapsed="0.000545"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:11.468330" elapsed="0.000949"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.471629" 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-08-23T02:13:11.469426" elapsed="0.002229"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-23T02:13:11.471706" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:13:11.471875" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/CRUD-ACTION/../../../variables/netconf/CRUD/augment/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-23T02:13:11.467162" elapsed="0.004739"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.473419" level="INFO">/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/main:cont/augment-main-a:cont1/reset</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:11.473170" elapsed="0.000295"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.473865" level="INFO">{
   "ns:augment:main:a:input":{
      "delay":600
   }
}</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:11.473612" elapsed="0.000322"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.474327" level="INFO">{'Content-Type': 'application/yang-data+json'}</msg>
<arg>${content_type}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:11.474082" elapsed="0.000289"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.474753" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:11.474516" elapsed="0.000280"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-08-23T02:13:11.475612" level="INFO">${accumulator} = {'Content-Type': 'application/yang-data+json'}</msg>
<var>${accumulator}</var>
<arg>${first}</arg>
<doc>Returns a copy of the given dictionary.</doc>
<status status="PASS" start="2026-08-23T02:13:11.475414" elapsed="0.000224"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-08-23T02:13:11.475977" 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-08-23T02:13:11.475788" 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-08-23T02:13:11.476148" elapsed="0.000199"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.476745" level="INFO">{'Content-Type': 'application/yang-data+json'}</msg>
<arg>${accumulator}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:11.476500" elapsed="0.000289"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-08-23T02:13:11.476830" elapsed="0.000045"/>
</return>
<msg time="2026-08-23T02:13:11.477004" level="INFO">${headers} = {'Content-Type': 'application/yang-data+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-08-23T02:13:11.475011" 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-08-23T02:13:11.483520" level="INFO">POST Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/main:cont/augment-main-a:cont1/reset 
 path_url=/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/main:cont/augment-main-a:cont1/reset 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Type': 'application/yang-data+json', 'Content-Length': '57', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body={
   "ns:augment:main:a:input":{
      "delay":600
   }
} 
 </msg>
<msg time="2026-08-23T02:13:11.483576" level="INFO">POST Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/main:cont/augment-main-a:cont1/reset 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '510'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/main:cont/augment-main-a:cont1/reset&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:13:11.483698" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/main:cont/augment-main-a:cont1/reset</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:13:11.479419" elapsed="0.004686">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/main:cont/augment-main-a:cont1/reset</status>
</kw>
<status status="FAIL" start="2026-08-23T02:13:11.477098" elapsed="0.007092">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/main:cont/augment-main-a:cont1/reset</status>
</branch>
<branch type="ELSE">
<kw name="POST On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:11.484376" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:11.484225" elapsed="0.000262"/>
</branch>
<status status="FAIL" start="2026-08-23T02:13:11.477080" elapsed="0.007431">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/main:cont/augment-main-a:cont1/reset</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:11.484911" elapsed="0.000027"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:11.485049" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:11.485011" elapsed="0.000080"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:13:11.484994" elapsed="0.000118"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:11.485253" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:13:11.485320" elapsed="0.000016"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>content_type=${content_type}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>POST data to given URI, check status code and return response text.
${content_type} and ${accept} are mandatory Python objects with headers to use.
If ${normalize_json}, normalize text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:13:11.472225" elapsed="0.013201">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/main:cont/augment-main-a:cont1/reset</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:11.485512" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>extension=json</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>content_type=${HEADERS_YANG_RFC8040_JSON}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>endline=${\n}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve URI and data from folder, call Post_To_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-23T02:13:11.318375" elapsed="0.167232">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/main:cont/augment-main-a:cont1/reset</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Json_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=response</arg>
<arg>mapping=${mapping}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected JSON data, should be equal to provided ${response}.
JSON normalization is used, endlines enabled for readability.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:11.485939" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:11.485720" elapsed="0.000287"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:13:11.485703" elapsed="0.000328"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:11.486063" elapsed="0.000014"/>
</return>
<arg>${DIRECTORY_WITH_TEMPLATE_FOLDERS}${/}augment</arg>
<arg>${mapping}</arg>
<doc>Add arguments sensible for JSON data, return Post_Templated response text.
Optionally, verification against response.json (no iteration) is called.
Only subset of JSON data is verified and returned if JMES path is specified in
file ${folder}/jmespath.expr.
Response status code must be one of values from ${explicit_status_codes} if specified or one of set
created from all positive HTTP status codes together with ${additional_allowed_status_codes}.
RFC8040 defines RESTCONF protocol, for configuring data defined in YANG version 1
or YANG version 1.1, using the datastore concepts defined in NETCONF.</doc>
<status status="FAIL" start="2026-08-23T02:13:11.314092" elapsed="0.172066">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/main:cont/augment-main-a:cont1/reset</status>
</kw>
<doc>Send a sample test data label into the device and check that the request went OK.</doc>
<status status="FAIL" start="2026-08-23T02:13:11.218455" elapsed="0.267864">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology/topology=topology-netconf/node=netconf-test-device/yang-ext:mount/main:cont/augment-main-a:cont1/reset</status>
</test>
<test id="s1-s5-s1-t10" name="Deconfigure_Device_From_Netconf" 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-08-23T02:13:11.489784" elapsed="0.000258"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:13:11.489525" elapsed="0.000571"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:13:11.491099" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:11.490986" elapsed="0.000159"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:11.490967" 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-08-23T02:13:11.496216" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:11.496109" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:11.496091" elapsed="0.000193"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.497287" 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-08-23T02:13:11.496903" elapsed="0.000410"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.497849" 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-08-23T02:13:11.497517" elapsed="0.000360"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:13:11.497922" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T02:13:11.498094" 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-08-23T02:13:11.496508" elapsed="0.001611"/>
</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-08-23T02:13:11.504015" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:11.503904" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:11.503885" 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-08-23T02:13:11.505349" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:11.505241" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:11.505222" elapsed="0.000195"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:13:11.505972" level="INFO">${karaf_connection_index} = 16</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-08-23T02:13:11.505558" elapsed="0.000441"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:13:11.506409" level="INFO">${current_connection_index} = 18</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-08-23T02:13:11.506157" elapsed="0.000278"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:13:11.540300" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:13:11.507003" elapsed="0.033461"/>
</kw>
<msg time="2026-08-23T02:13:11.540636" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:13:11.540682" 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 "n "e "t "c "o "n "f "...</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-08-23T02:13:11.506592" elapsed="0.034126"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:13:11.572619" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D "- "A "C "T "I "O "N ". "C "R "U "D "- "A "C "T "I "O "N ". "D "e "c "o "n "f "i "g "u "r "e "_ "D "e "v "i "c "e "_ "F "r "o "m "_ "N "e "t "c "o "n "f "[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-08-23T02:13:11.541306" elapsed="0.031492"/>
</kw>
<msg time="2026-08-23T02:13:11.572988" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:13:11.573033" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D "- "A "C "T "I "O "N ". "C "R "U "D "- "A "C "T "I "O "N ". "D "e "c "o "n ...</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-08-23T02:13:11.540910" elapsed="0.032158"/>
</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-08-23T02:13:11.573380" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:11.573145" elapsed="0.000311"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:11.573125" elapsed="0.000356"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.574024" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D "- "A "C "T "I "O "N ". "C "R "U "D "- "A "C "T "I "O "N ". "D "e "c "o "n "f "i "g "u "r "e "_ "D "e "v "i "c "e "_ "F "r "o "m "_ "N "e "t "c "o "n "f "[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-08-23T02:13:11.573621" elapsed="0.000476"/>
</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-08-23T02:13:11.574372" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:11.574163" elapsed="0.000288"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:11.574145" elapsed="0.000331"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:13:11.574509" 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-08-23T02:13:11.577556" elapsed="0.000147"/>
</kw>
<msg time="2026-08-23T02:13:11.577774" 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-08-23T02:13:11.576868" elapsed="0.001036"/>
</kw>
<kw name="Open 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-08-23T02:13:11.578810" elapsed="0.000052"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:11.579757" elapsed="0.000036"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:13:11.575382" elapsed="0.004541"/>
</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-08-23T02:13:11.574781" elapsed="0.005261"/>
</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-08-23T02:13:11.504936" elapsed="0.075205"/>
</kw>
<msg time="2026-08-23T02:13:11.580233" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:13:11.580277" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D "- "A "C "T "I "O "N ". "C "R "U "D "- "A "C "T "I "O "N ". "D "e "c "o "n ...</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-08-23T02:13:11.504235" elapsed="0.076080"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:13:11.580498" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-23T02:13:11.580391" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:11.580372" elapsed="0.000210"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:11.581015" 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-08-23T02:13:11.581364" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:13:11.581437" 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-08-23T02:13:11.503550" elapsed="0.077996"/>
</kw>
<msg time="2026-08-23T02:13:11.581639" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:13:11.581683" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D "- "A "C "T "I "O "N ". "C "R "U "D "- "A "C "T "I "O "N ". "D "e "c "o "n ...</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-08-23T02:13:11.498494" elapsed="0.083225"/>
</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-08-23T02:13:11.582067" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:11.581793" elapsed="0.000328"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:11.581775" elapsed="0.000369"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:13:11.498351" elapsed="0.083816"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:13:11.498174" elapsed="0.084024"/>
</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-08-23T02:13:11.495732" elapsed="0.086520"/>
</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-08-23T02:13:11.490675" elapsed="0.091652"/>
</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-08-23T02:13:11.490245" elapsed="0.092127"/>
</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-08-23T02:13:11.487340" elapsed="0.095083"/>
</kw>
<kw name="Configure_Device_In_Netconf" owner="NetconfKeywords">
<kw name="Set_Variable_If_At_Least_Scandium" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set_Variable_If_At_Least" owner="CompareStream">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Set Variable If" owner="BuiltIn">
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T02:13:11.602462" elapsed="0.000436"/>
</kw>
<msg time="2026-08-23T02:13:11.602951" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>BuiltIn.Set_Variable_If</arg>
<arg>${Stream_dict}[${ODL_STREAM}] &gt;= ${Stream_dict}[${lower_bound}]</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:13:11.602099" elapsed="0.000900"/>
</kw>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Compare ${lower_bound} to vanadium and return scandium if vanadium is at least ${lower_bound},
return calcium otherwise.</doc>
<status status="PASS" start="2026-08-23T02:13:11.601690" elapsed="0.001383"/>
</kw>
<msg time="2026-08-23T02:13:11.603115" level="INFO">Returning from the enclosing user keyword.</msg>
<arg>Set_Variable_If_At_Least</arg>
<arg>scandium</arg>
<arg>${value_if_true}</arg>
<arg>${value_if_false}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:13:11.592946" elapsed="0.010211"/>
</kw>
<msg time="2026-08-23T02:13:11.603259" level="INFO">${version} = scandium</msg>
<var>${version}</var>
<arg>scandium</arg>
<arg>calcium</arg>
<doc>Compare scandium to vanadium and return ${value_if_true} if vanadium is at least scandium, return ${value_if_false} otherwise.</doc>
<status status="PASS" start="2026-08-23T02:13:11.592610" elapsed="0.010673"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.604181" level="INFO">${mapping} = {'DEVICE_IP': '10.30.170.120', 'DEVICE_NAME': 'netconf-test-device', 'DEVICE_PORT': '17830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'topsecret', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/t...</msg>
<var>${mapping}</var>
<arg>DEVICE_IP=${device_address}</arg>
<arg>DEVICE_NAME=${device_name}</arg>
<arg>DEVICE_PORT=${device_port}</arg>
<arg>DEVICE_USER=${device_user}</arg>
<arg>DEVICE_PASSWORD=${device_password}</arg>
<arg>DEVICE_KEY=${device_key}</arg>
<arg>SCHEMA_DIRECTORY=${schema_directory}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-23T02:13:11.603446" elapsed="0.000764"/>
</kw>
<if>
<branch type="IF" condition="'${http_method}'=='post'">
<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-08-23T02:13:11.636808" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:11.636435" elapsed="0.000416"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T02:13:11.637615" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/rpc-delete-device.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-23T02:13:11.637371" elapsed="0.000316">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/rpc-delete-device.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-23T02:13:11.637780" 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-08-23T02:13:11.637036" elapsed="0.000769"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.638370" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device/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-08-23T02:13:11.637985" elapsed="0.000412"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:13:11.638691" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/rpc-delete-device/location.uri"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/rpc-delete-device/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:13:11.638866" level="INFO">${template} = $RESTCONF_ROOT/operations/netconf-node-topology:delete-device
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:13:11.638556" elapsed="0.000337"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.639292" level="INFO">$RESTCONF_ROOT/operations/netconf-node-topology:delete-device
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:11.639050" 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-08-23T02:13:11.640466" level="INFO">mapping: {'DEVICE_IP': '10.30.170.120', 'DEVICE_NAME': 'netconf-test-device', 'DEVICE_PORT': '17830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'topsecret', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/tmp/schema', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:11.640186" elapsed="0.000327"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.640954" 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-08-23T02:13:11.640673" elapsed="0.000318"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.641886" level="INFO">${value} = 10.30.170.120</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:13:11.641355" elapsed="0.000558"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:13:11.643051" level="INFO">${encoded} = 10.30.170.120</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-08-23T02:13:11.642539" elapsed="0.000555"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:13:11.643211" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T02:13:11.643442" level="INFO">${encoded_value} = 10.30.170.120</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-08-23T02:13:11.642099" elapsed="0.001369"/>
</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-08-23T02:13:11.643625" elapsed="0.000511"/>
</kw>
<var name="${key}">DEVICE_IP</var>
<var name="${value}">10.30.170.120</var>
<status status="PASS" start="2026-08-23T02:13:11.641223" elapsed="0.002955"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.644998" level="INFO">${value} = netconf-test-device</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:13:11.644423" elapsed="0.000603"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:13:11.646166" level="INFO">${encoded} = netconf-test-device</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-08-23T02:13:11.645652" elapsed="0.000555"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:13:11.646321" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T02:13:11.646587" level="INFO">${encoded_value} = netconf-test-device</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-08-23T02:13:11.645210" elapsed="0.001407"/>
</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-08-23T02:13:11.646766" elapsed="0.000506"/>
</kw>
<var name="${key}">DEVICE_NAME</var>
<var name="${value}">netconf-test-device</var>
<status status="PASS" start="2026-08-23T02:13:11.644293" elapsed="0.003020"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.648189" level="INFO">${value} = 17830</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:13:11.647556" elapsed="0.000660"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:13:11.649450" level="INFO">${encoded} = 17830</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-08-23T02:13:11.648891" elapsed="0.000600"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:13:11.649606" elapsed="0.000032"/>
</return>
<msg time="2026-08-23T02:13:11.649882" level="INFO">${encoded_value} = 17830</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-08-23T02:13:11.648436" elapsed="0.001474"/>
</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-08-23T02:13:11.650063" elapsed="0.000485"/>
</kw>
<var name="${key}">DEVICE_PORT</var>
<var name="${value}">17830</var>
<status status="PASS" start="2026-08-23T02:13:11.647427" elapsed="0.003163"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.651361" level="INFO">${value} = admin</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:13:11.650851" elapsed="0.000537"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:13:11.652575" level="INFO">${encoded} = admin</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-08-23T02:13:11.652087" elapsed="0.000528"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:13:11.652731" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T02:13:11.653010" level="INFO">${encoded_value} = admin</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-08-23T02:13:11.651571" elapsed="0.001465"/>
</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-08-23T02:13:11.653184" elapsed="0.000475"/>
</kw>
<var name="${key}">DEVICE_USER</var>
<var name="${value}">admin</var>
<status status="PASS" start="2026-08-23T02:13:11.650704" elapsed="0.002997"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.654475" level="INFO">${value} = topsecret</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:13:11.653969" elapsed="0.000533"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:13:11.655638" level="INFO">${encoded} = topsecret</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-08-23T02:13:11.655160" elapsed="0.000518"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:13:11.655795" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T02:13:11.656049" level="INFO">${encoded_value} = topsecret</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-08-23T02:13:11.654684" elapsed="0.001391"/>
</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-08-23T02:13:11.656224" elapsed="0.000476"/>
</kw>
<var name="${key}">DEVICE_PASSWORD</var>
<var name="${value}">topsecret</var>
<status status="PASS" start="2026-08-23T02:13:11.653814" elapsed="0.002928"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.657770" level="INFO">${value} = device-key</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:13:11.657077" elapsed="0.000719"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:13:11.659009" level="INFO">${encoded} = device-key</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-08-23T02:13:11.658489" elapsed="0.000561"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:13:11.659165" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T02:13:11.659392" level="INFO">${encoded_value} = device-key</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-08-23T02:13:11.658050" elapsed="0.001367"/>
</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-08-23T02:13:11.659570" elapsed="0.000498"/>
</kw>
<var name="${key}">DEVICE_KEY</var>
<var name="${value}">device-key</var>
<status status="PASS" start="2026-08-23T02:13:11.656945" elapsed="0.003166"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.660906" level="INFO">${value} = /tmp/schema</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:13:11.660354" elapsed="0.000580"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:13:11.662055" level="INFO">${encoded} = /tmp/schema</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-08-23T02:13:11.661552" elapsed="0.000544"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:13:11.662210" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T02:13:11.662444" level="INFO">${encoded_value} = /tmp/schema</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-08-23T02:13:11.661116" elapsed="0.001353"/>
</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-08-23T02:13:11.662616" elapsed="0.000556"/>
</kw>
<var name="${key}">SCHEMA_DIRECTORY</var>
<var name="${value}">/tmp/schema</var>
<status status="PASS" start="2026-08-23T02:13:11.660225" elapsed="0.002989"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.664033" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:13:11.663459" elapsed="0.000601"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:13:11.665249" level="INFO">${encoded} = /rests</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-08-23T02:13:11.664719" elapsed="0.000570"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:13:11.665403" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T02:13:11.665630" level="INFO">${encoded_value} = /rests</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-08-23T02:13:11.664281" elapsed="0.001374"/>
</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-08-23T02:13:11.665803" elapsed="0.000498"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-23T02:13:11.663329" elapsed="0.003014"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-23T02:13:11.641042" elapsed="0.025339"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-23T02:13:11.666434" elapsed="0.000033"/>
</return>
<msg time="2026-08-23T02:13:11.666608" level="INFO">${mapping_to_use} = {'DEVICE_IP': '10.30.170.120', 'DEVICE_NAME': 'netconf-test-device', 'DEVICE_PORT': '17830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'topsecret', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/t...</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-23T02:13:11.639693" elapsed="0.026942"/>
</kw>
<status status="PASS" start="2026-08-23T02:13:11.639401" elapsed="0.027265"/>
</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-08-23T02:13:11.666871" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:11.666692" elapsed="0.000238"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:11.639382" elapsed="0.027569"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.667783" level="INFO">${final_text} = /rests/operations/netconf-node-topology:delete-device</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-08-23T02:13:11.667090" elapsed="0.000721"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T02:13:11.667885" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device/${file_name}.</doc>
<status status="PASS" start="2026-08-23T02:13:11.635807" elapsed="0.032204"/>
</kw>
<msg time="2026-08-23T02:13:11.668062" 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-08-23T02:13:11.623153" elapsed="0.044957"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:11.680749" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:11.693375" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:11.706137" 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-08-23T02:13:11.706331" 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-08-23T02:13:11.706501" 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-08-23T02:13:11.706879" elapsed="0.000061"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:11.706722" elapsed="0.000258"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:13:11.706707" elapsed="0.000297"/>
</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-08-23T02:13:11.707145" 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-08-23T02:13:11.707308" 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-08-23T02:13:11.707469" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T02:13:11.706679" elapsed="0.000843"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T02:13:11.706578" 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-08-23T02:13:11.707691" elapsed="0.000019"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:11.707765" elapsed="0.000016"/>
</return>
<msg time="2026-08-23T02:13:11.707893" level="INFO">${uri} = /rests/operations/netconf-node-topology:delete-device</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-08-23T02:13:11.618821" elapsed="0.089098"/>
</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-08-23T02:13:11.733090" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device.vanadium/post_data.xml</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:11.732696" elapsed="0.000423"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T02:13:11.733827" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/rpc-delete-device.vanadium/post_data.xml' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-23T02:13:11.733611" elapsed="0.000297">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/rpc-delete-device.vanadium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-08-23T02:13:11.734002" 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-08-23T02:13:11.733284" elapsed="0.000742"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.734566" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device/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-08-23T02:13:11.734184" elapsed="0.000409"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:13:11.734898" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/rpc-delete-device/post_data.xml"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/rpc-delete-device/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:13:11.735029" level="INFO">${template} = &lt;input xmlns="urn:opendaylight:netconf-node-topology"&gt;
   &lt;node-id&gt;$DEVICE_NAME&lt;/node-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-08-23T02:13:11.734749" elapsed="0.000307"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.735451" level="INFO">&lt;input xmlns="urn:opendaylight:netconf-node-topology"&gt;
   &lt;node-id&gt;$DEVICE_NAME&lt;/node-id&gt;
 &lt;/input&gt;
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:11.735209" 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-08-23T02:13:11.735862" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:11.735563" elapsed="0.000359"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.736382" level="INFO">${mapping_to_use} = {'DEVICE_IP': '10.30.170.120', 'DEVICE_NAME': 'netconf-test-device', 'DEVICE_PORT': '17830', 'DEVICE_USER': 'admin', 'DEVICE_PASSWORD': 'topsecret', 'DEVICE_KEY': 'device-key', 'SCHEMA_DIRECTORY': '/t...</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-08-23T02:13:11.736088" elapsed="0.000322"/>
</kw>
<status status="PASS" start="2026-08-23T02:13:11.735947" elapsed="0.000497"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:11.735544" elapsed="0.000922"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.737293" level="INFO">${final_text} = &lt;input xmlns="urn:opendaylight:netconf-node-topology"&gt;
   &lt;node-id&gt;netconf-test-device&lt;/node-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-08-23T02:13:11.736620" elapsed="0.000703"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T02:13:11.737373" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device/${file_name}.</doc>
<status status="PASS" start="2026-08-23T02:13:11.732053" elapsed="0.005484"/>
</kw>
<msg time="2026-08-23T02:13:11.737591" 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-08-23T02:13:11.719317" elapsed="0.018323"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:11.750258" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:11.762641" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:11.775062" 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-08-23T02:13:11.775252" 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-08-23T02:13:11.775422" 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-08-23T02:13:11.775775" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:11.775637" elapsed="0.000193"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:13:11.775622" 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-08-23T02:13:11.776006" 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-08-23T02:13:11.776168" 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-08-23T02:13:11.776339" elapsed="0.000021"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T02:13:11.775594" elapsed="0.000799"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T02:13:11.775496" 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-08-23T02:13:11.776558" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:11.776632" elapsed="0.000016"/>
</return>
<msg time="2026-08-23T02:13:11.776748" level="INFO">${data} = &lt;input xmlns="urn:opendaylight:netconf-node-topology"&gt;
   &lt;node-id&gt;netconf-test-device&lt;/node-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-08-23T02:13:11.718433" elapsed="0.058343"/>
</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-08-23T02:13:11.778092" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/rpc-delete-device/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-08-23T02:13:11.777828" elapsed="0.000328">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/device/scandium/rpc-delete-device/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-23T02:13:11.778248" 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-08-23T02:13:11.777447" elapsed="0.000826"/>
</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-08-23T02:13:11.778584" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:11.778343" elapsed="0.000298"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.779144" 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-08-23T02:13:11.778848" elapsed="0.000323"/>
</kw>
<status status="PASS" start="2026-08-23T02:13:11.778666" elapsed="0.000540"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:11.778324" elapsed="0.000903"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.781604" 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-08-23T02:13:11.779374" elapsed="0.002257"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-23T02:13:11.781682" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:13:11.781849" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../variables/netconf/device/scandium/rpc-delete-device/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-23T02:13:11.777123" elapsed="0.004753"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.783450" level="INFO">/rests/operations/netconf-node-topology:delete-device</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:11.783149" elapsed="0.000346"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.783900" level="INFO">&lt;input xmlns="urn:opendaylight:netconf-node-topology"&gt;
   &lt;node-id&gt;netconf-test-device&lt;/node-id&gt;
 &lt;/input&gt;</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:11.783646" elapsed="0.000301"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.784353" 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-08-23T02:13:11.784095" elapsed="0.000301"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.784781" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:11.784542" elapsed="0.000282"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-08-23T02:13:11.785629" 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-08-23T02:13:11.785437" elapsed="0.000217"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-08-23T02:13:11.785993" 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-08-23T02:13:11.785802" 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-08-23T02:13:11.786163" elapsed="0.000204"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.786764" 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-08-23T02:13:11.786520" elapsed="0.000288"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-08-23T02:13:11.786865" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:13:11.787021" 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-08-23T02:13:11.785040" 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">
<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="NOT RUN" start="2026-08-23T02:13:11.789397" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:11.787115" elapsed="0.002349"/>
</branch>
<branch type="ELSE">
<kw name="POST On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:13:11.793291" level="INFO">POST Request : url=http://10.30.170.114:8181/rests/operations/netconf-node-topology:delete-device 
 path_url=/rests/operations/netconf-node-topology:delete-device 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Content-Length': '106', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="urn:opendaylight:netconf-node-topology"&gt;
   &lt;node-id&gt;netconf-test-device&lt;/node-id&gt;
 &lt;/input&gt; 
 </msg>
<msg time="2026-08-23T02:13:11.793345" level="INFO">POST Response : url=http://10.30.170.114:8181/rests/operations/netconf-node-topology:delete-device 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:13:11.793439" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-node-topology:delete-device</msg>
<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="FAIL" start="2026-08-23T02:13:11.789628" elapsed="0.004201">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-node-topology:delete-device</status>
</kw>
<status status="FAIL" start="2026-08-23T02:13:11.789489" elapsed="0.004493">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-node-topology:delete-device</status>
</branch>
<status status="FAIL" start="2026-08-23T02:13:11.787097" elapsed="0.006919">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-node-topology:delete-device</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:11.794389" elapsed="0.000027"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:11.794529" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:11.794490" elapsed="0.000082"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:13:11.794472" elapsed="0.000122"/>
</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-08-23T02:13:11.794735" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:13:11.794804" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>content_type=${content_type}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>POST data to given URI, check status code and return response text.
${content_type} and ${accept} are mandatory Python objects with headers to use.
If ${normalize_json}, normalize text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:13:11.782202" elapsed="0.012726">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-node-topology:delete-device</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:11.795010" elapsed="0.000016"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>extension=xml</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>content_type=${HEADERS_XML}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>endline=${\n}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve URI and data from folder, call Post_To_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-23T02:13:11.607488" elapsed="0.187649">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-node-topology:delete-device</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=response</arg>
<arg>mapping=${mapping}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:11.795436" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:11.795256" elapsed="0.000252"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:13:11.795239" elapsed="0.000293"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:11.795565" elapsed="0.000014"/>
</return>
<arg>folder=${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Add arguments sensible for XML data, return Post_Templated response text.
Optionally, verification against response.xml (no iteration) is called.</doc>
<status status="FAIL" start="2026-08-23T02:13:11.604750" elapsed="0.190909">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-node-topology:delete-device</status>
</kw>
<status status="FAIL" start="2026-08-23T02:13:11.604435" elapsed="0.191290">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-node-topology:delete-device</status>
</branch>
<branch type="ELSE">
<kw name="Put_As_Xml_Templated" owner="TemplatedRequests">
<arg>folder=${DIRECTORY_WITH_DEVICE_TEMPLATES}${/}${version}${/}${device_type}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>Add arguments sensible for XML data, return Put_Templated response text.
Optionally, verification against response.xml (no iteration) is called.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:11.796010" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:11.795754" elapsed="0.000324"/>
</branch>
<status status="FAIL" start="2026-08-23T02:13:11.604415" elapsed="0.191687">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-node-topology:delete-device</status>
</if>
<kw name="Set To Dictionary" owner="Collections">
<arg>${NetconfKeywords__mounted_device_types}</arg>
<arg>${device_name}</arg>
<arg>${device_type}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:11.796265" elapsed="0.000022"/>
</kw>
<arg>${DEVICE_NAME}</arg>
<arg>device_type=${DEVICE_TYPE_RPC_DELETE}</arg>
<arg>http_timeout=2</arg>
<arg>http_method=post</arg>
<doc>Tell Netconf about the specified device so it can add it into its configuration.</doc>
<status status="FAIL" start="2026-08-23T02:13:11.582691" elapsed="0.213688">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-node-topology:delete-device</status>
</kw>
<doc>Make request to deconfigure the testtool device on Netconf connector.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-08-23T02:13:11.486737" elapsed="0.309790">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-node-topology:delete-device</status>
</test>
<test id="s1-s5-s1-t11" name="Check_Device_Going_To_Be_Gone_After_Deconfiguring" line="109">
<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-08-23T02:13:11.800686" elapsed="0.000227"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:13:11.800429" elapsed="0.000538"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:13:11.801942" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:11.801814" elapsed="0.000175"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:11.801796" elapsed="0.000248"/>
</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-08-23T02:13:11.807178" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:11.807070" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:11.807051" elapsed="0.000196"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.808252" 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-08-23T02:13:11.807859" elapsed="0.000420"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.808726" 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-08-23T02:13:11.808433" elapsed="0.000319"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:13:11.808796" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:13:11.808969" 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-08-23T02:13:11.807467" elapsed="0.001527"/>
</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-08-23T02:13:11.814454" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:11.814348" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:11.814329" elapsed="0.000194"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:13:11.815893" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:11.815762" elapsed="0.000178"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:11.815743" elapsed="0.000219"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:13:11.816476" level="INFO">${karaf_connection_index} = 16</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-08-23T02:13:11.816119" elapsed="0.000383"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:13:11.816916" level="INFO">${current_connection_index} = 18</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-08-23T02:13:11.816656" elapsed="0.000286"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:13:11.848102" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:13:11.817483" elapsed="0.030795"/>
</kw>
<msg time="2026-08-23T02:13:11.848446" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:13:11.848493" 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 "n "e "t "c "o "n "f "...</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-08-23T02:13:11.817098" elapsed="0.031431"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:13:11.878788" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "C "R "U "D "- "A "C "T "I "O "N ". "C "R "U "D "- "A "C "T "I "O "N ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "G "o "i "n "g "_ "T "o "_ "B "e "_ "G "o "n "e "_ "A "f "t "e "r "_ "D "e "c "o "n "f "i "[78Cg "[A[78Cu
 "r "i "n "g "[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-08-23T02:13:11.849108" elapsed="0.029884"/>
</kw>
<msg time="2026-08-23T02:13:11.879159" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:13:11.879204" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D "- "A "C "T "I "O "N ". "C "R "U "D "- "A "C "T "I "O "N ". "C "h "e "c "k ...</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-08-23T02:13:11.848696" elapsed="0.030546"/>
</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-08-23T02:13:11.879540" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:11.879318" elapsed="0.000297"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:11.879298" elapsed="0.000342"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.880183" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D "- "A "C "T "I "O "N ". "C "R "U "D "- "A "C "T "I "O "N ". "C "h "e "c "k "_ "D "e "v "i "c "e "_ "G "o "i "n "g "_ "T "o "_ "B "e "_ "G "o "n "e "_ "A "f "t "e "r "_ "D "e "c "o "n "f "i "[78Cg "[A[78Cu
 "r "i "n "g "[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-08-23T02:13:11.879793" elapsed="0.000471"/>
</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-08-23T02:13:11.880540" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:11.880330" elapsed="0.000285"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:11.880312" elapsed="0.000327"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:13:11.880672" 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-08-23T02:13:11.883680" elapsed="0.000335"/>
</kw>
<msg time="2026-08-23T02:13:11.884089" 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-08-23T02:13:11.883033" elapsed="0.001153"/>
</kw>
<kw name="Open 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-08-23T02:13:11.885103" elapsed="0.000038"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:11.886180" elapsed="0.000037"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:13:11.881520" elapsed="0.004777"/>
</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-08-23T02:13:11.880949" elapsed="0.005462"/>
</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-08-23T02:13:11.815298" elapsed="0.071217"/>
</kw>
<msg time="2026-08-23T02:13:11.886606" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:13:11.886650" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D "- "A "C "T "I "O "N ". "C "R "U "D "- "A "C "T "I "O "N ". "C "h "e "c "k ...</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-08-23T02:13:11.814669" elapsed="0.072018"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:13:11.886888" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:13:11.886763" elapsed="0.000185"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:11.886744" elapsed="0.000228"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 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-08-23T02:13:11.887358" 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-08-23T02:13:11.887685" elapsed="0.000037"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:13:11.887771" 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-08-23T02:13:11.814014" elapsed="0.073955"/>
</kw>
<msg time="2026-08-23T02:13:11.888063" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:13:11.888107" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "C "R "U "D "- "A "C "T "I "O "N ". "C "R "U "D "- "A "C "T "I "O "N ". "C "h "e "c "k ...</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-08-23T02:13:11.809394" elapsed="0.078750"/>
</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-08-23T02:13:11.888464" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:11.888218" elapsed="0.000300"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:11.888200" elapsed="0.000341"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:13:11.809255" elapsed="0.079308"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:13:11.809045" elapsed="0.079547"/>
</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-08-23T02:13:11.806694" elapsed="0.081949"/>
</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-08-23T02:13:11.801531" elapsed="0.087166"/>
</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-08-23T02:13:11.801115" elapsed="0.087626"/>
</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-08-23T02:13:11.798234" elapsed="0.090557"/>
</kw>
<kw name="Wait_Device_Fully_Removed" owner="NetconfKeywords">
<kw name="Wait Until Keyword Succeeds" owner="BuiltIn">
<kw name="Check_Device_Completely_Gone" owner="NetconfKeywords">
<kw name="Check_Device_Has_No_Netconf_Connector" owner="NetconfKeywords">
<kw name="Count_Netconf_Connectors_For_Device" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.903038" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:11.899599" elapsed="0.003467"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:11.903382" elapsed="0.000022"/>
</kw>
<var name="${nv}"/>
<status status="NOT RUN" start="2026-08-23T02:13:11.903233" elapsed="0.000207"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="NOT RUN" start="2026-08-23T02:13:11.903119" elapsed="0.000346"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:11.903777" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:11.903526" elapsed="0.000358"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.904613" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:11.904145" elapsed="0.000495"/>
</kw>
<status status="PASS" start="2026-08-23T02:13:11.903912" elapsed="0.000763"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:11.904874" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:11.904700" elapsed="0.000231"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:11.903509" elapsed="0.001443"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:13:11.904985" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:13:11.905131" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:13:11.899146" elapsed="0.006011"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:13:11.905202" elapsed="0.000025"/>
</return>
<msg time="2026-08-23T02:13:11.905340" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:13:11.898487" elapsed="0.006878"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.912633" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:11.912383" elapsed="0.000296"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:11.913087" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:11.912828" elapsed="0.000303"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:13:11.918703" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:13:11.918756" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '407'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:13:11.918890" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:13:11.915286" elapsed="0.003935">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:13:11.913196" elapsed="0.006104">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:11.919485" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:11.919334" elapsed="0.000231"/>
</branch>
<status status="FAIL" start="2026-08-23T02:13:11.913178" elapsed="0.006411">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:11.919969" elapsed="0.000027"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:11.920102" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:11.920065" elapsed="0.000078"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:13:11.920048" elapsed="0.000116"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:11.920301" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:13:11.920371" elapsed="0.000017"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:13:11.908032" elapsed="0.012447">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:11.920549" elapsed="0.000015"/>
</return>
<var>${mounts}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:13:11.905579" elapsed="0.015065">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${mounts}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:11.920863" elapsed="0.000023"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${actual_count}</var>
<arg>len('''${mounts}'''.split('"node-id": "${device_name}"'))-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:11.921029" elapsed="0.000020"/>
</kw>
<return>
<value>${actual_count}</value>
<status status="NOT RUN" start="2026-08-23T02:13:11.921092" elapsed="0.000016"/>
</return>
<var>${count}</var>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Count all instances of the specified device in the Netconf topology (usually 0 or 1).</doc>
<status status="FAIL" start="2026-08-23T02:13:11.890985" elapsed="0.030206">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${count}</arg>
<arg>0</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:11.921350" elapsed="0.000021"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Check that there are no instances of the specified device in the Netconf topology.</doc>
<status status="FAIL" start="2026-08-23T02:13:11.890513" elapsed="0.030944">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Generate URI" owner="Restconf">
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>config</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="NOT RUN" start="2026-08-23T02:13:11.928663" elapsed="0.000028"/>
</kw>
<kw name="No Content From URI" owner="Utils">
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Issue a Get On Session and return on error 404 (No content) or will fail and log the content.
Issues a Get On Session for ${uri} in default using headers from
{'Content-Type': 'application/json'}. If the request returns a HTTP error, fails. Otherwise
returns the data obtained by the request.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:11.932298" elapsed="0.000027"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device has no Netconf connectors nor associated data.</doc>
<status status="FAIL" start="2026-08-23T02:13:11.890014" elapsed="0.042408">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Check_Device_Completely_Gone" owner="NetconfKeywords">
<kw name="Check_Device_Has_No_Netconf_Connector" owner="NetconfKeywords">
<kw name="Count_Netconf_Connectors_For_Device" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:12.950585" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:12.948498" elapsed="0.002116"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:12.950955" elapsed="0.000023"/>
</kw>
<var name="${nv}"/>
<status status="NOT RUN" start="2026-08-23T02:13:12.950787" elapsed="0.000227"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="NOT RUN" start="2026-08-23T02:13:12.950669" elapsed="0.000372"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:12.951342" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:12.951103" elapsed="0.000297"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:12.952137" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:12.951649" elapsed="0.000515"/>
</kw>
<status status="PASS" start="2026-08-23T02:13:12.951424" elapsed="0.000775"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:12.952385" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:12.952225" elapsed="0.000214"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:12.951086" elapsed="0.001374"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:13:12.952495" elapsed="0.000032"/>
</return>
<msg time="2026-08-23T02:13:12.952646" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:13:12.948053" elapsed="0.004619"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:13:12.952718" elapsed="0.000025"/>
</return>
<msg time="2026-08-23T02:13:12.952873" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:13:12.947561" elapsed="0.005339"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:12.960125" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:12.959871" elapsed="0.000300"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:12.960564" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:12.960320" elapsed="0.000287"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:13:12.966396" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:13:12.966499" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '407'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:13:12.966602" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:13:12.962749" elapsed="0.004211">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:13:12.960672" elapsed="0.006368">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:12.967225" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:12.967075" elapsed="0.000214"/>
</branch>
<status status="FAIL" start="2026-08-23T02:13:12.960654" elapsed="0.006659">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:12.967678" elapsed="0.000025"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:12.967807" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:12.967771" elapsed="0.000115"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:13:12.967754" elapsed="0.000156"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:12.968053" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:13:12.968123" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:13:12.955527" elapsed="0.012701">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:12.968297" elapsed="0.000016"/>
</return>
<var>${mounts}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:13:12.953111" elapsed="0.015282">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${mounts}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:12.968556" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${actual_count}</var>
<arg>len('''${mounts}'''.split('"node-id": "${device_name}"'))-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:12.968718" elapsed="0.000020"/>
</kw>
<return>
<value>${actual_count}</value>
<status status="NOT RUN" start="2026-08-23T02:13:12.968780" elapsed="0.000015"/>
</return>
<var>${count}</var>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Count all instances of the specified device in the Netconf topology (usually 0 or 1).</doc>
<status status="FAIL" start="2026-08-23T02:13:12.935309" elapsed="0.033593">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${count}</arg>
<arg>0</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:12.969061" elapsed="0.000021"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Check that there are no instances of the specified device in the Netconf topology.</doc>
<status status="FAIL" start="2026-08-23T02:13:12.934265" elapsed="0.034903">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Generate URI" owner="Restconf">
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>config</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="NOT RUN" start="2026-08-23T02:13:12.977035" elapsed="0.000040"/>
</kw>
<kw name="No Content From URI" owner="Utils">
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Issue a Get On Session and return on error 404 (No content) or will fail and log the content.
Issues a Get On Session for ${uri} in default using headers from
{'Content-Type': 'application/json'}. If the request returns a HTTP error, fails. Otherwise
returns the data obtained by the request.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:12.982036" elapsed="0.000037"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device has no Netconf connectors nor associated data.</doc>
<status status="FAIL" start="2026-08-23T02:13:12.933076" elapsed="0.049133">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Check_Device_Completely_Gone" owner="NetconfKeywords">
<kw name="Check_Device_Has_No_Netconf_Connector" owner="NetconfKeywords">
<kw name="Count_Netconf_Connectors_For_Device" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:14.001236" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:13.999075" elapsed="0.002193"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:14.001620" elapsed="0.000022"/>
</kw>
<var name="${nv}"/>
<status status="NOT RUN" start="2026-08-23T02:13:14.001465" elapsed="0.000213"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="NOT RUN" start="2026-08-23T02:13:14.001336" elapsed="0.000371"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:14.002055" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:14.001780" elapsed="0.000333"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:14.002887" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:14.002381" elapsed="0.000534"/>
</kw>
<status status="PASS" start="2026-08-23T02:13:14.002138" elapsed="0.000813"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:14.003139" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:14.002976" elapsed="0.000218"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:14.001760" elapsed="0.001455"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:13:14.003255" elapsed="0.000037"/>
</return>
<msg time="2026-08-23T02:13:14.003422" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:13:13.998587" elapsed="0.004860"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:13:14.003494" elapsed="0.000025"/>
</return>
<msg time="2026-08-23T02:13:14.003635" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:13:13.998076" elapsed="0.005584"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:14.011367" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:14.011106" elapsed="0.000314"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:14.011819" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:14.011573" elapsed="0.000308"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:13:14.017983" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:13:14.018054" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '407'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:13:14.018182" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:13:14.014011" elapsed="0.004558">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:13:14.011950" elapsed="0.006702">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:14.018856" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:14.018684" elapsed="0.000238"/>
</branch>
<status status="FAIL" start="2026-08-23T02:13:14.011930" elapsed="0.007016">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:14.019323" elapsed="0.000025"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:14.019573" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:14.019534" elapsed="0.000084"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:13:14.019513" elapsed="0.000127"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:14.019784" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:13:14.019879" elapsed="0.000016"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:13:14.006387" elapsed="0.013603">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:14.020068" elapsed="0.000016"/>
</return>
<var>${mounts}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:13:14.003911" elapsed="0.016256">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${mounts}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:14.020338" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${actual_count}</var>
<arg>len('''${mounts}'''.split('"node-id": "${device_name}"'))-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:14.020505" elapsed="0.000020"/>
</kw>
<return>
<value>${actual_count}</value>
<status status="NOT RUN" start="2026-08-23T02:13:14.020569" elapsed="0.000015"/>
</return>
<var>${count}</var>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Count all instances of the specified device in the Netconf topology (usually 0 or 1).</doc>
<status status="FAIL" start="2026-08-23T02:13:13.985302" elapsed="0.035364">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${count}</arg>
<arg>0</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:14.020826" elapsed="0.000043"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Check that there are no instances of the specified device in the Netconf topology.</doc>
<status status="FAIL" start="2026-08-23T02:13:13.984258" elapsed="0.036701">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Generate URI" owner="Restconf">
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>config</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="NOT RUN" start="2026-08-23T02:13:14.029160" elapsed="0.000040"/>
</kw>
<kw name="No Content From URI" owner="Utils">
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Issue a Get On Session and return on error 404 (No content) or will fail and log the content.
Issues a Get On Session for ${uri} in default using headers from
{'Content-Type': 'application/json'}. If the request returns a HTTP error, fails. Otherwise
returns the data obtained by the request.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:14.034289" elapsed="0.000039"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device has no Netconf connectors nor associated data.</doc>
<status status="FAIL" start="2026-08-23T02:13:13.982976" elapsed="0.051491">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Check_Device_Completely_Gone" owner="NetconfKeywords">
<kw name="Check_Device_Has_No_Netconf_Connector" owner="NetconfKeywords">
<kw name="Count_Netconf_Connectors_For_Device" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:15.052677" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:15.050455" elapsed="0.002261"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:15.053115" elapsed="0.000022"/>
</kw>
<var name="${nv}"/>
<status status="NOT RUN" start="2026-08-23T02:13:15.052958" elapsed="0.000216"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="NOT RUN" start="2026-08-23T02:13:15.052799" elapsed="0.000407"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:15.053571" elapsed="0.000027"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:15.053282" elapsed="0.000361"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:15.054393" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:15.053919" elapsed="0.000512"/>
</kw>
<status status="PASS" start="2026-08-23T02:13:15.053670" elapsed="0.000798"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:15.054656" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:15.054493" elapsed="0.000219"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:15.053261" elapsed="0.001472"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:13:15.054774" elapsed="0.000046"/>
</return>
<msg time="2026-08-23T02:13:15.054971" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:13:15.049957" elapsed="0.005040"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:13:15.055133" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:13:15.055280" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:13:15.049386" elapsed="0.005919"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:15.062753" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:15.062491" elapsed="0.000309"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:15.063216" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:15.062969" elapsed="0.000291"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:13:15.069364" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:13:15.069421" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '407'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:13:15.069542" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:13:15.065389" elapsed="0.004595">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:13:15.063327" elapsed="0.006744">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:15.070256" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:15.070105" elapsed="0.000216"/>
</branch>
<status status="FAIL" start="2026-08-23T02:13:15.063309" elapsed="0.007036">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:15.070739" elapsed="0.000025"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:15.070895" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:15.070855" elapsed="0.000082"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:13:15.070816" elapsed="0.000143"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:15.071098" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:13:15.071167" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:13:15.058036" elapsed="0.013240">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:15.071345" elapsed="0.000016"/>
</return>
<var>${mounts}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:13:15.055523" elapsed="0.015921">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${mounts}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:15.071613" elapsed="0.000022"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${actual_count}</var>
<arg>len('''${mounts}'''.split('"node-id": "${device_name}"'))-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:15.071778" elapsed="0.000021"/>
</kw>
<return>
<value>${actual_count}</value>
<status status="NOT RUN" start="2026-08-23T02:13:15.071864" elapsed="0.000017"/>
</return>
<var>${count}</var>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Count all instances of the specified device in the Netconf topology (usually 0 or 1).</doc>
<status status="FAIL" start="2026-08-23T02:13:15.037968" elapsed="0.033998">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${count}</arg>
<arg>0</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:15.072126" elapsed="0.000021"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Check that there are no instances of the specified device in the Netconf topology.</doc>
<status status="FAIL" start="2026-08-23T02:13:15.036907" elapsed="0.035364">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Generate URI" owner="Restconf">
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>config</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="NOT RUN" start="2026-08-23T02:13:15.080154" elapsed="0.000032"/>
</kw>
<kw name="No Content From URI" owner="Utils">
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Issue a Get On Session and return on error 404 (No content) or will fail and log the content.
Issues a Get On Session for ${uri} in default using headers from
{'Content-Type': 'application/json'}. If the request returns a HTTP error, fails. Otherwise
returns the data obtained by the request.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:15.083822" elapsed="0.000038"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device has no Netconf connectors nor associated data.</doc>
<status status="FAIL" start="2026-08-23T02:13:15.035398" elapsed="0.048562">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Check_Device_Completely_Gone" owner="NetconfKeywords">
<kw name="Check_Device_Has_No_Netconf_Connector" owner="NetconfKeywords">
<kw name="Count_Netconf_Connectors_For_Device" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:16.102907" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:16.100690" elapsed="0.002250"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:16.103316" elapsed="0.000022"/>
</kw>
<var name="${nv}"/>
<status status="NOT RUN" start="2026-08-23T02:13:16.103141" elapsed="0.000234"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="NOT RUN" start="2026-08-23T02:13:16.103011" elapsed="0.000394"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:16.103747" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:16.103477" elapsed="0.000329"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:16.104564" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:16.104083" elapsed="0.000508"/>
</kw>
<status status="PASS" start="2026-08-23T02:13:16.103846" elapsed="0.000782"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:16.104819" elapsed="0.000038"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:16.104652" elapsed="0.000242"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:16.103457" elapsed="0.001458"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:13:16.104955" elapsed="0.000039"/>
</return>
<msg time="2026-08-23T02:13:16.105118" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:13:16.100192" elapsed="0.004952"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:13:16.105191" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:13:16.105332" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:13:16.099659" elapsed="0.005698"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:16.112885" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:16.112576" elapsed="0.000359"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:16.113335" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:16.113087" elapsed="0.000291"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:13:16.119568" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:13:16.119629" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '407'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:13:16.119744" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:13:16.115514" elapsed="0.004710">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:13:16.113445" elapsed="0.006863">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:16.120495" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:16.120342" elapsed="0.000219"/>
</branch>
<status status="FAIL" start="2026-08-23T02:13:16.113427" elapsed="0.007158">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:16.120985" elapsed="0.000027"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:16.121121" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:16.121083" elapsed="0.000080"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:13:16.121065" elapsed="0.000120"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:16.121327" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:13:16.121397" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:13:16.108056" elapsed="0.013449">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:16.121580" elapsed="0.000016"/>
</return>
<var>${mounts}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:13:16.105573" elapsed="0.016104">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${mounts}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:16.121867" elapsed="0.000023"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${actual_count}</var>
<arg>len('''${mounts}'''.split('"node-id": "${device_name}"'))-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:16.122036" elapsed="0.000021"/>
</kw>
<return>
<value>${actual_count}</value>
<status status="NOT RUN" start="2026-08-23T02:13:16.122100" elapsed="0.000015"/>
</return>
<var>${count}</var>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Count all instances of the specified device in the Netconf topology (usually 0 or 1).</doc>
<status status="FAIL" start="2026-08-23T02:13:16.087279" elapsed="0.034920">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${count}</arg>
<arg>0</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:16.122361" elapsed="0.000021"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Check that there are no instances of the specified device in the Netconf topology.</doc>
<status status="FAIL" start="2026-08-23T02:13:16.086149" elapsed="0.036321">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Generate URI" owner="Restconf">
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>config</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="NOT RUN" start="2026-08-23T02:13:16.130749" elapsed="0.000038"/>
</kw>
<kw name="No Content From URI" owner="Utils">
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Issue a Get On Session and return on error 404 (No content) or will fail and log the content.
Issues a Get On Session for ${uri} in default using headers from
{'Content-Type': 'application/json'}. If the request returns a HTTP error, fails. Otherwise
returns the data obtained by the request.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:16.135991" elapsed="0.000042"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device has no Netconf connectors nor associated data.</doc>
<status status="FAIL" start="2026-08-23T02:13:16.084754" elapsed="0.051419">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Check_Device_Completely_Gone" owner="NetconfKeywords">
<kw name="Check_Device_Has_No_Netconf_Connector" owner="NetconfKeywords">
<kw name="Count_Netconf_Connectors_For_Device" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:17.155034" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:17.152609" elapsed="0.002456"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:17.155417" elapsed="0.000022"/>
</kw>
<var name="${nv}"/>
<status status="NOT RUN" start="2026-08-23T02:13:17.155262" elapsed="0.000213"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="NOT RUN" start="2026-08-23T02:13:17.155132" elapsed="0.000372"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:17.155849" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:17.155575" elapsed="0.000419"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:17.156752" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:17.156258" elapsed="0.000522"/>
</kw>
<status status="PASS" start="2026-08-23T02:13:17.156021" elapsed="0.000796"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:17.157027" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:17.156861" elapsed="0.000222"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:17.155555" elapsed="0.001549"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:13:17.157142" elapsed="0.000036"/>
</return>
<msg time="2026-08-23T02:13:17.157302" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:13:17.151931" elapsed="0.005398"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:13:17.157376" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:13:17.157520" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:13:17.151229" elapsed="0.006317"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:17.164991" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:17.164711" elapsed="0.000327"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:17.165432" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:17.165189" elapsed="0.000286"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:13:17.171107" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:13:17.171163" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '407'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:13:17.171271" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:13:17.167602" elapsed="0.004045">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:13:17.165541" elapsed="0.006187">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:17.171931" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:17.171762" elapsed="0.000236"/>
</branch>
<status status="FAIL" start="2026-08-23T02:13:17.165523" elapsed="0.006498">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:17.172390" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:17.172521" elapsed="0.000027"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:17.172485" elapsed="0.000092"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:13:17.172468" elapsed="0.000131"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:17.172738" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:13:17.172808" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:13:17.160198" elapsed="0.012743">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:17.173046" elapsed="0.000018"/>
</return>
<var>${mounts}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:13:17.157768" elapsed="0.015381">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${mounts}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:17.173318" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${actual_count}</var>
<arg>len('''${mounts}'''.split('"node-id": "${device_name}"'))-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:17.173485" elapsed="0.000020"/>
</kw>
<return>
<value>${actual_count}</value>
<status status="NOT RUN" start="2026-08-23T02:13:17.173549" elapsed="0.000018"/>
</return>
<var>${count}</var>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Count all instances of the specified device in the Netconf topology (usually 0 or 1).</doc>
<status status="FAIL" start="2026-08-23T02:13:17.139385" elapsed="0.034270">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${count}</arg>
<arg>0</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:17.173815" elapsed="0.000041"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Check that there are no instances of the specified device in the Netconf topology.</doc>
<status status="FAIL" start="2026-08-23T02:13:17.138336" elapsed="0.035612">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Generate URI" owner="Restconf">
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>config</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="NOT RUN" start="2026-08-23T02:13:17.181377" elapsed="0.000029"/>
</kw>
<kw name="No Content From URI" owner="Utils">
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Issue a Get On Session and return on error 404 (No content) or will fail and log the content.
Issues a Get On Session for ${uri} in default using headers from
{'Content-Type': 'application/json'}. If the request returns a HTTP error, fails. Otherwise
returns the data obtained by the request.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:17.184974" elapsed="0.000027"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device has no Netconf connectors nor associated data.</doc>
<status status="FAIL" start="2026-08-23T02:13:17.137005" elapsed="0.048095">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Check_Device_Completely_Gone" owner="NetconfKeywords">
<kw name="Check_Device_Has_No_Netconf_Connector" owner="NetconfKeywords">
<kw name="Count_Netconf_Connectors_For_Device" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:18.204419" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:18.202263" elapsed="0.002186"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:18.204791" elapsed="0.000022"/>
</kw>
<var name="${nv}"/>
<status status="NOT RUN" start="2026-08-23T02:13:18.204639" elapsed="0.000225"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="NOT RUN" start="2026-08-23T02:13:18.204512" elapsed="0.000380"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:18.205209" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:18.204961" elapsed="0.000304"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:18.206008" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:18.205515" elapsed="0.000521"/>
</kw>
<status status="PASS" start="2026-08-23T02:13:18.205289" elapsed="0.000782"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:18.206255" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:18.206095" elapsed="0.000224"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:18.204941" elapsed="0.001400"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:13:18.206378" elapsed="0.000032"/>
</return>
<msg time="2026-08-23T02:13:18.206533" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:13:18.201785" elapsed="0.004774"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:13:18.206608" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:13:18.206751" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:13:18.201302" elapsed="0.005474"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:18.214214" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:18.213958" elapsed="0.000302"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:18.214689" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:18.214440" elapsed="0.000292"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:13:18.220571" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:13:18.220628" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '407'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:13:18.220737" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:13:18.216934" elapsed="0.004199">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:13:18.214799" elapsed="0.006416">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:18.221415" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:18.221248" elapsed="0.000233"/>
</branch>
<status status="FAIL" start="2026-08-23T02:13:18.214780" elapsed="0.006724">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:18.221914" elapsed="0.000027"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:18.222048" elapsed="0.000013"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:18.222011" elapsed="0.000078"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:13:18.221993" elapsed="0.000117"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:18.222247" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:13:18.222331" elapsed="0.000016"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:13:18.209461" elapsed="0.012977">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:18.222508" elapsed="0.000015"/>
</return>
<var>${mounts}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:13:18.207004" elapsed="0.015601">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${mounts}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:18.222768" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${actual_count}</var>
<arg>len('''${mounts}'''.split('"node-id": "${device_name}"'))-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:18.222956" elapsed="0.000021"/>
</kw>
<return>
<value>${actual_count}</value>
<status status="NOT RUN" start="2026-08-23T02:13:18.223019" elapsed="0.000016"/>
</return>
<var>${count}</var>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Count all instances of the specified device in the Netconf topology (usually 0 or 1).</doc>
<status status="FAIL" start="2026-08-23T02:13:18.188041" elapsed="0.035076">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${count}</arg>
<arg>0</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:18.223275" elapsed="0.000020"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Check that there are no instances of the specified device in the Netconf topology.</doc>
<status status="FAIL" start="2026-08-23T02:13:18.187022" elapsed="0.036361">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Generate URI" owner="Restconf">
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>config</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="NOT RUN" start="2026-08-23T02:13:18.232078" elapsed="0.000039"/>
</kw>
<kw name="No Content From URI" owner="Utils">
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Issue a Get On Session and return on error 404 (No content) or will fail and log the content.
Issues a Get On Session for ${uri} in default using headers from
{'Content-Type': 'application/json'}. If the request returns a HTTP error, fails. Otherwise
returns the data obtained by the request.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:18.237079" elapsed="0.000037"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device has no Netconf connectors nor associated data.</doc>
<status status="FAIL" start="2026-08-23T02:13:18.185709" elapsed="0.051543">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Check_Device_Completely_Gone" owner="NetconfKeywords">
<kw name="Check_Device_Has_No_Netconf_Connector" owner="NetconfKeywords">
<kw name="Count_Netconf_Connectors_For_Device" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:19.258611" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:19.256357" elapsed="0.002284"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:19.258998" elapsed="0.000022"/>
</kw>
<var name="${nv}"/>
<status status="NOT RUN" start="2026-08-23T02:13:19.258829" elapsed="0.000227"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="NOT RUN" start="2026-08-23T02:13:19.258702" elapsed="0.000382"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:19.259398" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:19.259151" elapsed="0.000303"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:19.260192" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:19.259704" elapsed="0.000515"/>
</kw>
<status status="PASS" start="2026-08-23T02:13:19.259479" elapsed="0.000776"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:19.260449" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:19.260279" elapsed="0.000226"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:19.259132" elapsed="0.001394"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:13:19.260561" elapsed="0.000032"/>
</return>
<msg time="2026-08-23T02:13:19.260713" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:13:19.255901" elapsed="0.004837"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:13:19.260783" elapsed="0.000025"/>
</return>
<msg time="2026-08-23T02:13:19.260941" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:13:19.255391" elapsed="0.005575"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:19.268188" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:19.267933" elapsed="0.000301"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:19.268638" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:19.268384" elapsed="0.000299"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:13:19.274601" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:13:19.274657" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '407'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:13:19.274763" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:13:19.270873" elapsed="0.004283">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:13:19.268749" elapsed="0.006488">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:19.275422" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:19.275271" elapsed="0.000216"/>
</branch>
<status status="FAIL" start="2026-08-23T02:13:19.268731" elapsed="0.006779">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:19.275898" elapsed="0.000027"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:19.276079" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:19.276041" elapsed="0.000081"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:13:19.276023" elapsed="0.000120"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:19.276283" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:13:19.276354" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:13:19.263573" elapsed="0.012908">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:19.276552" elapsed="0.000016"/>
</return>
<var>${mounts}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:13:19.261181" elapsed="0.015469">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${mounts}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:19.276817" elapsed="0.000044"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${actual_count}</var>
<arg>len('''${mounts}'''.split('"node-id": "${device_name}"'))-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:19.277009" elapsed="0.000021"/>
</kw>
<return>
<value>${actual_count}</value>
<status status="NOT RUN" start="2026-08-23T02:13:19.277072" elapsed="0.000016"/>
</return>
<var>${count}</var>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Count all instances of the specified device in the Netconf topology (usually 0 or 1).</doc>
<status status="FAIL" start="2026-08-23T02:13:19.240273" elapsed="0.036899">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${count}</arg>
<arg>0</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:19.277329" elapsed="0.000021"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Check that there are no instances of the specified device in the Netconf topology.</doc>
<status status="FAIL" start="2026-08-23T02:13:19.239246" elapsed="0.038191">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Generate URI" owner="Restconf">
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>config</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="NOT RUN" start="2026-08-23T02:13:19.284795" elapsed="0.000027"/>
</kw>
<kw name="No Content From URI" owner="Utils">
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Issue a Get On Session and return on error 404 (No content) or will fail and log the content.
Issues a Get On Session for ${uri} in default using headers from
{'Content-Type': 'application/json'}. If the request returns a HTTP error, fails. Otherwise
returns the data obtained by the request.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:19.288333" elapsed="0.000026"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device has no Netconf connectors nor associated data.</doc>
<status status="FAIL" start="2026-08-23T02:13:19.238018" elapsed="0.050448">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Check_Device_Completely_Gone" owner="NetconfKeywords">
<kw name="Check_Device_Has_No_Netconf_Connector" owner="NetconfKeywords">
<kw name="Count_Netconf_Connectors_For_Device" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:20.309054" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:20.306891" elapsed="0.002196"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:20.309440" elapsed="0.000021"/>
</kw>
<var name="${nv}"/>
<status status="NOT RUN" start="2026-08-23T02:13:20.309286" elapsed="0.000212"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="NOT RUN" start="2026-08-23T02:13:20.309158" elapsed="0.000370"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:20.309877" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:20.309600" elapsed="0.000336"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:20.310664" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:20.310189" elapsed="0.000504"/>
</kw>
<status status="PASS" start="2026-08-23T02:13:20.309961" elapsed="0.000767"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:20.310939" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:20.310753" elapsed="0.000243"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:20.309580" elapsed="0.001437"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:13:20.311056" elapsed="0.000036"/>
</return>
<msg time="2026-08-23T02:13:20.311216" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:13:20.306385" elapsed="0.004857"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:13:20.311359" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:13:20.311504" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:13:20.305875" elapsed="0.005655"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:20.320792" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:20.320525" elapsed="0.000330"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:20.321262" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:20.321009" elapsed="0.000298"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:13:20.327400" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:13:20.327456" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '407'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:13:20.327576" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:13:20.323441" elapsed="0.004548">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:13:20.321374" elapsed="0.006698">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:20.328256" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:20.328106" elapsed="0.000216"/>
</branch>
<status status="FAIL" start="2026-08-23T02:13:20.321355" elapsed="0.006990">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:20.328716" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:20.328870" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:20.328812" elapsed="0.000103"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:13:20.328795" elapsed="0.000142"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:20.329086" elapsed="0.000022"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:13:20.329157" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:13:20.314158" elapsed="0.015105">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:20.329332" elapsed="0.000015"/>
</return>
<var>${mounts}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:13:20.311745" elapsed="0.017713">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${mounts}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:20.329652" elapsed="0.000024"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${actual_count}</var>
<arg>len('''${mounts}'''.split('"node-id": "${device_name}"'))-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:20.329823" elapsed="0.000042"/>
</kw>
<return>
<value>${actual_count}</value>
<status status="NOT RUN" start="2026-08-23T02:13:20.329910" elapsed="0.000015"/>
</return>
<var>${count}</var>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Count all instances of the specified device in the Netconf topology (usually 0 or 1).</doc>
<status status="FAIL" start="2026-08-23T02:13:20.291761" elapsed="0.038248">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${count}</arg>
<arg>0</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:20.330166" elapsed="0.000021"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Check that there are no instances of the specified device in the Netconf topology.</doc>
<status status="FAIL" start="2026-08-23T02:13:20.290647" elapsed="0.039665">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Generate URI" owner="Restconf">
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>config</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="NOT RUN" start="2026-08-23T02:13:20.340328" elapsed="0.000044"/>
</kw>
<kw name="No Content From URI" owner="Utils">
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Issue a Get On Session and return on error 404 (No content) or will fail and log the content.
Issues a Get On Session for ${uri} in default using headers from
{'Content-Type': 'application/json'}. If the request returns a HTTP error, fails. Otherwise
returns the data obtained by the request.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:20.345391" elapsed="0.000039"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device has no Netconf connectors nor associated data.</doc>
<status status="FAIL" start="2026-08-23T02:13:20.289283" elapsed="0.056289">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Check_Device_Completely_Gone" owner="NetconfKeywords">
<kw name="Check_Device_Has_No_Netconf_Connector" owner="NetconfKeywords">
<kw name="Count_Netconf_Connectors_For_Device" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:21.364438" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:21.361601" elapsed="0.002870"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:21.364820" elapsed="0.000037"/>
</kw>
<var name="${nv}"/>
<status status="NOT RUN" start="2026-08-23T02:13:21.364665" elapsed="0.000230"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="NOT RUN" start="2026-08-23T02:13:21.364538" elapsed="0.000387"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:21.365255" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:21.364993" elapsed="0.000319"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:21.366082" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:21.365586" elapsed="0.000523"/>
</kw>
<status status="PASS" start="2026-08-23T02:13:21.365337" elapsed="0.000808"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:21.366332" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:21.366169" elapsed="0.000219"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:21.364974" elapsed="0.001435"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:13:21.366446" elapsed="0.000036"/>
</return>
<msg time="2026-08-23T02:13:21.366605" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:13:21.360922" elapsed="0.005709"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:13:21.366678" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:13:21.366823" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:13:21.360221" elapsed="0.006642"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:21.374163" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:21.373899" elapsed="0.000311"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:21.374608" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:21.374362" elapsed="0.000291"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:13:21.380715" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:13:21.380771" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '407'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:13:21.380908" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:13:21.376782" elapsed="0.004577">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:13:21.374720" elapsed="0.006723">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:21.381645" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:21.381477" elapsed="0.000235"/>
</branch>
<status status="FAIL" start="2026-08-23T02:13:21.374702" elapsed="0.007033">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:21.382127" elapsed="0.000027"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:21.382264" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:21.382226" elapsed="0.000080"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:13:21.382208" elapsed="0.000120"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:21.382469" elapsed="0.000021"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:13:21.382539" elapsed="0.000016"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:13:21.369484" elapsed="0.013165">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:21.382725" elapsed="0.000016"/>
</return>
<var>${mounts}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:13:21.367081" elapsed="0.015743">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${mounts}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:21.383022" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${actual_count}</var>
<arg>len('''${mounts}'''.split('"node-id": "${device_name}"'))-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:21.383188" elapsed="0.000020"/>
</kw>
<return>
<value>${actual_count}</value>
<status status="NOT RUN" start="2026-08-23T02:13:21.383251" elapsed="0.000016"/>
</return>
<var>${count}</var>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Count all instances of the specified device in the Netconf topology (usually 0 or 1).</doc>
<status status="FAIL" start="2026-08-23T02:13:21.348913" elapsed="0.034439">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${count}</arg>
<arg>0</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:21.383515" elapsed="0.000021"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Check that there are no instances of the specified device in the Netconf topology.</doc>
<status status="FAIL" start="2026-08-23T02:13:21.347831" elapsed="0.035793">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Generate URI" owner="Restconf">
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>config</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="NOT RUN" start="2026-08-23T02:13:21.391080" elapsed="0.000028"/>
</kw>
<kw name="No Content From URI" owner="Utils">
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Issue a Get On Session and return on error 404 (No content) or will fail and log the content.
Issues a Get On Session for ${uri} in default using headers from
{'Content-Type': 'application/json'}. If the request returns a HTTP error, fails. Otherwise
returns the data obtained by the request.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:21.394657" elapsed="0.000028"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device has no Netconf connectors nor associated data.</doc>
<status status="FAIL" start="2026-08-23T02:13:21.346433" elapsed="0.048356">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Check_Device_Completely_Gone" owner="NetconfKeywords">
<kw name="Check_Device_Has_No_Netconf_Connector" owner="NetconfKeywords">
<kw name="Count_Netconf_Connectors_For_Device" owner="NetconfKeywords">
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:22.413769" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:22.411184" elapsed="0.002616"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:22.414158" elapsed="0.000022"/>
</kw>
<var name="${nv}"/>
<status status="NOT RUN" start="2026-08-23T02:13:22.414004" elapsed="0.000212"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="NOT RUN" start="2026-08-23T02:13:22.413878" elapsed="0.000366"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:22.414579" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:22.414313" elapsed="0.000402"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:22.415469" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:22.414992" elapsed="0.000505"/>
</kw>
<status status="PASS" start="2026-08-23T02:13:22.414742" elapsed="0.000791"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:22.415720" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:22.415558" elapsed="0.000218"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:22.414294" elapsed="0.001504"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:13:22.415850" elapsed="0.000036"/>
</return>
<msg time="2026-08-23T02:13:22.416011" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:13:22.410513" elapsed="0.005524"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:13:22.416084" elapsed="0.000026"/>
</return>
<msg time="2026-08-23T02:13:22.416225" level="INFO">${uri} = /rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>operational</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:13:22.409816" elapsed="0.006434"/>
</kw>
<kw name="Get_As_Json_From_Uri" owner="TemplatedRequests">
<kw name="Get_From_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:22.423641" level="INFO">/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:22.423382" elapsed="0.000306"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:22.424103" level="INFO">{}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:22.423855" elapsed="0.000292"/>
</kw>
<if>
<branch type="IF" condition="&quot;&quot;&quot;${http_timeout}&quot;&quot;&quot; == &quot;&quot;&quot;${EMPTY}&quot;&quot;&quot;">
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:13:22.430195" level="INFO">GET Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 path_url=/rests/data/network-topology:network-topology?content=nonconfig 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=None 
 </msg>
<msg time="2026-08-23T02:13:22.430251" level="INFO">GET Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Type': 'text/html;charset=iso-8859-1', 'Content-Length': '407'} 
 body=&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 404 Not Found&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;&lt;h2&gt;HTTP ERROR 404 Not Found&lt;/h2&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/rests/data/network-topology:network-topology&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;404&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Not Found&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;default&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
 
 </msg>
<msg time="2026-08-23T02:13:22.430360" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:13:22.426291" elapsed="0.004468">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<status status="FAIL" start="2026-08-23T02:13:22.424214" elapsed="0.006651">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</branch>
<branch type="ELSE">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>url=${uri}</arg>
<arg>headers=${accept}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:22.431052" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:22.430901" elapsed="0.000215"/>
</branch>
<status status="FAIL" start="2026-08-23T02:13:22.424195" elapsed="0.006945">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>log_response=${log_response}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:22.431511" elapsed="0.000026"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:22.431643" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:22.431606" elapsed="0.000080"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:13:22.431589" elapsed="0.000119"/>
</if>
<kw name="Normalize Json Text" owner="norm_json">
<var>${text_normalized}</var>
<arg>${response.text}</arg>
<arg>jmes_path=${jmes_path}</arg>
<arg>keys_with_volatiles=${keys_with_volatiles}</arg>
<doc>Attempt to return sorted indented JSON string.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:22.431863" elapsed="0.000023"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:13:22.431935" elapsed="0.000015"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>accept=${ACCEPT_EMPTY}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=True</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>log_response=${log_response}</arg>
<doc>GET data from given URI, check status code and return response text.
${accept} is a Python object with headers to use.
If ${normalize_json}, normalize as JSON text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:13:22.418885" elapsed="0.013157">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:22.432146" elapsed="0.000017"/>
</return>
<var>${mounts}</var>
<arg>${uri}</arg>
<arg>session=${session}</arg>
<doc>Specify JSON headers and return Get_From_Uri normalized response text.</doc>
<status status="FAIL" start="2026-08-23T02:13:22.416465" elapsed="0.015783">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${mounts}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:22.432418" elapsed="0.000021"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${actual_count}</var>
<arg>len('''${mounts}'''.split('"node-id": "${device_name}"'))-1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:22.432601" elapsed="0.000022"/>
</kw>
<return>
<value>${actual_count}</value>
<status status="NOT RUN" start="2026-08-23T02:13:22.432666" elapsed="0.000016"/>
</return>
<var>${count}</var>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Count all instances of the specified device in the Netconf topology (usually 0 or 1).</doc>
<status status="FAIL" start="2026-08-23T02:13:22.398025" elapsed="0.034742">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${count}</arg>
<arg>0</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:22.432954" elapsed="0.000022"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<doc>Check that there are no instances of the specified device in the Netconf topology.</doc>
<status status="FAIL" start="2026-08-23T02:13:22.396984" elapsed="0.036081">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<kw name="Generate URI" owner="Restconf">
<var>${uri}</var>
<arg>network-topology:network-topology</arg>
<arg>config</arg>
<arg>topology=topology-netconf</arg>
<arg>node=${device_name}</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="NOT RUN" start="2026-08-23T02:13:22.440291" elapsed="0.000028"/>
</kw>
<kw name="No Content From URI" owner="Utils">
<arg>${session}</arg>
<arg>${uri}</arg>
<doc>Issue a Get On Session and return on error 404 (No content) or will fail and log the content.
Issues a Get On Session for ${uri} in default using headers from
{'Content-Type': 'application/json'}. If the request returns a HTTP error, fails. Otherwise
returns the data obtained by the request.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:22.443899" elapsed="0.000027"/>
</kw>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Check that the specified device has no Netconf connectors nor associated data.</doc>
<status status="FAIL" start="2026-08-23T02:13:22.395562" elapsed="0.048463">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<msg time="2026-08-23T02:13:22.444121" level="FAIL">Keyword 'Check_Device_Completely_Gone' failed after retrying for 10 seconds. The last error was: HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</msg>
<arg>${timeout}</arg>
<arg>${period}</arg>
<arg>Check_Device_Completely_Gone</arg>
<arg>${device_name}</arg>
<arg>session=${session}</arg>
<arg>log_response=${log_response}</arg>
<doc>Runs the specified keyword and retries if it fails.</doc>
<status status="FAIL" start="2026-08-23T02:13:11.889407" elapsed="10.554808">Keyword 'Check_Device_Completely_Gone' failed after retrying for 10 seconds. The last error was: HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<arg>${DEVICE_NAME}</arg>
<doc>Wait until all netconf connectors for the device with the given name disappear.
Call of Remove_Device_From_Netconf returns before netconf gets
around deleting the device's connector. To ensure the device is
really gone from netconf, use this keyword to make sure all
connectors disappear. If a call to Remove_Device_From_Netconf
is not made before using this keyword, the wait will fail.
Using this keyword is more readable than putting the WUKS below
into a test case.</doc>
<status status="FAIL" start="2026-08-23T02:13:11.889005" elapsed="10.555321">Keyword 'Check_Device_Completely_Gone' failed after retrying for 10 seconds. The last error was: HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</kw>
<doc>Check that the device is really going to be gone. Fail
if found after one minute. This is an expected behavior as the
delete request is sent to the config subsystem which then triggers
asynchronous destruction of the netconf connector referring to the
device and the device's data. This test makes sure this
asynchronous operation does not take unreasonable amount of time
by making sure that both the netconf connector and the device's
data is gone before reporting success.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-08-23T02:13:11.796971" elapsed="10.647531">Keyword 'Check_Device_Completely_Gone' failed after retrying for 10 seconds. The last error was: HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology?content=nonconfig</status>
</test>
<kw name="Teardown_Everything" type="TEARDOWN">
<kw name="Delete All Sessions" owner="RequestsLibrary">
<msg time="2026-08-23T02:13:22.445516" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects</doc>
<status status="PASS" start="2026-08-23T02:13:22.445441" elapsed="0.000165"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Stop_Testtool" owner="NetconfKeywords">
<kw name="Write_Bare_Ctrl_C" owner="RemoteBash">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:13:22.446970" 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-08-23T02:13:22.446638" elapsed="0.000360"/>
</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-08-23T02:13:22.447149" elapsed="0.000250"/>
</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-08-23T02:13:22.446431" elapsed="0.001027"/>
</kw>
<kw name="Read Until Prompt" owner="SSHLibrary">
<msg time="2026-08-23T02:13:22.501951" level="INFO">[?2004l^C[?2004h[jenkins@releng-19126-54-1-docker-0 ~]&gt;</msg>
<doc>Consumes and returns the server output until the prompt is found.</doc>
<status status="PASS" start="2026-08-23T02:13:22.447611" elapsed="0.054403"/>
</kw>
<kw name="Get File" owner="SSHLibrary">
<msg time="2026-08-23T02:13:22.510565" level="INFO">'testtool--netconf-gate-userfeatures-txt-CRUD-ACTION-CRUD-ACTION.1787451164.423.log' -&gt; '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/testtool--netconf-gate-userfeatures-txt-CRUD-ACTION-CRUD-ACTION.1787451164.423.log'</msg>
<arg>${testtool_log}</arg>
<doc>Downloads file(s) from the remote machine to the local machine.</doc>
<status status="PASS" start="2026-08-23T02:13:22.502170" elapsed="0.008458"/>
</kw>
<doc>Stop testtool and download its log.</doc>
<status status="PASS" start="2026-08-23T02:13:22.446175" elapsed="0.064552"/>
</kw>
<arg>NetconfKeywords.Stop_Testtool</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:13:22.445761" elapsed="0.065010"/>
</kw>
<doc>Teardown the test infrastructure, perform cleanup and release all resources.</doc>
<status status="PASS" start="2026-08-23T02:13:22.445225" elapsed="0.065596"/>
</kw>
<doc>netconf-connector CRUD-Action test suite.

Copyright (c) 2019 Ericsson Software Technology AB. 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


Perform basic operations (Create, Read, Update and Delete or CRUD) on device
data mounted onto a netconf connector using RPC for node supporting Yang 1.1
addition and see if invoking Action Operation work.</doc>
<status status="FAIL" start="2026-08-23T02:12:41.203147" elapsed="41.307720"/>
</suite>
<status status="FAIL" start="2026-08-23T02:12:41.200703" elapsed="41.311071"/>
</suite>
<suite id="s1-s6" name="Notifications" source="/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/notifications">
<suite id="s1-s6-s1" name="Notifications Basic" source="/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/notifications/notifications_basic.robot">
<kw name="Setup_Everything" 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-08-23T02:13:22.605913" 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-08-23T02:13:22.601594" elapsed="0.004366"/>
</kw>
<doc>Set suite to not fail fast.</doc>
<status status="PASS" start="2026-08-23T02:13:22.601361" elapsed="0.004662"/>
</kw>
<kw name="Setup_Karaf_Keywords" owner="KarafKeywords">
<kw name="ClusterManagement_Setup" owner="ClusterManagement">
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-08-23T02:13:22.610866" 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-08-23T02:13:22.607099" elapsed="0.003796"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-08-23T02:13:22.611093" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:22.610978" elapsed="0.000162"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:22.610955" elapsed="0.000208"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:22.611672" 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-08-23T02:13:22.611318" elapsed="0.000397"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-08-23T02:13:22.612218" 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-08-23T02:13:22.611903" elapsed="0.000341"/>
</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-08-23T02:13:22.612765" elapsed="0.000301"/>
</kw>
<msg time="2026-08-23T02:13:22.613166" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:13:22.613213" 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-08-23T02:13:22.612423" elapsed="0.000812"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:13:22.613794" 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-08-23T02:13:22.613412" elapsed="0.000409"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:13:22.614817" level="INFO">@{member_index_list} = [ ]</msg>
<var>@{member_index_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-08-23T02:13:22.614558" elapsed="0.000300"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:13:22.615262" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-08-23T02:13:22.615009" elapsed="0.000279"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:13:22.615730" 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-08-23T02:13:22.615445" elapsed="0.000315"/>
</kw>
<for flavor="IN RANGE">
<iter>
<kw name="ClusterManagement__Include_Member_Index" owner="ClusterManagement">
<kw name="Append To List" owner="Collections">
<arg>${member_index_list}</arg>
<arg>${index}</arg>
<doc>Adds ``values`` to the end of ``list``.</doc>
<status status="PASS" start="2026-08-23T02:13:22.619140" elapsed="0.000214"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:22.619851" level="INFO">${member_ip} = 10.30.170.114</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-08-23T02:13:22.619514" elapsed="0.000365"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${index_to_ip_mapping}</arg>
<arg>${index}</arg>
<arg>${member_ip}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="PASS" start="2026-08-23T02:13:22.620033" elapsed="0.000229"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:22.621084" 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-08-23T02:13:22.620769" elapsed="0.000341"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-08-23T02:13:22.621156" elapsed="0.000035"/>
</return>
<msg time="2026-08-23T02:13:22.621312" 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-08-23T02:13:22.620476" elapsed="0.000861"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:13:22.621936" level="INFO">Creating Session using : alias=ClusterManagement__session_1, url=http://10.30.170.114:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x72b0ed2bb290&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-08-23T02:13:22.621491" elapsed="0.000578"/>
</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-08-23T02:13:22.622293" elapsed="0.000194"/>
</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-08-23T02:13:22.618558" elapsed="0.003988"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:13:22.618365" elapsed="0.004225"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="PASS" start="2026-08-23T02:13:22.615817" elapsed="0.006806"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:22.623209" 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-08-23T02:13:22.622789" elapsed="0.000463"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:22.623811" level="INFO">${ClusterManagement__index_to_ip_mapping} = {1: '10.30.170.114'}</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-08-23T02:13:22.623415" elapsed="0.000456"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:22.624428" 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-08-23T02:13:22.624033" elapsed="0.000444"/>
</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-08-23T02:13:22.614108" elapsed="0.010426"/>
</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-08-23T02:13:22.606741" elapsed="0.017848"/>
</kw>
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:13:22.624772" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:22.624653" elapsed="0.000164"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:22.624634" elapsed="0.000220"/>
</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-08-23T02:13:22.627937" 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-08-23T02:13:22.627540" elapsed="0.000425"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:13:22.628434" 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-08-23T02:13:22.628123" elapsed="0.000337"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:13:22.628505" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:13:22.628659" 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-08-23T02:13:22.627216" elapsed="0.001468"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:13:22.629671" level="INFO">${member_ip} = 10.30.170.114</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-08-23T02:13:22.629408" elapsed="0.000289"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:13:22.630415" level="INFO">index=18
host=10.30.170.120
alias=None
port=22
timeout=10 seconds
newline=

prompt=&gt;
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-08-23T02:13:22.630514" level="INFO">${current_connection} = index=18
host=10.30.170.120
alias=None
port=22
timeout=10 seconds
newline=

prompt=&gt;
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-08-23T02:13:22.630283" elapsed="0.000258"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:22.634366" elapsed="0.000048"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:22.633620" elapsed="0.000854"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:22.633576" elapsed="0.000968"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:13:22.635179" level="INFO">index=18
host=10.30.170.120
alias=None
port=22
timeout=10 seconds
newline=

prompt=&gt;
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-08-23T02:13:22.635454" level="INFO">${current_ssh_connection} = index=18
host=10.30.170.120
alias=None
port=22
timeout=10 seconds
newline=

prompt=&gt;
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-08-23T02:13:22.634821" elapsed="0.000738"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:22.636493" level="INFO">Attempting to execute command "iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save" on remote system "10.30.170.114" 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-08-23T02:13:22.635827" elapsed="0.000861"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:13:22.637754" level="INFO">${conn_id} = 21</msg>
<var>${conn_id}</var>
<arg>${system}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${prompt_timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-08-23T02:13:22.636986" elapsed="0.001026"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-08-23T02:13:22.639387" level="INFO">Length is 0.</msg>
<msg time="2026-08-23T02:13:22.639464" 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-08-23T02:13:22.639111" elapsed="0.000378"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:13:22.639692" elapsed="0.000386"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-08-23T02:13:22.641031" level="INFO">Logging into '10.30.170.114:22' as 'jenkins'.</msg>
<msg time="2026-08-23T02:13:22.959317" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-186-generic x86_64)

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

 System information as of Sun Aug 23 02:12:41 UTC 2026

  System load:  0.02               Processes:             130
  Usage of /:   13.8% of 77.35GB   Users logged in:       1
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.114
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

41 updates can be applied immediately.
35 of these updates are standard security updates.
To see these additional updates run: apt list --upgradable

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

New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sun Aug 23 02:12:43 2026 from 10.30.171.240
[?2004h[jenkins@releng-19126-54-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-08-23T02:13:22.640681" elapsed="0.318742"/>
</kw>
<msg time="2026-08-23T02:13:22.959492" 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-08-23T02:13:22.640293" elapsed="0.319263"/>
</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-08-23T02:13:22.638377" elapsed="0.321359"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-23T02:13:22.960491" level="INFO">Executing command 'iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save'.</msg>
<msg time="2026-08-23T02:13:22.973667" level="INFO">Command exited with return code 4.</msg>
<msg time="2026-08-23T02:13:22.974311" level="INFO">${stdout} = </msg>
<msg time="2026-08-23T02:13:22.974624" 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-08-23T02:13:22.960091" elapsed="0.014779"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-08-23T02:13:22.975487" elapsed="0.001175"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:22.979127" 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-08-23T02:13:22.977985" elapsed="0.001491"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-08-23T02:13:22.980531" elapsed="0.000065"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:22.979787" elapsed="0.000909"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:22.979687" elapsed="0.001242"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-08-23T02:13:22.981783" elapsed="0.000293"/>
</return>
<status status="PASS" start="2026-08-23T02:13:22.981228" elapsed="0.000961"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:22.981141" elapsed="0.001197"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-08-23T02:13:22.982534" elapsed="0.000037"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-23T02:13:22.990092" elapsed="0.000147"/>
</kw>
<msg time="2026-08-23T02:13:22.990281" 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-08-23T02:13:22.989563" elapsed="0.000812"/>
</kw>
<kw name="Open 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-08-23T02:13:22.990621" elapsed="0.000036"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:22.990914" elapsed="0.000037"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:13:22.983770" elapsed="0.007297"/>
</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-08-23T02:13:22.632556" elapsed="0.358759"/>
</kw>
<msg time="2026-08-23T02:13:22.991468" 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-08-23T02:13:22.631688" elapsed="0.359833"/>
</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-08-23T02:13:22.631212" elapsed="0.360389"/>
</kw>
<msg time="2026-08-23T02:13:22.991641" 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-08-23T02:13:22.630696" elapsed="0.360989"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-23T02:13:22.995430" elapsed="0.000167"/>
</kw>
<msg time="2026-08-23T02:13:22.995640" 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-08-23T02:13:22.994526" elapsed="0.001174"/>
</kw>
<kw name="Open 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-08-23T02:13:22.995878" elapsed="0.000023"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:22.996057" elapsed="0.000020"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:13:22.992081" elapsed="0.004057"/>
</kw>
<msg time="2026-08-23T02:13:22.996227" 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-08-23T02:13:22.629927" elapsed="0.366324"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:22.996672" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:22.996425" elapsed="0.000288"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-23T02:13:22.996758" 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-08-23T02:13:22.629054" elapsed="0.367847"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:13:22.628877" elapsed="0.368060"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:13:22.628734" elapsed="0.368236"/>
</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-08-23T02:13:22.625075" elapsed="0.371948"/>
</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-08-23T02:13:22.997175" elapsed="0.000209"/>
</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-08-23T02:13:23.010858" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:23.010733" elapsed="0.000173"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:23.010714" elapsed="0.000214"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:13:23.011188" level="INFO">index=18
host=10.30.170.120
alias=None
port=22
timeout=10 seconds
newline=

prompt=&gt;
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-08-23T02:13:23.011290" level="INFO">${current_ssh_connection_object} = index=18
host=10.30.170.120
alias=None
port=22
timeout=10 seconds
newline=

prompt=&gt;
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-08-23T02:13:23.011079" elapsed="0.000237"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:23.011719" level="INFO">{}</msg>
<arg>${connection_index_dict}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:23.011465" elapsed="0.000297"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:23.012200" level="INFO">1</msg>
<arg>${member_index}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:23.011926" elapsed="0.000317"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:13:23.013005" 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-08-23T02:13:23.012763" elapsed="0.000353">Dictionary does not contain key '1'.</status>
</kw>
<msg time="2026-08-23T02:13:23.013223" level="INFO">${status} = FAIL</msg>
<msg time="2026-08-23T02:13:23.013268" 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-08-23T02:13:23.012400" elapsed="0.000891"/>
</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-08-23T02:13:23.013589" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:23.013366" elapsed="0.000299"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:23.013348" elapsed="0.000341"/>
</if>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:13:23.014441" level="INFO">${ip_address} = 10.30.170.114</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-08-23T02:13:23.014179" elapsed="0.000287"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-08-23T02:13:23.014562" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T02:13:23.014716" level="INFO">${odl_ip} = 10.30.170.114</msg>
<var>${odl_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-08-23T02:13:23.013907" elapsed="0.000834"/>
</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-08-23T02:13:23.014917" elapsed="0.000597"/>
</kw>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:13:23.015794" level="INFO">index=22
host=10.30.170.114
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-08-23T02:13:23.015913" level="INFO">${karaf_connection_object} = index=22
host=10.30.170.114
alias=None
port=8101
timeout=10 seconds
newline=

prompt=opendaylight-user
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_err...</msg>
<var>${karaf_connection_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-08-23T02:13:23.015687" elapsed="0.000253"/>
</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-08-23T02:13:23.016100" elapsed="0.002169"/>
</kw>
<kw name="Login" owner="SSHLibrary">
<msg time="2026-08-23T02:13:23.018697" level="INFO">Logging into '10.30.170.114:8101' as 'karaf'.</msg>
<msg time="2026-08-23T02:13:23.166846" 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-08-23T02:13:23.018434" elapsed="0.148501"/>
</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">
<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-08-23T02:13:23.170514" elapsed="0.000216"/>
</kw>
<msg time="2026-08-23T02:13:23.170905" 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-08-23T02:13:23.169944" elapsed="0.001028"/>
</kw>
<kw name="Open 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-08-23T02:13:23.171130" elapsed="0.000023"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:23.171291" elapsed="0.000020"/>
</kw>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:13:23.167724" elapsed="0.003647"/>
</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-08-23T02:13:23.167196" elapsed="0.004221"/>
</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-08-23T02:13:23.010463" elapsed="0.161003"/>
</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-08-23T02:13:22.998117" elapsed="0.173395"/>
</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-08-23T02:13:22.997725" elapsed="0.173837"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:13:22.997586" elapsed="0.174015"/>
</iter>
<var>${index}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="PASS" start="2026-08-23T02:13:22.997438" elapsed="0.174194"/>
</for>
<arg>http_timeout=${http_timeout}</arg>
<doc>Initialize ClusterManagement. Open ssh karaf connections to each ODL.</doc>
<status status="PASS" start="2026-08-23T02:13:22.606303" elapsed="0.565384"/>
</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-08-23T02:13:23.174504" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:23.174391" elapsed="0.000160"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:23.174370" elapsed="0.000204"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:13:23.179395" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:23.179289" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:23.179271" elapsed="0.000192"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:13:23.180434" 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-08-23T02:13:23.180054" elapsed="0.000407"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:13:23.180975" 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-08-23T02:13:23.180658" elapsed="0.000344"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:13:23.181047" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:13:23.181200" 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-08-23T02:13:23.179686" elapsed="0.001538"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:13:23.186485" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:23.186377" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:23.186358" 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-08-23T02:13:23.187863" elapsed="0.000025"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:23.187665" elapsed="0.000324"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:23.187646" elapsed="0.000369"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:13:23.188568" level="INFO">${karaf_connection_index} = 22</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-08-23T02:13:23.188160" elapsed="0.000448"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:13:23.189091" level="INFO">${current_connection_index} = 18</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-08-23T02:13:23.188853" elapsed="0.000277"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:13:23.222833" 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 "/ "n "e "t "[78Cc "[A[78Co</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:13:23.190719" elapsed="0.032276"/>
</kw>
<msg time="2026-08-23T02:13:23.223146" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:13:23.223218" 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-08-23T02:13:23.189353" elapsed="0.033917"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:13:23.299404" level="INFO">"n "f "- "c "s "i "t "- "1 "n "o "d "e "- "g "a "t "e "- "u "s "e "r "f "e "a "t "u "r "e "s "- "a "l "l "- "v "a "n "a "d "i "u "m "/ "t "e "s "t "/ "c "s "i "t "/ "s "u "i "t "e "s "/ "n "e "t "c "o "n "f "/ "n "o "t "i "f "i "c "a "[78Ct "[A[78Ci
 "o "n "s "/ "n "o "t "i "f "i "c "a "t "i "o "n "s "_ "b "a "s "i "c ". "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-08-23T02:13:23.224911" elapsed="0.074659"/>
</kw>
<msg time="2026-08-23T02:13:23.299721" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:13:23.299821" level="INFO">${message_wait} =  "n "f "- "c "s "i "t "- "1 "n "o "d "e "- "g "a "t "e "- "u "s "e "r "f "e "a "t "u "r "e "s "- "a "l "l "- "v "a "n "a ...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:13:23.223525" elapsed="0.076370"/>
</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-08-23T02:13:23.300388" elapsed="0.000047"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:23.300067" elapsed="0.000465"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:23.300045" elapsed="0.000515"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:23.301261" level="INFO"> "n "f "- "c "s "i "t "- "1 "n "o "d "e "- "g "a "t "e "- "u "s "e "r "f "e "a "t "u "r "e "s "- "a "l "l "- "v "a "n "a "d "i "u "m "/ "t "e "s "t "/ "c "s "i "t "/ "s "u "i "t "e "s "/ "n "e "t "c "o "n "f "/ "n "o "t "i "f "i "c "a "[78Ct "[A[78Ci
 "o "n "s "/ "n "o "t "i "f "i "c "a "t "i "o "n "s "_ "b "a "s "i "c ". "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-08-23T02:13:23.300704" elapsed="0.000676"/>
</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-08-23T02:13:23.301814" elapsed="0.000072"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:23.301504" elapsed="0.000481"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:23.301484" elapsed="0.000528"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:13:23.302046" 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-08-23T02:13:23.306003" elapsed="0.000158"/>
</kw>
<msg time="2026-08-23T02:13:23.306206" 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-08-23T02:13:23.303914" elapsed="0.002354"/>
</kw>
<kw name="Open 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-08-23T02:13:23.306472" elapsed="0.000024"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:23.306717" elapsed="0.000023"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:13:23.303219" elapsed="0.003688"/>
</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-08-23T02:13:23.302303" elapsed="0.004699"/>
</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-08-23T02:13:23.187323" elapsed="0.119776"/>
</kw>
<msg time="2026-08-23T02:13:23.307190" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:13:23.307233" level="INFO">${message} =  "n "f "- "c "s "i "t "- "1 "n "o "d "e "- "g "a "t "e "- "u "s "e "r "f "e "a "t "u "r "e "s "- "a "l "l "- "v "a "n "a ...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:13:23.186703" elapsed="0.120565"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:13:23.307453" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:13:23.307344" elapsed="0.000169"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:23.307325" 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-08-23T02:13:23.307992" 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-08-23T02:13:23.308381" elapsed="0.000026"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:13:23.308456" 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-08-23T02:13:23.186089" elapsed="0.122475"/>
</kw>
<msg time="2026-08-23T02:13:23.308656" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:13:23.308700" level="INFO">${output} =  "n "f "- "c "s "i "t "- "1 "n "o "d "e "- "g "a "t "e "- "u "s "e "r "f "e "a "t "u "r "e "s "- "a "l "l "- "v "a "n "a ...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:13:23.181586" elapsed="0.127149"/>
</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-08-23T02:13:23.309087" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:23.308812" elapsed="0.000330"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:23.308795" elapsed="0.000370"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:13:23.181445" elapsed="0.127743"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:13:23.181277" elapsed="0.127940"/>
</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-08-23T02:13:23.179001" elapsed="0.130268"/>
</kw>
<doc>Log suite name to karaf log, useful in suite setup.</doc>
<status status="PASS" start="2026-08-23T02:13:23.172292" elapsed="0.137030"/>
</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-08-23T02:13:23.171855" elapsed="0.137506"/>
</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-08-23T02:13:22.601048" elapsed="0.708361"/>
</kw>
<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-08-23T02:13:23.323508" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:23.323401" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:23.323383" elapsed="0.000193"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:13:23.323879" level="INFO">index=18
host=10.30.170.120
alias=None
port=22
timeout=10 seconds
newline=

prompt=&gt;
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-08-23T02:13:23.323983" level="INFO">${current_ssh_connection_object} = index=18
host=10.30.170.120
alias=None
port=22
timeout=10 seconds
newline=

prompt=&gt;
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-08-23T02:13:23.323726" elapsed="0.000284"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:23.324420" level="INFO">{1: 22}</msg>
<arg>${connection_index_dict}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:23.324161" elapsed="0.000303"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:23.324874" level="INFO">1</msg>
<arg>${member_index}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:23.324615" elapsed="0.000303"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get From Dictionary" owner="Collections">
<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-08-23T02:13:23.325461" elapsed="0.000180"/>
</kw>
<msg time="2026-08-23T02:13:23.325740" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:13:23.325785" level="INFO">${old_connection_index} = 22</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-08-23T02:13:23.325076" elapsed="0.000733"/>
</kw>
<if>
<branch type="IF" condition="'${status}'=='PASS'">
<kw name="Run Keywords" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${old_connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-23T02:13:23.326687" elapsed="0.000137"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:13:23.341254" level="INFO">logout</msg>
<arg>logout</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:13:23.327334" elapsed="0.013978"/>
</kw>
<arg>SSHLibrary.Write</arg>
<arg>logout</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:13:23.327008" elapsed="0.014355"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-08-23T02:13:23.341871" elapsed="0.000206"/>
</kw>
<arg>SSHLibrary.Close_Connection</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:13:23.341533" elapsed="0.000592"/>
</kw>
<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="PASS" start="2026-08-23T02:13:23.326169" elapsed="0.016015"/>
</kw>
<status status="PASS" start="2026-08-23T02:13:23.325904" elapsed="0.016330"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:23.325886" elapsed="0.016374"/>
</if>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:13:23.343032" level="INFO">${ip_address} = 10.30.170.114</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-08-23T02:13:23.342736" elapsed="0.000322"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-08-23T02:13:23.343106" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:13:23.343256" level="INFO">${odl_ip} = 10.30.170.114</msg>
<var>${odl_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-08-23T02:13:23.342463" elapsed="0.000818"/>
</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-08-23T02:13:23.343434" elapsed="0.000432"/>
</kw>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:13:23.344140" level="INFO">index=23
host=10.30.170.114
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-08-23T02:13:23.344238" level="INFO">${karaf_connection_object} = index=23
host=10.30.170.114
alias=None
port=8101
timeout=10 seconds
newline=

prompt=opendaylight-user
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_err...</msg>
<var>${karaf_connection_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-08-23T02:13:23.344034" elapsed="0.000231"/>
</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-08-23T02:13:23.344410" elapsed="0.045096"/>
</kw>
<kw name="Login" owner="SSHLibrary">
<msg time="2026-08-23T02:13:23.390076" level="INFO">Logging into '10.30.170.114:8101' as 'karaf'.</msg>
<msg time="2026-08-23T02:13:23.523264" 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-08-23T02:13:23.389741" elapsed="0.133629"/>
</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">
<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-08-23T02:13:23.527240" elapsed="0.000149"/>
</kw>
<msg time="2026-08-23T02:13:23.527433" 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-08-23T02:13:23.526642" elapsed="0.000862"/>
</kw>
<kw name="Open 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-08-23T02:13:23.527688" elapsed="0.000026"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:23.527871" elapsed="0.000021"/>
</kw>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:13:23.524358" elapsed="0.003599"/>
</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-08-23T02:13:23.523700" elapsed="0.004304"/>
</kw>
<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-08-23T02:13:23.321707" elapsed="0.206347"/>
</kw>
<kw name="Open_Connection_To_Tools_System" owner="SSHKeywords">
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:13:23.532805" level="INFO">${tools_connection} = 24</msg>
<var>${tools_connection}</var>
<arg>${ip_address}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-08-23T02:13:23.532420" elapsed="0.000412"/>
</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-08-23T02:13:23.534694" level="INFO">Length is 0.</msg>
<msg time="2026-08-23T02:13:23.534773" 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-08-23T02:13:23.534254" elapsed="0.000544"/>
</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-08-23T02:13:23.534973" elapsed="0.000322"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-08-23T02:13:23.536165" level="INFO">Logging into '10.30.170.120:22' as 'jenkins'.</msg>
<msg time="2026-08-23T02:13:23.839113" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-186-generic x86_64)

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

 System information as of Sun Aug 23 02:12:42 UTC 2026

  System load:  0.0                Processes:             116
  Usage of /:   21.4% of 38.58GB   Users logged in:       1
  Memory usage: 5%                 IPv4 address for ens3: 10.30.170.120
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

42 updates can be applied immediately.
35 of these updates are standard security updates.
To see these additional updates run: apt list --upgradable

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

New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sun Aug 23 02:12:44 2026 from 10.30.171.240
[?2004h[jenkins@releng-19126-54-1-docker-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-08-23T02:13:23.535850" elapsed="0.303349"/>
</kw>
<msg time="2026-08-23T02:13:23.839260" 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-08-23T02:13:23.535465" elapsed="0.303853"/>
</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-08-23T02:13:23.533800" elapsed="0.305607"/>
</kw>
<msg time="2026-08-23T02:13:23.839465" 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-08-23T02:13:23.533414" elapsed="0.306097"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-08-23T02:13:23.533085" elapsed="0.306497"/>
</kw>
<return>
<value>${tools_connection}</value>
<status status="PASS" start="2026-08-23T02:13:23.839627" elapsed="0.000037"/>
</return>
<doc>Open a connection to the tools system at ${ip_address} and return its identifier.</doc>
<status status="PASS" start="2026-08-23T02:13:23.532082" elapsed="0.307693"/>
</kw>
<kw name="Put File" owner="SSHLibrary">
<msg time="2026-08-23T02:13:23.846220" level="INFO">[chan 1] Opened sftp connection (server version 3)</msg>
<msg time="2026-08-23T02:13:23.855128" level="INFO">'/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/notifications/../../../../tools/wstools/wsreceiver.py' -&gt; '/home/jenkins//wsreceiver.py'</msg>
<arg>/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/notifications/../../../../tools/wstools/wsreceiver.py</arg>
<doc>Uploads file(s) from the local machine to the remote machine.</doc>
<status status="PASS" start="2026-08-23T02:13:23.839960" elapsed="0.015255"/>
</kw>
<kw name="Put File" owner="SSHLibrary">
<msg time="2026-08-23T02:13:23.862805" level="INFO">'/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/notifications/../../../../tools/wstools/ssereceiver.py' -&gt; '/home/jenkins//ssereceiver.py'</msg>
<arg>/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/notifications/../../../../tools/wstools/ssereceiver.py</arg>
<doc>Uploads file(s) from the local machine to the remote machine.</doc>
<status status="PASS" start="2026-08-23T02:13:23.855458" elapsed="0.007470"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-23T02:13:23.863392" level="INFO">Executing command 'sudo apt-get install -y python3-pip'.</msg>
<msg time="2026-08-23T02:13:24.513996" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-23T02:13:24.514263" level="INFO">${stdout} = Reading package lists...
Building dependency tree...
Reading state information...
python3-pip is already the newest version (22.0.2+dfsg-1ubuntu0.7).
0 upgraded, 0 newly installed, 0 to remove and 38 ...</msg>
<msg time="2026-08-23T02:13:24.514369" level="INFO">${stderr} = </msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>sudo apt-get install -y python3-pip</arg>
<arg>return_stdout=True</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-23T02:13:23.863172" elapsed="0.651248"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:24.515504" level="INFO">Reading package lists...
Building dependency tree...
Reading state information...
python3-pip is already the newest version (22.0.2+dfsg-1ubuntu0.7).
0 upgraded, 0 newly installed, 0 to remove and 38 not upgraded.</msg>
<arg>${stdout}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:24.514818" elapsed="0.000791"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:24.516527" level="INFO"/>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:24.515986" elapsed="0.000632"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-23T02:13:24.517329" level="INFO">Executing command 'python3 -m pip install --user --upgrade pip setuptools wheel packaging ordered-set more_itertools jaraco.text importlib_resources importlib_metadata tomli platformdirs'.</msg>
<msg time="2026-08-23T02:13:30.635703" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-23T02:13:30.636136" level="INFO">${stdout} = Requirement already satisfied: pip in /usr/lib/python3/dist-packages (22.0.2)
Collecting pip
  Downloading pip-26.2.1-py3-none-any.whl (1.8 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.8/1.8 MB...</msg>
<msg time="2026-08-23T02:13:30.636250" level="INFO">${stderr} =   WARNING: The script pygmentize is installed in '/home/jenkins/.local/bin' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-scr...</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>python3 -m pip install --user --upgrade pip setuptools wheel packaging ordered-set more_itertools jaraco.text importlib_resources importlib_metadata tomli platformdirs</arg>
<arg>return_stdout=True</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-23T02:13:24.517000" elapsed="6.119308"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:30.637618" level="INFO">Requirement already satisfied: pip in /usr/lib/python3/dist-packages (22.0.2)
Collecting pip
  Downloading pip-26.2.1-py3-none-any.whl (1.8 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.8/1.8 MB 29.3 MB/s eta 0:00:00
Requirement already satisfied: setuptools in /usr/lib/python3/dist-packages (59.6.0)
Collecting setuptools
  Downloading setuptools-84.0.0-py3-none-any.whl (818 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 818.2/818.2 KB 45.7 MB/s eta 0:00:00
Requirement already satisfied: wheel in /usr/lib/python3/dist-packages (0.37.1)
Collecting wheel
  Downloading wheel-0.48.0-py3-none-any.whl (33 kB)
Requirement already satisfied: packaging in /usr/lib/python3/dist-packages (21.3)
Collecting packaging
  Downloading packaging-26.3-py3-none-any.whl (129 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 130.0/130.0 KB 17.4 MB/s eta 0:00:00
Collecting ordered-set
  Downloading ordered_set-4.1.0-py3-none-any.whl (7.6 kB)
Requirement already satisfied: more_itertools in /usr/lib/python3/dist-packages (8.10.0)
Collecting more_itertools
  Downloading more_itertools-11.1.0-py3-none-any.whl (72 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 72.2/72.2 KB 9.9 MB/s eta 0:00:00
Collecting jaraco.text
  Downloading jaraco_text-4.3.0-py3-none-any.whl (14 kB)
Collecting importlib_resources
  Downloading importlib_resources-7.1.0-py3-none-any.whl (37 kB)
Requirement already satisfied: importlib_metadata in /usr/lib/python3/dist-packages (4.6.4)
Collecting importlib_metadata
  Downloading importlib_metadata-9.0.0-py3-none-any.whl (27 kB)
Collecting tomli
  Downloading tomli-2.4.1-py3-none-any.whl (14 kB)
Requirement already satisfied: platformdirs in /usr/lib/python3/dist-packages (2.5.1)
Collecting platformdirs
  Downloading platformdirs-4.11.3-py3-none-any.whl (23 kB)
Collecting jaraco.functools
  Downloading jaraco_functools-4.6.0-py3-none-any.whl (11 kB)
Collecting typer-slim
  Downloading typer_slim-0.24.0-py3-none-any.whl (3.4 kB)
Collecting jaraco.context&gt;=4.1
  Downloading jaraco_context-6.1.2-py3-none-any.whl (7.9 kB)
Collecting zipp&gt;=3.20
  Downloading zipp-4.1.0-py3-none-any.whl (10 kB)
Collecting backports.tarfile
  Downloading backports.tarfile-1.2.0-py3-none-any.whl (30 kB)
Collecting typer&gt;=0.24.0
  Downloading typer-0.27.1-py3-none-any.whl (122 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 122.9/122.9 KB 11.8 MB/s eta 0:00:00
Collecting shellingham&gt;=1.3.0
  Downloading shellingham-1.5.4-py2.py3-none-any.whl (9.8 kB)
Collecting rich&gt;=13.8.0
  Downloading rich-15.0.0-py3-none-any.whl (310 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 310.7/310.7 KB 25.6 MB/s eta 0:00:00
Collecting annotated-doc&gt;=0.0.2
  Downloading annotated_doc-0.0.5-py3-none-any.whl (5.3 kB)
Collecting pygments&lt;3.0.0,&gt;=2.13.0
  Downloading pygments-2.21.0-py3-none-any.whl (1.3 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.3/1.3 MB 35.6 MB/s eta 0:00:00
Collecting markdown-it-py&gt;=2.2.0
  Downloading markdown_it_py-4.2.0-py3-none-any.whl (91 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 91.7/91.7 KB 5.7 MB/s eta 0:00:00
Collecting mdurl~=0.1
  Downloading mdurl-0.1.2-py3-none-any.whl (10.0 kB)
Installing collected packages: zipp, tomli, shellingham, setuptools, pygments, platformdirs, pip, packaging, ordered-set, more_itertools, mdurl, importlib_resources, backports.tarfile, annotated-doc, wheel, markdown-it-py, jaraco.functools, jaraco.context, importlib_metadata, rich, typer, typer-slim, jaraco.text
Successfully installed annotated-doc-0.0.5 backports.tarfile-1.2.0 importlib_metadata-9.0.0 importlib_resources-7.1.0 jaraco.context-6.1.2 jaraco.functools-4.6.0 jaraco.text-4.3.0 markdown-it-py-4.2.0 mdurl-0.1.2 more_itertools-11.1.0 ordered-set-4.1.0 packaging-26.3 pip-26.2.1 platformdirs-4.11.3 pygments-2.21.0 rich-15.0.0 setuptools-84.0.0 shellingham-1.5.4 tomli-2.4.1 typer-0.27.1 typer-slim-0.24.0 wheel-0.48.0 zipp-4.1.0</msg>
<arg>${stdout}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:30.636928" elapsed="0.000880"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:30.638737" level="INFO">  WARNING: The script pygmentize is installed in '/home/jenkins/.local/bin' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
  WARNING: The scripts pip, pip3 and pip3.10 are installed in '/home/jenkins/.local/bin' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
  WARNING: The script wheel is installed in '/home/jenkins/.local/bin' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
  WARNING: The script markdown-it is installed in '/home/jenkins/.local/bin' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
  WARNING: The script typer is installed in '/home/jenkins/.local/bin' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
virtualenv 20.13.0+ds requires platformdirs&lt;3,&gt;=2, but you have platformdirs 4.11.3 which is incompatible.</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:30.638190" elapsed="0.000707"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-23T02:13:30.639599" level="INFO">Executing command 'python3 -m pip install --user websocket-client asyncio aiohttp aiohttp-sse-client coroutine'.</msg>
<msg time="2026-08-23T02:13:35.812119" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-23T02:13:35.812553" level="INFO">${stdout} = Collecting websocket-client
  Downloading websocket_client-1.9.0-py3-none-any.whl.metadata (8.3 kB)
Collecting asyncio
  Downloading asyncio-4.0.0-py3-none-any.whl.metadata (994 bytes)
Collecting aioh...</msg>
<msg time="2026-08-23T02:13:35.812675" level="INFO">${stderr} = WARNING: Error parsing dependencies of devscripts: Invalid version: '2.22.1ubuntu1.2'
  WARNING: The script wsdump is installed in '/home/jenkins/.local/bin' which is not on PATH.
  Consider adding th...</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<arg>python3 -m pip install --user websocket-client asyncio aiohttp aiohttp-sse-client coroutine</arg>
<arg>return_stdout=True</arg>
<arg>return_stderr=True</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-23T02:13:30.639260" elapsed="5.173487"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:35.814416" level="INFO">Collecting websocket-client
  Downloading websocket_client-1.9.0-py3-none-any.whl.metadata (8.3 kB)
Collecting asyncio
  Downloading asyncio-4.0.0-py3-none-any.whl.metadata (994 bytes)
Collecting aiohttp
  Downloading aiohttp-3.14.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (8.3 kB)
Collecting aiohttp-sse-client
  Downloading aiohttp_sse_client-0.2.1-py2.py3-none-any.whl.metadata (3.7 kB)
Collecting coroutine
  Downloading coroutine-0.0.2.tar.gz (8.5 kB)
  Installing build dependencies: started
  Installing build dependencies: finished with status 'done'
  Getting requirements to build wheel: started
  Getting requirements to build wheel: finished with status 'done'
  Preparing metadata (pyproject.toml): started
  Preparing metadata (pyproject.toml): finished with status 'done'
Collecting aiohappyeyeballs&gt;=2.5.0 (from aiohttp)
  Downloading aiohappyeyeballs-2.7.1-py3-none-any.whl.metadata (5.9 kB)
Collecting aiosignal&gt;=1.4.0 (from aiohttp)
  Downloading aiosignal-1.4.0-py3-none-any.whl.metadata (3.7 kB)
Collecting async-timeout&lt;6.0,&gt;=4.0 (from aiohttp)
  Downloading async_timeout-5.0.1-py3-none-any.whl.metadata (5.1 kB)
Requirement already satisfied: attrs&gt;=17.3.0 in /usr/lib/python3/dist-packages (from aiohttp) (21.2.0)
Collecting frozenlist&gt;=1.1.1 (from aiohttp)
  Downloading frozenlist-1.8.0-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl.metadata (20 kB)
Collecting multidict&lt;7.0,&gt;=4.5 (from aiohttp)
  Downloading multidict-6.7.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (5.3 kB)
Collecting propcache&gt;=0.2.0 (from aiohttp)
  Downloading propcache-0.5.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (16 kB)
Collecting typing_extensions&gt;=4.4 (from aiohttp)
  Downloading typing_extensions-4.16.0-py3-none-any.whl.metadata (3.3 kB)
Collecting yarl&lt;2.0,&gt;=1.17.0 (from aiohttp)
  Downloading yarl-1.24.5-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (103 kB)
Requirement already satisfied: idna&gt;=2.0 in /usr/lib/python3/dist-packages (from yarl&lt;2.0,&gt;=1.17.0-&gt;aiohttp) (3.3)
Downloading websocket_client-1.9.0-py3-none-any.whl (82 kB)
Downloading asyncio-4.0.0-py3-none-any.whl (5.6 kB)
Downloading aiohttp-3.14.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (1.7 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.7/1.7 MB 48.7 MB/s  0:00:00
Downloading async_timeout-5.0.1-py3-none-any.whl (6.2 kB)
Downloading multidict-6.7.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (243 kB)
Downloading yarl-1.24.5-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (110 kB)
Downloading aiohttp_sse_client-0.2.1-py2.py3-none-any.whl (7.0 kB)
Downloading aiohappyeyeballs-2.7.1-py3-none-any.whl (15 kB)
Downloading aiosignal-1.4.0-py3-none-any.whl (7.5 kB)
Downloading frozenlist-1.8.0-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (219 kB)
Downloading propcache-0.5.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (60 kB)
Downloading typing_extensions-4.16.0-py3-none-any.whl (45 kB)
Building wheels for collected packages: coroutine
  Building wheel for coroutine (pyproject.toml): started
  Building wheel for coroutine (pyproject.toml): finished with status 'done'
  Created wheel for coroutine: filename=coroutine-0.0.2-py3-none-any.whl size=10791 sha256=5bf79a651d6ccff1650b3324f5371655d8d50deffcb193eb354c01f1507df2cb
  Stored in directory: /home/jenkins/.cache/pip/wheels/cf/08/83/85cf872956c5947cc333efd19665a7ed6385090531dce0e3ce
Successfully built coroutine
Installing collected packages: coroutine, websocket-client, typing_extensions, propcache, frozenlist, asyncio, async-timeout, aiohappyeyeballs, multidict, aiosignal, yarl, aiohttp, aiohttp-sse-client

Successfully installed aiohappyeyeballs-2.7.1 aiohttp-3.14.3 aiohttp-sse-client-0.2.1 aiosignal-1.4.0 async-timeout-5.0.1 asyncio-4.0.0 coroutine-0.0.2 frozenlist-1.8.0 multidict-6.7.1 propcache-0.5.2 typing_extensions-4.16.0 websocket-client-1.9.0 yarl-1.24.5</msg>
<arg>${stdout}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:35.813369" elapsed="0.001735"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:35.816144" level="INFO">WARNING: Error parsing dependencies of devscripts: Invalid version: '2.22.1ubuntu1.2'
  WARNING: The script wsdump is installed in '/home/jenkins/.local/bin' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.</msg>
<arg>${stderr}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:35.815502" elapsed="0.000769"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:13:35.817326" level="INFO">Creating Session using : alias=restconf, url=http://10.30.170.114:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x72b0ece20bd0&gt;, timeout=None, proxies=None, verify=False,                     debug=0 </msg>
<arg>restconf</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-08-23T02:13:35.816655" elapsed="0.001066"/>
</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-08-23T02:13:35.823717" elapsed="0.000039"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:35.823436" elapsed="0.000433"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:35.823385" elapsed="0.000541"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:13:35.824411" level="INFO">${karaf_connection_index} = 23</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-08-23T02:13:35.824177" elapsed="0.000260"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:13:35.824772" level="INFO">${current_connection_index} = 24</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-08-23T02:13:35.824594" elapsed="0.000203"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:13:35.832006" level="INFO">@root&gt;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-08-23T02:13:35.825342" elapsed="0.006722"/>
</kw>
<msg time="2026-08-23T02:13:35.832168" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:13:35.832213" level="INFO">${message_write} = @root&gt;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-08-23T02:13:35.824978" elapsed="0.007258"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:13:35.846356" 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-08-23T02:13:35.832752" elapsed="0.013666"/>
</kw>
<msg time="2026-08-23T02:13:35.846516" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:13:35.846560" 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-08-23T02:13:35.832413" elapsed="0.014172"/>
</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-08-23T02:13:35.846899" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:35.846660" elapsed="0.000295"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:35.846641" elapsed="0.000338"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:35.847420" 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-08-23T02:13:35.847151" elapsed="0.000317"/>
</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-08-23T02:13:35.847744" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:35.847533" elapsed="0.000264"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:35.847516" elapsed="0.000305"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:13:35.847870" 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-08-23T02:13:35.849656" elapsed="0.000142"/>
</kw>
<msg time="2026-08-23T02:13:35.849855" 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-08-23T02:13:35.849027" elapsed="0.000892"/>
</kw>
<kw name="Open 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-08-23T02:13:35.850078" elapsed="0.000023"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:35.850241" elapsed="0.000020"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:13:35.848692" elapsed="0.001630"/>
</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-08-23T02:13:35.848180" elapsed="0.002188"/>
</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-08-23T02:13:35.818660" elapsed="0.031803"/>
</kw>
<doc>SSH-login to mininet machine, create HTTP session,
prepare directories for responses, put Python tool to mininet machine, setup imported resources.</doc>
<status status="PASS" start="2026-08-23T02:13:22.600719" elapsed="13.249799"/>
</kw>
<test id="s1-s6-s1-t1" name="Create_DCN_Stream" line="62">
<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-08-23T02:13:35.853897" elapsed="0.000210"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:13:35.853615" elapsed="0.000546"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:13:35.855279" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:35.855143" elapsed="0.000184"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:35.855119" elapsed="0.000230"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:13:35.860469" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:35.860361" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:35.860342" elapsed="0.000195"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:13:35.861540" 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-08-23T02:13:35.861158" elapsed="0.000409"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:13:35.862039" 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-08-23T02:13:35.861726" elapsed="0.000339"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:13:35.862110" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:13:35.862264" 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-08-23T02:13:35.860763" elapsed="0.001526"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:13:35.867708" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:35.867601" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:35.867582" 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-08-23T02:13:35.869030" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:35.868923" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:35.868905" elapsed="0.000193"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:13:35.869603" level="INFO">${karaf_connection_index} = 23</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-08-23T02:13:35.869240" elapsed="0.000389"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:13:35.870064" level="INFO">${current_connection_index} = 24</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-08-23T02:13:35.869784" elapsed="0.000314"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:13:35.906824" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:13:35.870648" elapsed="0.036385"/>
</kw>
<msg time="2026-08-23T02:13:35.907214" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:13:35.907261" 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 "n "e "t "c "o "n "f "...</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-08-23T02:13:35.870259" elapsed="0.037037"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:13:35.957250" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "N "o "t "i "f "i "c "a "t "i "o "n "s ". "N "o "t "i "f "i "c "a "t "i "o "n "s "[C "B "a "s "i "c ". "C "r "e "a "t "e "_ "D "C "N "_ "S "t "r "e "a "m "[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-08-23T02:13:35.907928" elapsed="0.049596"/>
</kw>
<msg time="2026-08-23T02:13:35.957751" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:13:35.957800" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "N "o "t "i "f "i "c "a "t "i "o "n "s ". "N "o "t "i "f "i "c "a "t "i "o "n "s "[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-08-23T02:13:35.907474" elapsed="0.050390"/>
</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-08-23T02:13:35.958333" elapsed="0.000030"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:35.958001" elapsed="0.000428"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:35.957963" elapsed="0.000499"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:35.959123" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "N "o "t "i "f "i "c "a "t "i "o "n "s ". "N "o "t "i "f "i "c "a "t "i "o "n "s "[C "B "a "s "i "c ". "C "r "e "a "t "e "_ "D "C "N "_ "S "t "r "e "a "m "[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-08-23T02:13:35.958615" elapsed="0.000585"/>
</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-08-23T02:13:35.959596" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:35.959269" elapsed="0.000408"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:35.959250" elapsed="0.000453"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:13:35.959747" elapsed="0.000053"/>
</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-08-23T02:13:35.963416" elapsed="0.000443"/>
</kw>
<msg time="2026-08-23T02:13:35.963936" 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-08-23T02:13:35.962529" elapsed="0.001520"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<arg>127.0.0.1</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:35.965295" elapsed="0.000042"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:35.966422" elapsed="0.000044"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:13:35.960827" elapsed="0.005725"/>
</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-08-23T02:13:35.960149" elapsed="0.006534"/>
</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-08-23T02:13:35.868599" elapsed="0.098197"/>
</kw>
<msg time="2026-08-23T02:13:35.966969" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:13:35.967014" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "N "o "t "i "f "i "c "a "t "i "o "n "s ". "N "o "t "i "f "i "c "a "t "i "o "n "s "[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-08-23T02:13:35.867941" elapsed="0.099108"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:13:35.967239" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:13:35.967127" elapsed="0.000172"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:35.967108" elapsed="0.000217"/>
</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-08-23T02:13:35.967771" 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-08-23T02:13:35.968244" elapsed="0.000026"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:13:35.968320" 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-08-23T02:13:35.867264" elapsed="0.101181"/>
</kw>
<msg time="2026-08-23T02:13:35.968550" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:13:35.968599" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "N "o "t "i "f "i "c "a "t "i "o "n "s ". "N "o "t "i "f "i "c "a "t "i "o "n "s "[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-08-23T02:13:35.862671" elapsed="0.105972"/>
</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-08-23T02:13:35.969007" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:35.968722" elapsed="0.000341"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:35.968704" elapsed="0.000383"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:13:35.862528" elapsed="0.106582"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:13:35.862347" elapsed="0.106800"/>
</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-08-23T02:13:35.859997" elapsed="0.109215"/>
</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-08-23T02:13:35.854728" elapsed="0.114555"/>
</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-08-23T02:13:35.854310" elapsed="0.115031"/>
</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-08-23T02:13:35.851216" elapsed="0.118186"/>
</kw>
<kw name="Comment" owner="BuiltIn">
<arg>Create DCN subscription</arg>
<doc>Displays the given messages in the log file as keyword arguments.</doc>
<status status="PASS" start="2026-08-23T02:13:35.969634" elapsed="0.000305"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:13:35.970338" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/notifications/templates/subscribe.xml"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/notifications/templates/subscribe.xml&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:13:35.970551" level="INFO">${body} = &lt;input xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:remote"&gt;
  &lt;path xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology&lt;/path&gt;
  &lt;datastore xmlns="urn:sal:restco...</msg>
<var>${body}</var>
<arg>${TEMPLATE_FOLDER}/${RESTCONF_SUBSCRIBE_DATA}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:13:35.970123" elapsed="0.000460"/>
</kw>
<kw name="Generate URI" owner="Restconf">
<kw name="Generate RFC8040 URI" owner="Restconf">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:35.981717" level="INFO">${node_value_path} = </msg>
<var>${node_value_path}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:35.979471" elapsed="0.002274"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Set Variable" owner="BuiltIn">
<var>${node_value_path}</var>
<arg>${node_value_path}/${nv}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:35.982135" elapsed="0.000022"/>
</kw>
<var name="${nv}"/>
<status status="NOT RUN" start="2026-08-23T02:13:35.981974" elapsed="0.000220"/>
</iter>
<var>${nv}</var>
<value>@{node_value_list}</value>
<status status="NOT RUN" start="2026-08-23T02:13:35.981805" elapsed="0.000416"/>
</for>
<if>
<branch type="IF" condition="&quot;${datastore_flag}&quot; == &quot;config&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=config</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:35.982524" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:35.982284" elapsed="0.000297"/>
</branch>
<branch type="ELSE IF" condition="&quot;${datastore_flag}&quot;==&quot;operational&quot;">
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/${identifier}${node_value_path}?content=nonconfig</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:35.982875" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:35.982610" elapsed="0.000331"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:35.983483" level="INFO">${uri} = /rests/operations/sal-remote:create-data-change-event-subscription</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/operations/${identifier}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:35.983130" elapsed="0.000381"/>
</kw>
<status status="PASS" start="2026-08-23T02:13:35.982969" elapsed="0.000587"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:35.982267" elapsed="0.001311"/>
</if>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:13:35.983615" elapsed="0.000034"/>
</return>
<msg time="2026-08-23T02:13:35.983790" level="INFO">${uri} = /rests/operations/sal-remote:create-data-change-event-subscription</msg>
<var>${uri}</var>
<arg>${identifier}</arg>
<arg>${datastore_flag}</arg>
<arg>@{node_value_list}</arg>
<status status="PASS" start="2026-08-23T02:13:35.978972" elapsed="0.004847"/>
</kw>
<return>
<value>${uri}</value>
<status status="PASS" start="2026-08-23T02:13:35.983885" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:13:35.984033" level="INFO">${uri} = /rests/operations/sal-remote:create-data-change-event-subscription</msg>
<var>${uri}</var>
<arg>sal-remote:create-data-change-event-subscription</arg>
<arg>rpc</arg>
<doc>Returns the proper URI to use. Variable input error checking is done to ensure the ${datastore_flag} variable
is config, operational or rpc. @{node_value_list} is expected to be in the format of node=value. RFC8040 can
use that as is with '=' delimiter</doc>
<status status="PASS" start="2026-08-23T02:13:35.978409" elapsed="0.005649"/>
</kw>
<kw name="POST On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:13:35.992082" level="INFO">POST Request : url=http://10.30.170.114:8181/rests/operations/sal-remote:create-data-change-event-subscription 
 path_url=/rests/operations/sal-remote:create-data-change-event-subscription 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Content-Length': '324', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:remote"&gt;
  &lt;path xmlns:a="urn:TBD:params:xml:ns:yang:network-topology"&gt;/a:network-topology&lt;/path&gt;
  &lt;datastore xmlns="urn:sal:restconf:event:subscription"&gt;CONFIGURATION&lt;/datastore&gt;
  &lt;scope xmlns="urn:sal:restconf:event:subscription"&gt;BASE&lt;/scope&gt;
&lt;/input&gt;
 
 </msg>
<msg time="2026-08-23T02:13:35.992149" level="INFO">POST Response : url=http://10.30.170.114:8181/rests/operations/sal-remote:create-data-change-event-subscription 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:13:35.992378" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/sal-remote:create-data-change-event-subscription</msg>
<var>${resp}</var>
<arg>restconf</arg>
<arg>${uri}</arg>
<arg>headers=${SEND_ACCEPT_XML_HEADERS}</arg>
<arg>data=${body}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:13:35.984238" elapsed="0.008595">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/sal-remote:create-data-change-event-subscription</status>
</kw>
<kw name="Log_Response">
<arg>${resp}</arg>
<doc>Log response.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:35.993121" elapsed="0.000029"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${resp.status_code}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:35.993326" elapsed="0.000023"/>
</kw>
<kw name="Get Element Text" owner="XML">
<var>${stream_name}</var>
<arg>${resp.content}</arg>
<arg>stream-name</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:35.993502" elapsed="0.000021"/>
</kw>
<kw name="Set_Variable_If_At_Least_Calcium" owner="CompareStream">
<var>${RFC8040_DCN_STREAM_URI}</var>
<arg>${RFC8040_STREAMS_URI}/stream=${stream_name}</arg>
<arg>${RFC8040_STREAMS_URI}/stream/data-change-event-subscription/${NODES_STREAM_PATH}</arg>
<doc>Compare calcium to vanadium and return ${value_if_true} if vanadium is at least calcium, return ${value_if_false} otherwise.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:36.004570" elapsed="0.000050"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${RFC8040_DCN_STREAM_URI}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:36.004907" elapsed="0.000035"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${RFC8040_DCN_STREAM_URI}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:36.005214" elapsed="0.000038"/>
</kw>
<kw name="Teardown_Test_Show_Bugs_And_Start_Fast_Failing_If_Test_Failed" owner="SetupUtils" type="TEARDOWN">
<kw name="Run Keyword If Test Failed" owner="BuiltIn">
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.007286" level="INFO">${SuiteFastFail} = True</msg>
<arg>${SuiteFastFail}</arg>
<arg>True</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-23T02:13:36.006800" elapsed="0.000546"/>
</kw>
<arg>BuiltIn.Set_Suite_Variable</arg>
<arg>${SuiteFastFail}</arg>
<arg>True</arg>
<doc>Runs the given keyword with the given arguments, if the test failed.</doc>
<status status="PASS" start="2026-08-23T02:13:36.006226" elapsed="0.001194"/>
</kw>
<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-08-23T02:13:36.008631" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:36.008238" elapsed="0.000457"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.008217" elapsed="0.000505"/>
</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-08-23T02:13:36.008907" elapsed="0.000371"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.014502" 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-08-23T02:13:36.014019" elapsed="0.000511"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="NOT RUN" start="2026-08-23T02:13:36.014763" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:36.014606" elapsed="0.000200"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.014587" elapsed="0.000241"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.015389" level="INFO">${newline} = 
</msg>
<var>${newline}</var>
<arg>chr(10)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-23T02:13:36.015039" elapsed="0.000379"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:13:36.015939" level="INFO">${reference} = netconf_gate_userfeatures_txt_Notifications_Notifications_Basic_Create_DCN_Stream</msg>
<var>${reference}</var>
<arg>${SUITE_NAME}_${TEST_NAME}</arg>
<arg>[ /\.-]</arg>
<arg>_</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-23T02:13:36.015648" elapsed="0.000323"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<msg time="2026-08-23T02:13:36.016341" level="INFO">${reference} = netconf_gate_userfeatures_txt_notifications_notifications_basic_create_dcn_stream</msg>
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="PASS" start="2026-08-23T02:13:36.016148" elapsed="0.000221"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.016922" level="INFO">${msg} = ... click for list of related bugs or create a new one if needed (with the
"netconf_gate_userfeatures_txt_notifications_notifications_basic_create_dcn_stream"
reference somewhere inside)</msg>
<var>${msg}</var>
<arg>... click for list of related bugs or create a new one if needed (with the${newline}"${reference}"${newline}reference somewhere inside)</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:36.016534" elapsed="0.000417"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.017497" level="INFO">${bugs} = "https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=netconf_gate_userfeatures_txt_notifications_notifications_basic_create_dcn_stream&amp;order=bug_status"</msg>
<var>${bugs}</var>
<arg>"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=${reference}&amp;order=bug_status"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:36.017130" elapsed="0.000396"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.018205" level="INFO">Set test message to:
... click for list of related bugs or create a new one if needed (with the
"netconf_gate_userfeatures_txt_notifications_notifications_basic_create_dcn_stream"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=netconf_gate_userfeatures_txt_notifications_notifications_basic_create_dcn_stream&amp;order=bug_status"

HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/sal-remote:create-data-change-event-subscription</msg>
<arg>${msg}${newline}${bugs}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="PASS" start="2026-08-23T02:13:36.017683" elapsed="0.000576"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.018732" level="INFO">... click for list of related bugs or create a new one if needed (with the
"netconf_gate_userfeatures_txt_notifications_notifications_basic_create_dcn_stream"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=netconf_gate_userfeatures_txt_notifications_notifications_basic_create_dcn_stream&amp;order=bug_status"</msg>
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:36.018415" elapsed="0.000367"/>
</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-08-23T02:13:36.013658" elapsed="0.005195"/>
</kw>
<status status="PASS" start="2026-08-23T02:13:36.007747" elapsed="0.011168"/>
</kw>
<doc>Test case teardown. Show linked bugs and start fast failing in case of failure.</doc>
<status status="PASS" start="2026-08-23T02:13:36.005737" elapsed="0.013225"/>
</kw>
<doc>Create DCN stream.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-08-23T02:13:35.850583" elapsed="0.168431">... click for list of related bugs or create a new one if needed (with the
"netconf_gate_userfeatures_txt_notifications_notifications_basic_create_dcn_stream"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=netconf_gate_userfeatures_txt_notifications_notifications_basic_create_dcn_stream&amp;order=bug_status"

HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/sal-remote:create-data-change-event-subscription</status>
</test>
<test id="s1-s6-s1-t2" name="Subscribe_To_DCN_Stream" 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-08-23T02:13:36.023192" elapsed="0.000239"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:13:36.022898" elapsed="0.000603"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:13:36.024905" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:36.024755" elapsed="0.000257"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.024725" elapsed="0.000323"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:13:36.031031" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:36.030899" elapsed="0.000186"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.030877" elapsed="0.000230"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.032274" 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-08-23T02:13:36.031802" elapsed="0.000507"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.032824" 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-08-23T02:13:36.032483" elapsed="0.000388"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:13:36.032923" elapsed="0.000044"/>
</return>
<msg time="2026-08-23T02:13:36.033142" 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-08-23T02:13:36.031373" elapsed="0.001797"/>
</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-08-23T02:13:36.038881" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:36.038738" elapsed="0.000194"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.038713" elapsed="0.000241"/>
</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-08-23T02:13:36.040284" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:36.040170" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.040151" elapsed="0.000206"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:13:36.040905" level="INFO">${karaf_connection_index} = 23</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-08-23T02:13:36.040505" elapsed="0.000434"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:13:36.041444" level="INFO">${current_connection_index} = 24</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-08-23T02:13:36.041168" elapsed="0.000302"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:13:36.076237" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:13:36.042054" elapsed="0.034432"/>
</kw>
<msg time="2026-08-23T02:13:36.076735" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:13:36.076784" 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 "n "e "t "c "o "n "f "...</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-08-23T02:13:36.041632" elapsed="0.035188"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:13:36.105570" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "N "o "t "i "f "i "c "a "t "i "o "n "s ". "N "o "t "i "f "i "c "a "t "i "o "n "s "[C "B "a "s "i "c ". "S "u "b "s "c "r "i "b "e "_ "T "o "_ "D "C "N "_ "S "t "r "e "a "m "[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-08-23T02:13:36.077641" elapsed="0.028150"/>
</kw>
<msg time="2026-08-23T02:13:36.105999" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:13:36.106045" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "N "o "t "i "f "i "c "a "t "i "o "n "s ". "N "o "t "i "f "i "c "a "t "i "o "n "s "[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-08-23T02:13:36.077136" elapsed="0.028945"/>
</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-08-23T02:13:36.106470" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:36.106185" elapsed="0.000363"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.106151" elapsed="0.000427"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.107162" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "N "o "t "i "f "i "c "a "t "i "o "n "s ". "N "o "t "i "f "i "c "a "t "i "o "n "s "[C "B "a "s "i "c ". "S "u "b "s "c "r "i "b "e "_ "T "o "_ "D "C "N "_ "S "t "r "e "a "m "[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-08-23T02:13:36.106733" elapsed="0.000505"/>
</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-08-23T02:13:36.107524" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:36.107305" elapsed="0.000294"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.107287" elapsed="0.000337"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:13:36.107664" elapsed="0.000045"/>
</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-08-23T02:13:36.111270" elapsed="0.000160"/>
</kw>
<msg time="2026-08-23T02:13:36.111503" 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-08-23T02:13:36.110283" elapsed="0.001328"/>
</kw>
<kw name="Open 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-08-23T02:13:36.112950" elapsed="0.000040"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:36.114012" elapsed="0.000039"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:13:36.108670" elapsed="0.005468"/>
</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-08-23T02:13:36.108025" elapsed="0.006225"/>
</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-08-23T02:13:36.039825" elapsed="0.074527"/>
</kw>
<msg time="2026-08-23T02:13:36.114447" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:13:36.114492" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "N "o "t "i "f "i "c "a "t "i "o "n "s ". "N "o "t "i "f "i "c "a "t "i "o "n "s "[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-08-23T02:13:36.039121" elapsed="0.075406"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:13:36.114722" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-23T02:13:36.114608" elapsed="0.000176"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.114587" elapsed="0.000222"/>
</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-08-23T02:13:36.115298" 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-08-23T02:13:36.115645" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:13:36.115717" 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-08-23T02:13:36.038380" elapsed="0.077443"/>
</kw>
<msg time="2026-08-23T02:13:36.116063" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:13:36.116109" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "N "o "t "i "f "i "c "a "t "i "o "n "s ". "N "o "t "i "f "i "c "a "t "i "o "n "s "[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-08-23T02:13:36.033604" elapsed="0.082540"/>
</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-08-23T02:13:36.116503" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:36.116220" elapsed="0.000338"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.116202" elapsed="0.000379"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:13:36.033442" elapsed="0.083163"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:13:36.033241" elapsed="0.083400"/>
</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-08-23T02:13:36.030474" elapsed="0.086225"/>
</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-08-23T02:13:36.024218" elapsed="0.092540"/>
</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-08-23T02:13:36.023662" elapsed="0.093143"/>
</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-08-23T02:13:36.020566" elapsed="0.096316"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:13:36.121601" level="FAIL">Variable '${RFC8040_DCN_STREAM_URI}' not found. Did you mean:
    ${RFC8040_STREAMS_URI}</msg>
<var>${resp}</var>
<arg>restconf</arg>
<arg>url=${RFC8040_DCN_STREAM_URI}</arg>
<arg>headers=${SEND_ACCEPT_XML_HEADERS}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:13:36.117053" elapsed="0.004592">Variable '${RFC8040_DCN_STREAM_URI}' not found. Did you mean:
    ${RFC8040_STREAMS_URI}</status>
</kw>
<kw name="Log_Response">
<arg>${resp}</arg>
<doc>Log response.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:36.121816" elapsed="0.000041"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${resp.status_code}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:36.122015" elapsed="0.000021"/>
</kw>
<kw name="Set_Variable_If_At_Least_Calcium" owner="CompareStream">
<var>${xpath}</var>
<arg>access[2]/location</arg>
<arg>.</arg>
<doc>Compare calcium to vanadium and return ${value_if_true} if vanadium is at least calcium, return ${value_if_false} otherwise.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:36.130784" elapsed="0.000029"/>
</kw>
<kw name="Get Element Text" owner="XML">
<var>${STREAM_LOCATION}</var>
<arg>${resp.content}</arg>
<arg>${xpath}</arg>
<doc>Returns all text of the element, possibly whitespace normalized.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:36.130995" elapsed="0.000021"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${STREAM_LOCATION}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:36.131171" elapsed="0.000020"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${STREAM_LOCATION}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:36.131410" elapsed="0.000020"/>
</kw>
<kw name="Teardown_Test_Show_Bugs_And_Start_Fast_Failing_If_Test_Failed" owner="SetupUtils" type="TEARDOWN">
<kw name="Run Keyword If Test Failed" owner="BuiltIn">
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.132814" level="INFO">${SuiteFastFail} = True</msg>
<arg>${SuiteFastFail}</arg>
<arg>True</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-23T02:13:36.132490" elapsed="0.000388"/>
</kw>
<arg>BuiltIn.Set_Suite_Variable</arg>
<arg>${SuiteFastFail}</arg>
<arg>True</arg>
<doc>Runs the given keyword with the given arguments, if the test failed.</doc>
<status status="PASS" start="2026-08-23T02:13:36.132081" elapsed="0.000849"/>
</kw>
<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-08-23T02:13:36.133753" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:36.133362" elapsed="0.000452"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.133343" elapsed="0.000511"/>
</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-08-23T02:13:36.134002" elapsed="0.000315"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.139463" 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-08-23T02:13:36.138934" elapsed="0.000556"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="NOT RUN" start="2026-08-23T02:13:36.139707" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:36.139564" elapsed="0.000185"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.139546" elapsed="0.000224"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.140257" level="INFO">${newline} = 
</msg>
<var>${newline}</var>
<arg>chr(10)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-23T02:13:36.139933" elapsed="0.000350"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:13:36.140704" level="INFO">${reference} = netconf_gate_userfeatures_txt_Notifications_Notifications_Basic_Subscribe_To_DCN_Stream</msg>
<var>${reference}</var>
<arg>${SUITE_NAME}_${TEST_NAME}</arg>
<arg>[ /\.-]</arg>
<arg>_</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-23T02:13:36.140442" elapsed="0.000287"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<msg time="2026-08-23T02:13:36.141081" level="INFO">${reference} = netconf_gate_userfeatures_txt_notifications_notifications_basic_subscribe_to_dcn_stream</msg>
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="PASS" start="2026-08-23T02:13:36.140906" elapsed="0.000201"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.141602" level="INFO">${msg} = ... click for list of related bugs or create a new one if needed (with the
"netconf_gate_userfeatures_txt_notifications_notifications_basic_subscribe_to_dcn_stream"
reference somewhere inside)</msg>
<var>${msg}</var>
<arg>... click for list of related bugs or create a new one if needed (with the${newline}"${reference}"${newline}reference somewhere inside)</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:36.141261" elapsed="0.000368"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.142106" level="INFO">${bugs} = "https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=netconf_gate_userfeatures_txt_notifications_notifications_basic_subscribe_to_dcn_stream&amp;order=bug_status"</msg>
<var>${bugs}</var>
<arg>"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=${reference}&amp;order=bug_status"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:36.141782" elapsed="0.000351"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.142723" level="INFO">Set test message to:
... click for list of related bugs or create a new one if needed (with the
"netconf_gate_userfeatures_txt_notifications_notifications_basic_subscribe_to_dcn_stream"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=netconf_gate_userfeatures_txt_notifications_notifications_basic_subscribe_to_dcn_stream&amp;order=bug_status"

Variable '${RFC8040_DCN_STREAM_URI}' not found. Did you mean:
    ${RFC8040_STREAMS_URI}</msg>
<arg>${msg}${newline}${bugs}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="PASS" start="2026-08-23T02:13:36.142289" elapsed="0.000484"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.143242" level="INFO">... click for list of related bugs or create a new one if needed (with the
"netconf_gate_userfeatures_txt_notifications_notifications_basic_subscribe_to_dcn_stream"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=netconf_gate_userfeatures_txt_notifications_notifications_basic_subscribe_to_dcn_stream&amp;order=bug_status"</msg>
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:36.142944" elapsed="0.000347"/>
</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-08-23T02:13:36.138604" elapsed="0.004741"/>
</kw>
<status status="PASS" start="2026-08-23T02:13:36.133149" elapsed="0.010244"/>
</kw>
<doc>Test case teardown. Show linked bugs and start fast failing in case of failure.</doc>
<status status="PASS" start="2026-08-23T02:13:36.131742" elapsed="0.011691"/>
</kw>
<doc>Subscribe to DCN streams.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-08-23T02:13:36.019891" elapsed="0.123583">... click for list of related bugs or create a new one if needed (with the
"netconf_gate_userfeatures_txt_notifications_notifications_basic_subscribe_to_dcn_stream"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=netconf_gate_userfeatures_txt_notifications_notifications_basic_subscribe_to_dcn_stream&amp;order=bug_status"

Variable '${RFC8040_DCN_STREAM_URI}' not found. Did you mean:
    ${RFC8040_STREAMS_URI}</status>
</test>
<test id="s1-s6-s1-t3" name="List_DCN_Streams" line="97">
<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-08-23T02:13:36.146869" elapsed="0.000238"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:13:36.146588" elapsed="0.000583"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:13:36.148185" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:36.148074" elapsed="0.000158"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.148054" elapsed="0.000200"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:13:36.153252" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:36.153142" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.153124" elapsed="0.000208"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.154360" 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-08-23T02:13:36.153952" elapsed="0.000437"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.154888" 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-08-23T02:13:36.154567" elapsed="0.000348"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:13:36.154961" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T02:13:36.155119" 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-08-23T02:13:36.153560" elapsed="0.001584"/>
</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-08-23T02:13:36.160592" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:36.160483" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.160464" 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-08-23T02:13:36.161914" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:36.161778" elapsed="0.000183"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.161759" elapsed="0.000224"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:13:36.162499" level="INFO">${karaf_connection_index} = 23</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-08-23T02:13:36.162131" elapsed="0.000395"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:13:36.162958" level="INFO">${current_connection_index} = 24</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-08-23T02:13:36.162687" elapsed="0.000296"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:13:36.197391" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:13:36.163528" elapsed="0.034065"/>
</kw>
<msg time="2026-08-23T02:13:36.197794" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:13:36.197864" 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 "n "e "t "c "o "n "f "...</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-08-23T02:13:36.163142" elapsed="0.034760"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:13:36.223094" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "N "o "t "i "f "i "c "a "t "i "o "n "s ". "N "o "t "i "f "i "c "a "t "i "o "n "s "[C "B "a "s "i "c ". "L "i "s "t "_ "D "C "N "_ "S "t "r "e "a "m "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-08-23T02:13:36.198572" elapsed="0.024728"/>
</kw>
<msg time="2026-08-23T02:13:36.223476" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:13:36.223522" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "N "o "t "i "f "i "c "a "t "i "o "n "s ". "N "o "t "i "f "i "c "a "t "i "o "n "s "[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-08-23T02:13:36.198119" elapsed="0.025439"/>
</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-08-23T02:13:36.223946" elapsed="0.000024"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:36.223654" elapsed="0.000372"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.223624" elapsed="0.000432"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.224592" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "N "o "t "i "f "i "c "a "t "i "o "n "s ". "N "o "t "i "f "i "c "a "t "i "o "n "s "[C "B "a "s "i "c ". "L "i "s "t "_ "D "C "N "_ "S "t "r "e "a "m "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-08-23T02:13:36.224203" elapsed="0.000476"/>
</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-08-23T02:13:36.225194" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:36.224970" elapsed="0.000302"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.224948" elapsed="0.000350"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:13:36.225335" 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-08-23T02:13:36.228491" elapsed="0.000152"/>
</kw>
<msg time="2026-08-23T02:13:36.228713" 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-08-23T02:13:36.227866" elapsed="0.000953"/>
</kw>
<kw name="Open 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-08-23T02:13:36.229796" elapsed="0.000089"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:36.231004" elapsed="0.000040"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:13:36.226274" elapsed="0.004866"/>
</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-08-23T02:13:36.225651" elapsed="0.005605"/>
</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-08-23T02:13:36.161478" elapsed="0.069877"/>
</kw>
<msg time="2026-08-23T02:13:36.231448" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:13:36.231492" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "N "o "t "i "f "i "c "a "t "i "o "n "s ". "N "o "t "i "f "i "c "a "t "i "o "n "s "[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-08-23T02:13:36.160811" elapsed="0.070716"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:13:36.231710" elapsed="0.000025"/>
</return>
<status status="PASS" start="2026-08-23T02:13:36.231602" elapsed="0.000168"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.231584" elapsed="0.000210"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:36.232217" 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-08-23T02:13:36.232556" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:13:36.232628" 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-08-23T02:13:36.160145" elapsed="0.072589"/>
</kw>
<msg time="2026-08-23T02:13:36.232826" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:13:36.232956" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "N "o "t "i "f "i "c "a "t "i "o "n "s ". "N "o "t "i "f "i "c "a "t "i "o "n "s "[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-08-23T02:13:36.155524" elapsed="0.077469"/>
</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-08-23T02:13:36.233319" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:36.233069" elapsed="0.000304"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.233052" elapsed="0.000344"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:13:36.155380" elapsed="0.078039"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:13:36.155202" elapsed="0.078251"/>
</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-08-23T02:13:36.152766" elapsed="0.080743"/>
</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-08-23T02:13:36.147748" elapsed="0.085816"/>
</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-08-23T02:13:36.147325" elapsed="0.086283"/>
</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-08-23T02:13:36.144225" elapsed="0.089436"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:13:36.238295" level="FAIL">Variable '${RFC8040_DCN_STREAM_URI}' not found. Did you mean:
    ${RFC8040_STREAMS_URI}</msg>
<var>${resp}</var>
<arg>restconf</arg>
<arg>url=${RFC8040_DCN_STREAM_URI}</arg>
<arg>headers=${SEND_ACCEPT_XML_HEADERS}</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:13:36.233829" elapsed="0.004506">Variable '${RFC8040_DCN_STREAM_URI}' not found. Did you mean:
    ${RFC8040_STREAMS_URI}</status>
</kw>
<kw name="Log_Response">
<arg>${resp}</arg>
<doc>Log response.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:36.238500" elapsed="0.000024"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${resp.status_code}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:36.238672" elapsed="0.000021"/>
</kw>
<kw name="Comment" owner="BuiltIn">
<arg>Stream only shows in RFC URL.</arg>
<doc>Displays the given messages in the log file as keyword arguments.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:36.238928" elapsed="0.000022"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${resp.text}</arg>
<arg>${STREAM_LOCATION}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:36.239121" elapsed="0.000022"/>
</kw>
<kw name="Teardown_Test_Show_Bugs_And_Start_Fast_Failing_If_Test_Failed" owner="SetupUtils" type="TEARDOWN">
<kw name="Run Keyword If Test Failed" owner="BuiltIn">
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.240460" level="INFO">${SuiteFastFail} = True</msg>
<arg>${SuiteFastFail}</arg>
<arg>True</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-23T02:13:36.240143" elapsed="0.000360"/>
</kw>
<arg>BuiltIn.Set_Suite_Variable</arg>
<arg>${SuiteFastFail}</arg>
<arg>True</arg>
<doc>Runs the given keyword with the given arguments, if the test failed.</doc>
<status status="PASS" start="2026-08-23T02:13:36.239758" elapsed="0.000796"/>
</kw>
<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-08-23T02:13:36.241423" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:36.241038" elapsed="0.000448"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.241019" elapsed="0.000492"/>
</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-08-23T02:13:36.241657" elapsed="0.000326"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.247301" 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-08-23T02:13:36.246756" elapsed="0.000573"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="NOT RUN" start="2026-08-23T02:13:36.247546" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:36.247404" elapsed="0.000184"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.247385" elapsed="0.000225"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.248072" level="INFO">${newline} = 
</msg>
<var>${newline}</var>
<arg>chr(10)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-23T02:13:36.247756" elapsed="0.000342"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:13:36.248515" level="INFO">${reference} = netconf_gate_userfeatures_txt_Notifications_Notifications_Basic_List_DCN_Streams</msg>
<var>${reference}</var>
<arg>${SUITE_NAME}_${TEST_NAME}</arg>
<arg>[ /\.-]</arg>
<arg>_</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-23T02:13:36.248256" elapsed="0.000285"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<msg time="2026-08-23T02:13:36.248890" level="INFO">${reference} = netconf_gate_userfeatures_txt_notifications_notifications_basic_list_dcn_streams</msg>
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="PASS" start="2026-08-23T02:13:36.248700" elapsed="0.000216"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.249408" level="INFO">${msg} = ... click for list of related bugs or create a new one if needed (with the
"netconf_gate_userfeatures_txt_notifications_notifications_basic_list_dcn_streams"
reference somewhere inside)</msg>
<var>${msg}</var>
<arg>... click for list of related bugs or create a new one if needed (with the${newline}"${reference}"${newline}reference somewhere inside)</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:36.249070" elapsed="0.000365"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.249912" level="INFO">${bugs} = "https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=netconf_gate_userfeatures_txt_notifications_notifications_basic_list_dcn_streams&amp;order=bug_status"</msg>
<var>${bugs}</var>
<arg>"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=${reference}&amp;order=bug_status"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:36.249588" elapsed="0.000352"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.250525" level="INFO">Set test message to:
... click for list of related bugs or create a new one if needed (with the
"netconf_gate_userfeatures_txt_notifications_notifications_basic_list_dcn_streams"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=netconf_gate_userfeatures_txt_notifications_notifications_basic_list_dcn_streams&amp;order=bug_status"

Variable '${RFC8040_DCN_STREAM_URI}' not found. Did you mean:
    ${RFC8040_STREAMS_URI}</msg>
<arg>${msg}${newline}${bugs}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="PASS" start="2026-08-23T02:13:36.250093" elapsed="0.000482"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.251126" level="INFO">... click for list of related bugs or create a new one if needed (with the
"netconf_gate_userfeatures_txt_notifications_notifications_basic_list_dcn_streams"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=netconf_gate_userfeatures_txt_notifications_notifications_basic_list_dcn_streams&amp;order=bug_status"</msg>
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:36.250744" elapsed="0.000431"/>
</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-08-23T02:13:36.246448" elapsed="0.004782"/>
</kw>
<status status="PASS" start="2026-08-23T02:13:36.240789" elapsed="0.010490"/>
</kw>
<doc>Test case teardown. Show linked bugs and start fast failing in case of failure.</doc>
<status status="PASS" start="2026-08-23T02:13:36.239452" elapsed="0.011873"/>
</kw>
<doc>List DCN streams.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-08-23T02:13:36.143747" elapsed="0.107633">... click for list of related bugs or create a new one if needed (with the
"netconf_gate_userfeatures_txt_notifications_notifications_basic_list_dcn_streams"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=netconf_gate_userfeatures_txt_notifications_notifications_basic_list_dcn_streams&amp;order=bug_status"

Variable '${RFC8040_DCN_STREAM_URI}' not found. Did you mean:
    ${RFC8040_STREAMS_URI}</status>
</test>
<test id="s1-s6-s1-t4" name="Start_Receiver" line="109">
<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-08-23T02:13:36.254530" elapsed="0.000208"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:13:36.254268" elapsed="0.000524"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:13:36.255789" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:36.255679" elapsed="0.000175"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.255660" elapsed="0.000218"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:13:36.260822" elapsed="0.000029"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:36.260715" elapsed="0.000169"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.260697" elapsed="0.000210"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.261908" 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-08-23T02:13:36.261510" elapsed="0.000424"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.262388" 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-08-23T02:13:36.262094" elapsed="0.000320"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:13:36.262459" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:13:36.262613" 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-08-23T02:13:36.261133" elapsed="0.001505"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:13:36.268279" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:36.268170" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.268150" 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-08-23T02:13:36.269602" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:36.269493" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.269475" elapsed="0.000196"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:13:36.270280" level="INFO">${karaf_connection_index} = 23</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-08-23T02:13:36.269876" elapsed="0.000432"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:13:36.270741" level="INFO">${current_connection_index} = 24</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-08-23T02:13:36.270471" elapsed="0.000297"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:13:36.306806" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:13:36.271389" elapsed="0.035616"/>
</kw>
<msg time="2026-08-23T02:13:36.307197" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:13:36.307243" 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 "n "e "t "c "o "n "f "...</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-08-23T02:13:36.270954" elapsed="0.036324"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:13:36.331940" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "N "o "t "i "f "i "c "a "t "i "o "n "s ". "N "o "t "i "f "i "c "a "t "i "o "n "s "[C "B "a "s "i "c ". "S "t "a "r "t "_ "R "e "c "e "i "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${KARAF_PROMPT}</arg>
<doc>Consumes and returns the server output until a match to ``regexp`` is found.</doc>
<status status="PASS" start="2026-08-23T02:13:36.307911" elapsed="0.024216"/>
</kw>
<msg time="2026-08-23T02:13:36.332300" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:13:36.332345" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "N "o "t "i "f "i "c "a "t "i "o "n "s ". "N "o "t "i "f "i "c "a "t "i "o "n "s "[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-08-23T02:13:36.307465" elapsed="0.024915"/>
</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-08-23T02:13:36.332716" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:36.332469" elapsed="0.000323"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.332444" elapsed="0.000376"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.333423" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "N "o "t "i "f "i "c "a "t "i "o "n "s ". "N "o "t "i "f "i "c "a "t "i "o "n "s "[C "B "a "s "i "c ". "S "t "a "r "t "_ "R "e "c "e "i "v "e "r "[K"
[?1l&gt;[?2004l[?1h=[90m~[0m                                                                                [?2004hopendaylight-user@root&gt;</msg>
<arg>${message_wait}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:36.332991" elapsed="0.000572"/>
</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-08-23T02:13:36.333868" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:36.333631" elapsed="0.000315"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.333613" elapsed="0.000358"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:13:36.334007" elapsed="0.000063"/>
</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-08-23T02:13:36.337223" elapsed="0.000149"/>
</kw>
<msg time="2026-08-23T02:13:36.337444" 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-08-23T02:13:36.336548" elapsed="0.001001"/>
</kw>
<kw name="Open 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-08-23T02:13:36.338543" elapsed="0.000037"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:36.339572" elapsed="0.000036"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:13:36.334973" elapsed="0.004716"/>
</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-08-23T02:13:36.334345" elapsed="0.005460"/>
</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-08-23T02:13:36.269189" elapsed="0.070905"/>
</kw>
<msg time="2026-08-23T02:13:36.340191" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:13:36.340235" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "N "o "t "i "f "i "c "a "t "i "o "n "s ". "N "o "t "i "f "i "c "a "t "i "o "n "s "[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-08-23T02:13:36.268503" elapsed="0.071767"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:13:36.340454" elapsed="0.000027"/>
</return>
<status status="PASS" start="2026-08-23T02:13:36.340347" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.340329" 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-08-23T02:13:36.340970" elapsed="0.000133"/>
</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-08-23T02:13:36.341427" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:13:36.341497" 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-08-23T02:13:36.267813" elapsed="0.073796"/>
</kw>
<msg time="2026-08-23T02:13:36.341703" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:13:36.341746" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "N "o "t "i "f "i "c "a "t "i "o "n "s ". "N "o "t "i "f "i "c "a "t "i "o "n "s "[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-08-23T02:13:36.263069" elapsed="0.078712"/>
</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-08-23T02:13:36.342202" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:36.341932" elapsed="0.000324"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.341913" elapsed="0.000366"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:13:36.262924" elapsed="0.079379"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:13:36.262696" elapsed="0.079644"/>
</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-08-23T02:13:36.260355" elapsed="0.082045"/>
</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-08-23T02:13:36.255393" elapsed="0.087062"/>
</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-08-23T02:13:36.254976" elapsed="0.087523"/>
</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-08-23T02:13:36.252166" elapsed="0.090389"/>
</kw>
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:13:36.349391" level="FAIL">Variable '${STREAM_LOCATION}' not found.</msg>
<var>${output}</var>
<arg>python3 ssereceiver.py --uri ${STREAM_LOCATION} --logfile ${RECEIVER_LOG_FILE}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="FAIL" start="2026-08-23T02:13:36.342719" elapsed="0.006713">Variable '${STREAM_LOCATION}' not found.</status>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:36.349603" elapsed="0.000022"/>
</kw>
<kw name="Read" owner="SSHLibrary">
<var>${output}</var>
<arg>delay=2s</arg>
<doc>Consumes and returns everything available on the server output.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:36.349772" elapsed="0.000020"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:36.350044" elapsed="0.000020"/>
</kw>
<kw name="Teardown_Test_Show_Bugs_And_Start_Fast_Failing_If_Test_Failed" owner="SetupUtils" type="TEARDOWN">
<kw name="Run Keyword If Test Failed" owner="BuiltIn">
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.351385" level="INFO">${SuiteFastFail} = True</msg>
<arg>${SuiteFastFail}</arg>
<arg>True</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-23T02:13:36.351062" elapsed="0.000365"/>
</kw>
<arg>BuiltIn.Set_Suite_Variable</arg>
<arg>${SuiteFastFail}</arg>
<arg>True</arg>
<doc>Runs the given keyword with the given arguments, if the test failed.</doc>
<status status="PASS" start="2026-08-23T02:13:36.350674" elapsed="0.000803"/>
</kw>
<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-08-23T02:13:36.352295" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:36.351916" elapsed="0.000441"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.351898" elapsed="0.000483"/>
</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-08-23T02:13:36.352525" elapsed="0.000305"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.357848" 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-08-23T02:13:36.357299" elapsed="0.000581"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="NOT RUN" start="2026-08-23T02:13:36.358108" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:36.357960" elapsed="0.000190"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.357938" elapsed="0.000234"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.358607" level="INFO">${newline} = 
</msg>
<var>${newline}</var>
<arg>chr(10)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-23T02:13:36.358315" elapsed="0.000319"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:13:36.359067" level="INFO">${reference} = netconf_gate_userfeatures_txt_Notifications_Notifications_Basic_Start_Receiver</msg>
<var>${reference}</var>
<arg>${SUITE_NAME}_${TEST_NAME}</arg>
<arg>[ /\.-]</arg>
<arg>_</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-23T02:13:36.358788" elapsed="0.000305"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<msg time="2026-08-23T02:13:36.359425" level="INFO">${reference} = netconf_gate_userfeatures_txt_notifications_notifications_basic_start_receiver</msg>
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="PASS" start="2026-08-23T02:13:36.359250" elapsed="0.000200"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.359953" level="INFO">${msg} = ... click for list of related bugs or create a new one if needed (with the
"netconf_gate_userfeatures_txt_notifications_notifications_basic_start_receiver"
reference somewhere inside)</msg>
<var>${msg}</var>
<arg>... click for list of related bugs or create a new one if needed (with the${newline}"${reference}"${newline}reference somewhere inside)</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:36.359600" elapsed="0.000380"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.360434" level="INFO">${bugs} = "https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=netconf_gate_userfeatures_txt_notifications_notifications_basic_start_receiver&amp;order=bug_status"</msg>
<var>${bugs}</var>
<arg>"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=${reference}&amp;order=bug_status"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:36.360131" elapsed="0.000330"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.361063" level="INFO">Set test message to:
... click for list of related bugs or create a new one if needed (with the
"netconf_gate_userfeatures_txt_notifications_notifications_basic_start_receiver"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=netconf_gate_userfeatures_txt_notifications_notifications_basic_start_receiver&amp;order=bug_status"

Variable '${STREAM_LOCATION}' not found.</msg>
<arg>${msg}${newline}${bugs}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="PASS" start="2026-08-23T02:13:36.360611" elapsed="0.000500"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.361551" level="INFO">... click for list of related bugs or create a new one if needed (with the
"netconf_gate_userfeatures_txt_notifications_notifications_basic_start_receiver"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=netconf_gate_userfeatures_txt_notifications_notifications_basic_start_receiver&amp;order=bug_status"</msg>
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:36.361261" elapsed="0.000338"/>
</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-08-23T02:13:36.357000" elapsed="0.004652"/>
</kw>
<status status="PASS" start="2026-08-23T02:13:36.351690" elapsed="0.010010"/>
</kw>
<doc>Test case teardown. Show linked bugs and start fast failing in case of failure.</doc>
<status status="PASS" start="2026-08-23T02:13:36.350366" elapsed="0.011374"/>
</kw>
<doc>Start the WSS/SSE listener</doc>
<status status="FAIL" start="2026-08-23T02:13:36.251659" elapsed="0.110135">... click for list of related bugs or create a new one if needed (with the
"netconf_gate_userfeatures_txt_notifications_notifications_basic_start_receiver"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=netconf_gate_userfeatures_txt_notifications_notifications_basic_start_receiver&amp;order=bug_status"

Variable '${STREAM_LOCATION}' not found.</status>
</test>
<test id="s1-s6-s1-t5" name="Change_DS_Config" line="116">
<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-08-23T02:13:36.365170" elapsed="0.000207"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:13:36.364910" elapsed="0.000521"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:13:36.366428" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:36.366320" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.366301" elapsed="0.000196"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:13:36.371479" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:36.371373" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.371355" elapsed="0.000192"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.372554" 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-08-23T02:13:36.372168" elapsed="0.000413"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.373055" 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-08-23T02:13:36.372741" elapsed="0.000340"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:13:36.373135" elapsed="0.000037"/>
</return>
<msg time="2026-08-23T02:13:36.373311" 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-08-23T02:13:36.371774" elapsed="0.001561"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_With_Retry_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:13:36.378894" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:36.378767" elapsed="0.000174"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.378748" elapsed="0.000215"/>
</if>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Execute_Controller_Karaf_Command_On_Background" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:13:36.380176" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:36.380070" elapsed="0.000153"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.380052" elapsed="0.000193"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:13:36.380745" level="INFO">${karaf_connection_index} = 23</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-08-23T02:13:36.380388" elapsed="0.000384"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:13:36.381195" level="INFO">${current_connection_index} = 24</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-08-23T02:13:36.380947" elapsed="0.000274"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:13:36.413061" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:13:36.381794" elapsed="0.031437"/>
</kw>
<msg time="2026-08-23T02:13:36.413430" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:13:36.413477" 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 "n "e "t "c "o "n "f "...</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-08-23T02:13:36.381379" elapsed="0.032132"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:13:36.440168" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "N "o "t "i "f "i "c "a "t "i "o "n "s ". "N "o "t "i "f "i "c "a "t "i "o "n "s "[C "B "a "s "i "c ". "C "h "a "n "g "e "_ "D "S "_ "C "o "n "f "i "g "[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-08-23T02:13:36.414103" elapsed="0.026248"/>
</kw>
<msg time="2026-08-23T02:13:36.440524" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:13:36.440570" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "N "o "t "i "f "i "c "a "t "i "o "n "s ". "N "o "t "i "f "i "c "a "t "i "o "n "s "[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-08-23T02:13:36.413684" elapsed="0.026921"/>
</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-08-23T02:13:36.440936" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:36.440684" elapsed="0.000330"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.440663" elapsed="0.000402"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.441592" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "N "o "t "i "f "i "c "a "t "i "o "n "s ". "N "o "t "i "f "i "c "a "t "i "o "n "s "[C "B "a "s "i "c ". "C "h "a "n "g "e "_ "D "S "_ "C "o "n "f "i "g "[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-08-23T02:13:36.441212" elapsed="0.000450"/>
</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-08-23T02:13:36.442055" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:36.441817" elapsed="0.000321"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.441797" elapsed="0.000367"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:13:36.442197" elapsed="0.000032"/>
</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-08-23T02:13:36.445331" elapsed="0.000150"/>
</kw>
<msg time="2026-08-23T02:13:36.445552" 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-08-23T02:13:36.444604" elapsed="0.001048"/>
</kw>
<kw name="Open 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-08-23T02:13:36.446617" elapsed="0.000038"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:36.447600" elapsed="0.000036"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:13:36.443090" elapsed="0.004624"/>
</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-08-23T02:13:36.442479" elapsed="0.005352"/>
</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-08-23T02:13:36.379746" elapsed="0.068361"/>
</kw>
<msg time="2026-08-23T02:13:36.448199" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:13:36.448243" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "N "o "t "i "f "i "c "a "t "i "o "n "s ". "N "o "t "i "f "i "c "a "t "i "o "n "s "[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-08-23T02:13:36.379115" elapsed="0.069163"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:13:36.448459" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:13:36.448353" elapsed="0.000165"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.448334" elapsed="0.000208"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:36.448962" 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-08-23T02:13:36.449295" elapsed="0.000025"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:13:36.449368" 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-08-23T02:13:36.378406" elapsed="0.071069"/>
</kw>
<msg time="2026-08-23T02:13:36.449567" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:13:36.449611" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "N "o "t "i "f "i "c "a "t "i "o "n "s ". "N "o "t "i "f "i "c "a "t "i "o "n "s "[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-08-23T02:13:36.373743" elapsed="0.075902"/>
</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-08-23T02:13:36.450048" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:36.449719" elapsed="0.000384"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.449702" elapsed="0.000424"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:13:36.373571" elapsed="0.076578"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:13:36.373392" elapsed="0.076788"/>
</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-08-23T02:13:36.371013" elapsed="0.079220"/>
</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-08-23T02:13:36.366032" elapsed="0.084255"/>
</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-08-23T02:13:36.365577" elapsed="0.084753"/>
</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-08-23T02:13:36.362538" elapsed="0.087842"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:13:36.450728" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/notifications/templates/config_data.xml"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/notifications/templates/config_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:13:36.450970" level="INFO">${body} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;topology&gt;
    &lt;topology-id&gt;netconf-notif&lt;/topology-id&gt;
  &lt;/topology&gt;
&lt;/network-topology&gt;
</msg>
<var>${body}</var>
<arg>${TEMPLATE_FOLDER}/${RESTCONF_CONFIG_DATA}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:13:36.450540" elapsed="0.000460"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.451493" level="INFO">${uri} = /rests/data/network-topology:network-topology</msg>
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/network-topology:network-topology</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:36.451192" elapsed="0.000327"/>
</kw>
<kw name="PUT On Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:13:36.456029" level="INFO">PUT Request : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology 
 path_url=/rests/data/network-topology:network-topology 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Content-Length': '163', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;topology&gt;
    &lt;topology-id&gt;netconf-notif&lt;/topology-id&gt;
  &lt;/topology&gt;
&lt;/network-topology&gt;
 
 </msg>
<msg time="2026-08-23T02:13:36.456081" level="INFO">PUT Response : url=http://10.30.170.114:8181/rests/data/network-topology:network-topology 
 status=404, reason=Not Found 
 headers={'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:13:36.456191" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology</msg>
<var>${resp}</var>
<arg>restconf</arg>
<arg>${uri}</arg>
<arg>headers=${SEND_ACCEPT_XML_HEADERS}</arg>
<arg>data=${body}</arg>
<doc>Sends a PUT request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:13:36.451676" elapsed="0.004913">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology</status>
</kw>
<kw name="Log_Response">
<arg>${resp}</arg>
<doc>Log response.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:36.456768" elapsed="0.000024"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${resp.status_code}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:36.456974" elapsed="0.000022"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${uri}</var>
<arg>${RESTCONF_ROOT}/data/network-topology:network-topology/topology=netconf-notif</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:36.457145" elapsed="0.000020"/>
</kw>
<kw name="DELETE On Session" owner="RequestsLibrary">
<var>${resp}</var>
<arg>restconf</arg>
<arg>${uri}</arg>
<arg>headers=${SEND_ACCEPT_XML_HEADERS}</arg>
<doc>Sends a DELETE request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:36.457312" elapsed="0.000019"/>
</kw>
<kw name="Log_Response">
<arg>${resp}</arg>
<doc>Log response.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:36.457463" elapsed="0.000022"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${ALLOWED_STATUS_CODES}</arg>
<arg>${resp.status_code}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:36.457626" elapsed="0.000020"/>
</kw>
<kw name="Teardown_Test_Show_Bugs_And_Start_Fast_Failing_If_Test_Failed" owner="SetupUtils" type="TEARDOWN">
<kw name="Run Keyword If Test Failed" owner="BuiltIn">
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.458970" level="INFO">${SuiteFastFail} = True</msg>
<arg>${SuiteFastFail}</arg>
<arg>True</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-23T02:13:36.458635" elapsed="0.000378"/>
</kw>
<arg>BuiltIn.Set_Suite_Variable</arg>
<arg>${SuiteFastFail}</arg>
<arg>True</arg>
<doc>Runs the given keyword with the given arguments, if the test failed.</doc>
<status status="PASS" start="2026-08-23T02:13:36.458270" elapsed="0.000794"/>
</kw>
<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-08-23T02:13:36.459880" elapsed="0.000026"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:36.459487" elapsed="0.000456"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.459468" elapsed="0.000501"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>'${SetupUtils__Known_Bug_ID}' != ''</arg>
<arg>Set_Known_Bug_Id</arg>
<arg>${EMPTY}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:13:36.460112" elapsed="0.000304"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.465626" 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-08-23T02:13:36.465217" elapsed="0.000436"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="NOT RUN" start="2026-08-23T02:13:36.465886" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:36.465727" elapsed="0.000201"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.465709" elapsed="0.000241"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.466390" level="INFO">${newline} = 
</msg>
<var>${newline}</var>
<arg>chr(10)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-23T02:13:36.466096" elapsed="0.000320"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:13:36.466830" level="INFO">${reference} = netconf_gate_userfeatures_txt_Notifications_Notifications_Basic_Change_DS_Config</msg>
<var>${reference}</var>
<arg>${SUITE_NAME}_${TEST_NAME}</arg>
<arg>[ /\.-]</arg>
<arg>_</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-23T02:13:36.466572" elapsed="0.000300"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<msg time="2026-08-23T02:13:36.467204" level="INFO">${reference} = netconf_gate_userfeatures_txt_notifications_notifications_basic_change_ds_config</msg>
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="PASS" start="2026-08-23T02:13:36.467032" elapsed="0.000198"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.467718" level="INFO">${msg} = ... click for list of related bugs or create a new one if needed (with the
"netconf_gate_userfeatures_txt_notifications_notifications_basic_change_ds_config"
reference somewhere inside)</msg>
<var>${msg}</var>
<arg>... click for list of related bugs or create a new one if needed (with the${newline}"${reference}"${newline}reference somewhere inside)</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:36.467381" elapsed="0.000363"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.468223" level="INFO">${bugs} = "https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=netconf_gate_userfeatures_txt_notifications_notifications_basic_change_ds_config&amp;order=bug_status"</msg>
<var>${bugs}</var>
<arg>"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=${reference}&amp;order=bug_status"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:36.467911" elapsed="0.000375"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.468904" level="INFO">Set test message to:
... click for list of related bugs or create a new one if needed (with the
"netconf_gate_userfeatures_txt_notifications_notifications_basic_change_ds_config"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=netconf_gate_userfeatures_txt_notifications_notifications_basic_change_ds_config&amp;order=bug_status"

HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology</msg>
<arg>${msg}${newline}${bugs}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="PASS" start="2026-08-23T02:13:36.468442" elapsed="0.000513"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.469398" level="INFO">... click for list of related bugs or create a new one if needed (with the
"netconf_gate_userfeatures_txt_notifications_notifications_basic_change_ds_config"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=netconf_gate_userfeatures_txt_notifications_notifications_basic_change_ds_config&amp;order=bug_status"</msg>
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:36.469107" elapsed="0.000337"/>
</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-08-23T02:13:36.464903" elapsed="0.004595"/>
</kw>
<status status="PASS" start="2026-08-23T02:13:36.459277" elapsed="0.010269"/>
</kw>
<doc>Test case teardown. Show linked bugs and start fast failing in case of failure.</doc>
<status status="PASS" start="2026-08-23T02:13:36.457963" elapsed="0.011624"/>
</kw>
<doc>Make a change in DS configuration.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-08-23T02:13:36.362082" elapsed="0.107545">... click for list of related bugs or create a new one if needed (with the
"netconf_gate_userfeatures_txt_notifications_notifications_basic_change_ds_config"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=netconf_gate_userfeatures_txt_notifications_notifications_basic_change_ds_config&amp;order=bug_status"

HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/data/network-topology:network-topology</status>
</test>
<test id="s1-s6-s1-t6" name="Check_Notification" line="133">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-08-23T02:13:36.472931" elapsed="0.000222"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:13:36.472627" elapsed="0.000591"/>
</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-08-23T02:13:36.474214" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:36.474101" elapsed="0.000160"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.474082" elapsed="0.000201"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:13:36.479246" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:36.479141" elapsed="0.000152"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.479123" elapsed="0.000192"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.480308" 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-08-23T02:13:36.479931" elapsed="0.000403"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.480797" 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-08-23T02:13:36.480493" elapsed="0.000330"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:13:36.480893" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T02:13:36.481051" 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-08-23T02:13:36.479539" elapsed="0.001537"/>
</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-08-23T02:13:36.486613" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:36.486505" elapsed="0.000154"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.486486" 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-08-23T02:13:36.487907" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:36.487776" elapsed="0.000178"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.487758" elapsed="0.000218"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:13:36.488478" level="INFO">${karaf_connection_index} = 23</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-08-23T02:13:36.488120" elapsed="0.000384"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:13:36.488959" level="INFO">${current_connection_index} = 24</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-08-23T02:13:36.488683" elapsed="0.000301"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:13:36.520459" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:13:36.489527" elapsed="0.031092"/>
</kw>
<msg time="2026-08-23T02:13:36.520791" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:13:36.520857" 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 "n "e "t "c "o "n "f "...</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-08-23T02:13:36.489143" elapsed="0.031751"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:13:36.551047" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "N "o "t "i "f "i "c "a "t "i "o "n "s ". "N "o "t "i "f "i "c "a "t "i "o "n "s "[C "B "a "s "i "c ". "C "h "e "c "k "_ "N "o "t "i "f "i "c "a "t "i "o "n "[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-08-23T02:13:36.521466" elapsed="0.029758"/>
</kw>
<msg time="2026-08-23T02:13:36.551392" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:13:36.551437" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "N "o "t "i "f "i "c "a "t "i "o "n "s ". "N "o "t "i "f "i "c "a "t "i "o "n "s "[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-08-23T02:13:36.521068" elapsed="0.030404"/>
</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-08-23T02:13:36.551770" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:36.551550" elapsed="0.000319"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.551530" elapsed="0.000366"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.552428" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "N "o "t "i "f "i "c "a "t "i "o "n "s ". "N "o "t "i "f "i "c "a "t "i "o "n "s "[C "B "a "s "i "c ". "C "h "e "c "k "_ "N "o "t "i "f "i "c "a "t "i "o "n "[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-08-23T02:13:36.552054" elapsed="0.000444"/>
</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-08-23T02:13:36.552780" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:36.552565" elapsed="0.000307"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.552546" elapsed="0.000352"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:13:36.552931" 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-08-23T02:13:36.556018" elapsed="0.000151"/>
</kw>
<msg time="2026-08-23T02:13:36.556245" 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-08-23T02:13:36.555321" 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="NOT RUN" start="2026-08-23T02:13:36.557344" elapsed="0.000038"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:36.558331" elapsed="0.000036"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:13:36.553785" elapsed="0.004661"/>
</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-08-23T02:13:36.553207" elapsed="0.005354"/>
</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-08-23T02:13:36.487477" elapsed="0.071183"/>
</kw>
<msg time="2026-08-23T02:13:36.558753" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:13:36.558797" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "N "o "t "i "f "i "c "a "t "i "o "n "s ". "N "o "t "i "f "i "c "a "t "i "o "n "s "[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-08-23T02:13:36.486846" elapsed="0.072008"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:13:36.559042" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:13:36.558933" elapsed="0.000169"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.558914" 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-08-23T02:13:36.559524" 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-08-23T02:13:36.560123" elapsed="0.000028"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:13:36.560200" 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-08-23T02:13:36.486169" elapsed="0.074141"/>
</kw>
<msg time="2026-08-23T02:13:36.560402" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:13:36.560483" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "N "o "t "i "f "i "c "a "t "i "o "n "s ". "N "o "t "i "f "i "c "a "t "i "o "n "s "[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-08-23T02:13:36.481446" elapsed="0.079074"/>
</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-08-23T02:13:36.560866" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:36.560596" elapsed="0.000326"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.560578" elapsed="0.000367"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:13:36.481305" elapsed="0.079664"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:13:36.481132" elapsed="0.079869"/>
</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-08-23T02:13:36.478770" elapsed="0.082284"/>
</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-08-23T02:13:36.473798" elapsed="0.087311"/>
</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-08-23T02:13:36.473384" elapsed="0.087769"/>
</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-08-23T02:13:36.470511" elapsed="0.090695"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-23T02:13:36.561512" level="INFO">Executing command 'cat receiver.log'.</msg>
<msg time="2026-08-23T02:13:36.574594" level="INFO">Command exited with return code 1.</msg>
<msg time="2026-08-23T02:13:36.574804" level="INFO">${notification} = </msg>
<var>${notification}</var>
<arg>cat ${RECEIVER_LOG_FILE}</arg>
<doc>Executes ``command`` on the remote machine and returns its outputs.</doc>
<status status="PASS" start="2026-08-23T02:13:36.561368" elapsed="0.013525"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.575802" level="INFO"/>
<arg>${notification}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:36.575250" elapsed="0.000690"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.576993" level="INFO">${notification} = </msg>
<arg>${notification}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-23T02:13:36.576297" elapsed="0.000787"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.578198" level="FAIL">'' does not contain '&lt;notification xmlns='</msg>
<arg>${notification}</arg>
<arg>&lt;notification xmlns=</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="FAIL" start="2026-08-23T02:13:36.577415" elapsed="0.000929">'' does not contain '&lt;notification xmlns='</status>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${notification}</arg>
<arg>&lt;eventTime&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:36.578701" elapsed="0.000046"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${notification}</arg>
<arg>&lt;data-changed-notification xmlns=</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:36.579100" elapsed="0.000045"/>
</kw>
<kw name="Set_Variable_If_At_Least_Calcium" owner="CompareStream">
<var>${operation}</var>
<arg>created</arg>
<arg>updated</arg>
<doc>Compare calcium to vanadium and return ${value_if_true} if vanadium is at least calcium, return ${value_if_false} otherwise.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:36.593123" elapsed="0.000041"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${notification}</arg>
<arg>&lt;operation&gt;${operation}&lt;/operation&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:36.593387" elapsed="0.000029"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${notification}</arg>
<arg>&lt;/data-change-event&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:36.593618" elapsed="0.000027"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${notification}</arg>
<arg>&lt;/data-changed-notification&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:36.593862" elapsed="0.000030"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${notification}</arg>
<arg>&lt;/notification&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:36.594092" elapsed="0.000028"/>
</kw>
<kw name="Teardown_Test_Show_Bugs_And_Start_Fast_Failing_If_Test_Failed" owner="SetupUtils" type="TEARDOWN">
<kw name="Run Keyword If Test Failed" owner="BuiltIn">
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.595972" level="INFO">${SuiteFastFail} = True</msg>
<arg>${SuiteFastFail}</arg>
<arg>True</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-23T02:13:36.595474" elapsed="0.000559"/>
</kw>
<arg>BuiltIn.Set_Suite_Variable</arg>
<arg>${SuiteFastFail}</arg>
<arg>True</arg>
<doc>Runs the given keyword with the given arguments, if the test failed.</doc>
<status status="PASS" start="2026-08-23T02:13:36.594973" elapsed="0.001137"/>
</kw>
<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-08-23T02:13:36.597021" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:36.596625" elapsed="0.000458"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.596607" elapsed="0.000501"/>
</if>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>'${SetupUtils__Known_Bug_ID}' != ''</arg>
<arg>Set_Known_Bug_Id</arg>
<arg>${EMPTY}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:13:36.597252" elapsed="0.000304"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.602499" 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-08-23T02:13:36.602095" elapsed="0.000431"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="NOT RUN" start="2026-08-23T02:13:36.602785" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:36.602639" elapsed="0.000189"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.602620" elapsed="0.000247"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.603316" level="INFO">${newline} = 
</msg>
<var>${newline}</var>
<arg>chr(10)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-23T02:13:36.603016" elapsed="0.000327"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:13:36.603846" level="INFO">${reference} = netconf_gate_userfeatures_txt_Notifications_Notifications_Basic_Check_Notification</msg>
<var>${reference}</var>
<arg>${SUITE_NAME}_${TEST_NAME}</arg>
<arg>[ /\.-]</arg>
<arg>_</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-23T02:13:36.603497" elapsed="0.000385"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<msg time="2026-08-23T02:13:36.604305" level="INFO">${reference} = netconf_gate_userfeatures_txt_notifications_notifications_basic_check_notification</msg>
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="PASS" start="2026-08-23T02:13:36.604091" elapsed="0.000246"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.604947" level="INFO">${msg} = ... click for list of related bugs or create a new one if needed (with the
"netconf_gate_userfeatures_txt_notifications_notifications_basic_check_notification"
reference somewhere inside)</msg>
<var>${msg}</var>
<arg>... click for list of related bugs or create a new one if needed (with the${newline}"${reference}"${newline}reference somewhere inside)</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:36.604535" elapsed="0.000440"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.605502" level="INFO">${bugs} = "https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=netconf_gate_userfeatures_txt_notifications_notifications_basic_check_notification&amp;order=bug_status"</msg>
<var>${bugs}</var>
<arg>"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=${reference}&amp;order=bug_status"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:36.605129" elapsed="0.000411"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.606302" level="INFO">Set test message to:
... click for list of related bugs or create a new one if needed (with the
"netconf_gate_userfeatures_txt_notifications_notifications_basic_check_notification"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=netconf_gate_userfeatures_txt_notifications_notifications_basic_check_notification&amp;order=bug_status"

'' does not contain '&lt;notification xmlns='</msg>
<arg>${msg}${newline}${bugs}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="PASS" start="2026-08-23T02:13:36.605742" elapsed="0.000625"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.606944" level="INFO">... click for list of related bugs or create a new one if needed (with the
"netconf_gate_userfeatures_txt_notifications_notifications_basic_check_notification"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=netconf_gate_userfeatures_txt_notifications_notifications_basic_check_notification&amp;order=bug_status"</msg>
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:36.606565" elapsed="0.000439"/>
</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-08-23T02:13:36.601780" elapsed="0.005292"/>
</kw>
<status status="PASS" start="2026-08-23T02:13:36.596416" elapsed="0.010717"/>
</kw>
<doc>Test case teardown. Show linked bugs and start fast failing in case of failure.</doc>
<status status="PASS" start="2026-08-23T02:13:36.594531" elapsed="0.012653"/>
</kw>
<doc>Check the WSS/SSE listener log for a change notification.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-08-23T02:13:36.469976" elapsed="0.137258">... click for list of related bugs or create a new one if needed (with the
"netconf_gate_userfeatures_txt_notifications_notifications_basic_check_notification"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=netconf_gate_userfeatures_txt_notifications_notifications_basic_check_notification&amp;order=bug_status"

'' does not contain '&lt;notification xmlns='</status>
</test>
<test id="s1-s6-s1-t7" name="Check_Delete_Notification" line="148">
<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-08-23T02:13:36.611470" elapsed="0.000274"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:13:36.611138" elapsed="0.000673"/>
</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-08-23T02:13:36.613054" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:36.612920" elapsed="0.000191"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.612897" elapsed="0.000242"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:13:36.619895" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:36.619742" elapsed="0.000211"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.619719" elapsed="0.000261"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.621223" 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-08-23T02:13:36.620735" elapsed="0.000520"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.621822" 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-08-23T02:13:36.621459" elapsed="0.000439"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:13:36.621955" elapsed="0.000035"/>
</return>
<msg time="2026-08-23T02:13:36.622189" 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-08-23T02:13:36.620267" elapsed="0.001953"/>
</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-08-23T02:13:36.629338" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:36.629206" elapsed="0.000191"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.629182" elapsed="0.000244"/>
</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-08-23T02:13:36.630949" elapsed="0.000017"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:36.630570" elapsed="0.000428"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.630551" elapsed="0.000469"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:13:36.631580" level="INFO">${karaf_connection_index} = 23</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-08-23T02:13:36.631182" elapsed="0.000426"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:13:36.632047" level="INFO">${current_connection_index} = 24</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-08-23T02:13:36.631768" elapsed="0.000312"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:13:36.667517" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:13:36.632681" elapsed="0.035013"/>
</kw>
<msg time="2026-08-23T02:13:36.667898" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:13:36.667947" 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 "n "e "t "c "o "n "f "...</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-08-23T02:13:36.632284" elapsed="0.035700"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:13:36.694698" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "N "o "t "i "f "i "c "a "t "i "o "n "s ". "N "o "t "i "f "i "c "a "t "i "o "n "s "[C "B "a "s "i "c ". "C "h "e "c "k "_ "D "e "l "e "t "e "_ "N "o "t "i "f "i "c "a "t "i "o "n "[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-08-23T02:13:36.668668" elapsed="0.026331"/>
</kw>
<msg time="2026-08-23T02:13:36.695185" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:13:36.695236" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "N "o "t "i "f "i "c "a "t "i "o "n "s ". "N "o "t "i "f "i "c "a "t "i "o "n "s "[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-08-23T02:13:36.668171" elapsed="0.027102"/>
</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-08-23T02:13:36.695615" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:36.695362" elapsed="0.000335"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.695335" elapsed="0.000400"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.696414" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "N "o "t "i "f "i "c "a "t "i "o "n "s ". "N "o "t "i "f "i "c "a "t "i "o "n "s "[C "B "a "s "i "c ". "C "h "e "c "k "_ "D "e "l "e "t "e "_ "N "o "t "i "f "i "c "a "t "i "o "n "[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-08-23T02:13:36.695951" elapsed="0.000565"/>
</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-08-23T02:13:36.696825" elapsed="0.000050"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:36.696592" elapsed="0.000347"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.696572" elapsed="0.000394"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:13:36.697004" elapsed="0.000037"/>
</return>
<kw name="Run Keyword If" owner="BuiltIn" type="TEARDOWN">
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-23T02:13:36.700330" elapsed="0.000150"/>
</kw>
<msg time="2026-08-23T02:13:36.700551" 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-08-23T02:13:36.699607" elapsed="0.001046"/>
</kw>
<kw name="Open 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-08-23T02:13:36.701677" elapsed="0.000040"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:36.702730" elapsed="0.000040"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:13:36.697963" elapsed="0.005080"/>
</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-08-23T02:13:36.697327" elapsed="0.005836"/>
</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-08-23T02:13:36.630247" elapsed="0.073086"/>
</kw>
<msg time="2026-08-23T02:13:36.703434" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:13:36.703480" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "N "o "t "i "f "i "c "a "t "i "o "n "s ". "N "o "t "i "f "i "c "a "t "i "o "n "s "[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-08-23T02:13:36.629586" elapsed="0.073931"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:13:36.703945" elapsed="0.000037"/>
</return>
<status status="PASS" start="2026-08-23T02:13:36.703798" elapsed="0.000232"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.703577" elapsed="0.000489"/>
</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-08-23T02:13:36.704528" elapsed="0.000037"/>
</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-08-23T02:13:36.704998" elapsed="0.000028"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:13:36.705085" elapsed="0.000018"/>
</return>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Attemp to send command to karaf for ${member_index}, if fail then open connection and try again.</doc>
<status status="PASS" start="2026-08-23T02:13:36.628858" elapsed="0.076343"/>
</kw>
<msg time="2026-08-23T02:13:36.705296" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:13:36.705339" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "N "o "t "i "f "i "c "a "t "i "o "n "s ". "N "o "t "i "f "i "c "a "t "i "o "n "s "[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-08-23T02:13:36.622681" elapsed="0.082702"/>
</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-08-23T02:13:36.705722" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:36.705466" elapsed="0.000312"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.705448" elapsed="0.000355"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:13:36.622498" elapsed="0.083330"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:13:36.622288" elapsed="0.083593"/>
</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-08-23T02:13:36.619276" elapsed="0.086662"/>
</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-08-23T02:13:36.612552" elapsed="0.093444"/>
</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-08-23T02:13:36.612028" elapsed="0.094015"/>
</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-08-23T02:13:36.608337" elapsed="0.097773"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.706653" level="FAIL">'' does not contain '&lt;operation&gt;deleted&lt;/operation&gt;'</msg>
<arg>${notification}</arg>
<arg>&lt;operation&gt;deleted&lt;/operation&gt;</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="FAIL" start="2026-08-23T02:13:36.706275" elapsed="0.000455">'' does not contain '&lt;operation&gt;deleted&lt;/operation&gt;'</status>
</kw>
<kw name="Teardown_Test_Show_Bugs_And_Start_Fast_Failing_If_Test_Failed" owner="SetupUtils" type="TEARDOWN">
<kw name="Run Keyword If Test Failed" owner="BuiltIn">
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.708188" level="INFO">${SuiteFastFail} = True</msg>
<arg>${SuiteFastFail}</arg>
<arg>True</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-23T02:13:36.707848" elapsed="0.000410"/>
</kw>
<arg>BuiltIn.Set_Suite_Variable</arg>
<arg>${SuiteFastFail}</arg>
<arg>True</arg>
<doc>Runs the given keyword with the given arguments, if the test failed.</doc>
<status status="PASS" start="2026-08-23T02:13:36.707399" elapsed="0.000920"/>
</kw>
<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-08-23T02:13:36.709210" elapsed="0.000029"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:36.708749" elapsed="0.000529"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.708732" elapsed="0.000571"/>
</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-08-23T02:13:36.709451" elapsed="0.000363"/>
</kw>
<kw name="Report_Failure_And_Point_To_Linked_Bugs" owner="Utils">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.715261" 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-08-23T02:13:36.714744" elapsed="0.000547"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="NOT RUN" start="2026-08-23T02:13:36.715511" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:36.715367" elapsed="0.000186"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.715349" elapsed="0.000227"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.716113" level="INFO">${newline} = 
</msg>
<var>${newline}</var>
<arg>chr(10)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-23T02:13:36.715788" elapsed="0.000352"/>
</kw>
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:13:36.716587" level="INFO">${reference} = netconf_gate_userfeatures_txt_Notifications_Notifications_Basic_Check_Delete_Notification</msg>
<var>${reference}</var>
<arg>${SUITE_NAME}_${TEST_NAME}</arg>
<arg>[ /\.-]</arg>
<arg>_</arg>
<doc>Replaces ``pattern`` in the given ``string`` with ``replace_with``.</doc>
<status status="PASS" start="2026-08-23T02:13:36.716319" elapsed="0.000296"/>
</kw>
<kw name="Convert To Lower Case" owner="String">
<msg time="2026-08-23T02:13:36.717007" level="INFO">${reference} = netconf_gate_userfeatures_txt_notifications_notifications_basic_check_delete_notification</msg>
<var>${reference}</var>
<arg>${reference}</arg>
<doc>Converts string to lower case.</doc>
<status status="PASS" start="2026-08-23T02:13:36.716776" elapsed="0.000260"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.717558" level="INFO">${msg} = ... click for list of related bugs or create a new one if needed (with the
"netconf_gate_userfeatures_txt_notifications_notifications_basic_check_delete_notification"
reference somewhere inside)</msg>
<var>${msg}</var>
<arg>... click for list of related bugs or create a new one if needed (with the${newline}"${reference}"${newline}reference somewhere inside)</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:36.717200" elapsed="0.000386"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.718076" level="INFO">${bugs} = "https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=netconf_gate_userfeatures_txt_notifications_notifications_basic_check_delete_notification&amp;order=bug_status"</msg>
<var>${bugs}</var>
<arg>"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=${reference}&amp;order=bug_status"</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:36.717742" elapsed="0.000363"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.718731" level="INFO">Set test message to:
... click for list of related bugs or create a new one if needed (with the
"netconf_gate_userfeatures_txt_notifications_notifications_basic_check_delete_notification"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=netconf_gate_userfeatures_txt_notifications_notifications_basic_check_delete_notification&amp;order=bug_status"

'' does not contain '&lt;operation&gt;deleted&lt;/operation&gt;'</msg>
<arg>${msg}${newline}${bugs}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="PASS" start="2026-08-23T02:13:36.718273" elapsed="0.000512"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.719271" level="INFO">... click for list of related bugs or create a new one if needed (with the
"netconf_gate_userfeatures_txt_notifications_notifications_basic_check_delete_notification"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=netconf_gate_userfeatures_txt_notifications_notifications_basic_check_delete_notification&amp;order=bug_status"</msg>
<arg>${msg}${newline}${bugs}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:36.718959" elapsed="0.000364"/>
</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-08-23T02:13:36.714408" elapsed="0.004973"/>
</kw>
<status status="PASS" start="2026-08-23T02:13:36.708536" elapsed="0.010894"/>
</kw>
<doc>Test case teardown. Show linked bugs and start fast failing in case of failure.</doc>
<status status="PASS" start="2026-08-23T02:13:36.707086" elapsed="0.012384"/>
</kw>
<doc>Check the WSS/SSE listener log for a delete notification.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-08-23T02:13:36.607652" elapsed="0.111859">... click for list of related bugs or create a new one if needed (with the
"netconf_gate_userfeatures_txt_notifications_notifications_basic_check_delete_notification"
reference somewhere inside)
"https://bugs.opendaylight.org/buglist.cgi?f1=cf_external_ref&amp;o1=substring&amp;v1=netconf_gate_userfeatures_txt_notifications_notifications_basic_check_delete_notification&amp;order=bug_status"

'' does not contain '&lt;operation&gt;deleted&lt;/operation&gt;'</status>
</test>
<test id="s1-s6-s1-t8" name="Check_Bug_3934" line="153">
<kw name="Setup_Test_With_Logging_And_Without_Fast_Failing" owner="SetupUtils" type="SETUP">
<kw name="Run_Even_When_Failing_Fast" owner="FailFast">
<kw name="No Operation" owner="BuiltIn">
<doc>Does absolutely nothing.</doc>
<status status="PASS" start="2026-08-23T02:13:36.723158" elapsed="0.000225"/>
</kw>
<doc>This is just a more readable 'None' to override [Setup].</doc>
<status status="PASS" start="2026-08-23T02:13:36.722887" elapsed="0.000553"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Log_Testcase_Start_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:13:36.724503" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:36.724390" elapsed="0.000161"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.724370" elapsed="0.000204"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:13:36.730911" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:36.730745" elapsed="0.000226"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.730722" elapsed="0.000277"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.732335" 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-08-23T02:13:36.731772" elapsed="0.000599"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.732983" 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-08-23T02:13:36.732576" elapsed="0.000439"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:13:36.733071" elapsed="0.000040"/>
</return>
<msg time="2026-08-23T02:13:36.733295" 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-08-23T02:13:36.731290" elapsed="0.002037"/>
</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-08-23T02:13:36.740886" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:36.740724" elapsed="0.000225"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.740698" elapsed="0.000281"/>
</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-08-23T02:13:36.742662" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:36.742517" elapsed="0.000206"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.742492" elapsed="0.000260"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:13:36.743464" level="INFO">${karaf_connection_index} = 23</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-08-23T02:13:36.742979" elapsed="0.000521"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:13:36.744195" level="INFO">${current_connection_index} = 24</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-08-23T02:13:36.743858" elapsed="0.000372"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:13:36.775984" 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 "n "e "t "c "o "n "f "- "g "a "t "e "- "u "s "e "r "[78Cf "[A[78Ce</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:13:36.744985" elapsed="0.031187"/>
</kw>
<msg time="2026-08-23T02:13:36.776351" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:13:36.776399" 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 "n "e "t "c "o "n "f "...</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-08-23T02:13:36.744446" elapsed="0.031988"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:13:36.801483" level="INFO">"a "t "u "r "e "s ". "t "x "t ". "N "o "t "i "f "i "c "a "t "i "o "n "s ". "N "o "t "i "f "i "c "a "t "i "o "n "s "[C "B "a "s "i "c ". "C "h "e "c "k "_ "B "u "g "_ "3 "9 "3 "4 "[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-08-23T02:13:36.777064" elapsed="0.024628"/>
</kw>
<msg time="2026-08-23T02:13:36.801937" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:13:36.801985" level="INFO">${message_wait} =  "a "t "u "r "e "s ". "t "x "t ". "N "o "t "i "f "i "c "a "t "i "o "n "s ". "N "o "t "i "f "i "c "a "t "i "o "n "s "[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-08-23T02:13:36.776613" elapsed="0.025409"/>
</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-08-23T02:13:36.802380" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:36.802115" elapsed="0.000344"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.802089" elapsed="0.000400"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.803101" level="INFO"> "a "t "u "r "e "s ". "t "x "t ". "N "o "t "i "f "i "c "a "t "i "o "n "s ". "N "o "t "i "f "i "c "a "t "i "o "n "s "[C "B "a "s "i "c ". "C "h "e "c "k "_ "B "u "g "_ "3 "9 "3 "4 "[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-08-23T02:13:36.802664" elapsed="0.000506"/>
</kw>
<if>
<branch type="IF" condition="'${status_wait}' != 'PASS'">
<kw name="Fail" owner="BuiltIn">
<arg>Failed to see prompt after sending the command: ${command}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:36.803455" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:36.803237" elapsed="0.000294"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.803219" elapsed="0.000337"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:13:36.803592" 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-08-23T02:13:36.806944" elapsed="0.000158"/>
</kw>
<msg time="2026-08-23T02:13:36.807175" 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-08-23T02:13:36.806136" elapsed="0.001150"/>
</kw>
<kw name="Open 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-08-23T02:13:36.808260" elapsed="0.000039"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:36.809250" elapsed="0.000037"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:13:36.804546" elapsed="0.004821"/>
</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-08-23T02:13:36.803926" elapsed="0.005557"/>
</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-08-23T02:13:36.742103" elapsed="0.067481"/>
</kw>
<msg time="2026-08-23T02:13:36.809679" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:13:36.809741" level="INFO">${message} =  "a "t "u "r "e "s ". "t "x "t ". "N "o "t "i "f "i "c "a "t "i "o "n "s ". "N "o "t "i "f "i "c "a "t "i "o "n "s "[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-08-23T02:13:36.741185" elapsed="0.068597"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:13:36.810251" elapsed="0.000026"/>
</return>
<status status="PASS" start="2026-08-23T02:13:36.810136" elapsed="0.000175"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.810114" elapsed="0.000221"/>
</if>
<kw name="Open_Controller_Karaf_Console_On_Background" owner="KarafKeywords">
<arg>${member_index}</arg>
<doc>If there is a stored ssh connection index of connection to the controller's karaf console for 1,
close the previous connection. In any case create a new connection
to karaf console for 1, set correct prompt set and login to karaf console.
Store connection index for 1 and restore the previous active connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:36.810762" 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-08-23T02:13:36.811134" elapsed="0.000027"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:13:36.811209" 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-08-23T02:13:36.740278" elapsed="0.071042"/>
</kw>
<msg time="2026-08-23T02:13:36.811417" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:13:36.811461" level="INFO">${output} =  "a "t "u "r "e "s ". "t "x "t ". "N "o "t "i "f "i "c "a "t "i "o "n "s ". "N "o "t "i "f "i "c "a "t "i "o "n "s "[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-08-23T02:13:36.734124" elapsed="0.077373"/>
</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-08-23T02:13:36.811825" elapsed="0.000063"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:36.811573" elapsed="0.000349"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.811556" elapsed="0.000390"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:13:36.733926" elapsed="0.078044"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:13:36.733658" elapsed="0.078351"/>
</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-08-23T02:13:36.730263" elapsed="0.081809"/>
</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-08-23T02:13:36.724081" elapsed="0.088049"/>
</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-08-23T02:13:36.723589" elapsed="0.088588"/>
</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-08-23T02:13:36.720433" elapsed="0.091801"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:13:36.812605" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/notifications/templates/config_data.xml"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/notifications/templates/config_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:13:36.812777" level="INFO">${data} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;topology&gt;
    &lt;topology-id&gt;netconf-notif&lt;/topology-id&gt;
  &lt;/topology&gt;
&lt;/network-topology&gt;
</msg>
<var>${data}</var>
<arg>${TEMPLATE_FOLDER}/${RESTCONF_CONFIG_DATA}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:13:36.812407" elapsed="0.000398"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.813253" level="INFO">&lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;
  &lt;topology&gt;
    &lt;topology-id&gt;netconf-notif&lt;/topology-id&gt;
  &lt;/topology&gt;
&lt;/network-topology&gt;
</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:36.812997" elapsed="0.000304"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.813718" level="INFO"/>
<arg>${notification}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:36.813453" elapsed="0.000307"/>
</kw>
<kw name="Remove String" owner="String">
<msg time="2026-08-23T02:13:36.814169" level="INFO">${packed_data} = &lt;network-topology xmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;  &lt;topology&gt;    &lt;topology-id&gt;netconf-notif&lt;/topology-id&gt;  &lt;/topology&gt;&lt;/network-topology&gt;</msg>
<var>${packed_data}</var>
<arg>${data}</arg>
<arg>\n</arg>
<doc>Removes all ``removables`` from the given ``string``.</doc>
<status status="PASS" start="2026-08-23T02:13:36.813947" elapsed="0.000250"/>
</kw>
<kw name="Remove String" owner="String">
<msg time="2026-08-23T02:13:36.814570" level="INFO">${packed_data} = &lt;network-topologyxmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;netconf-notif&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;</msg>
<var>${packed_data}</var>
<arg>${packed_data}</arg>
<arg>${SPACE}</arg>
<doc>Removes all ``removables`` from the given ``string``.</doc>
<status status="PASS" start="2026-08-23T02:13:36.814354" elapsed="0.000243"/>
</kw>
<kw name="Remove String" owner="String">
<msg time="2026-08-23T02:13:36.814966" level="INFO">${packed_notification} = </msg>
<var>${packed_notification}</var>
<arg>${notification}</arg>
<arg>\n</arg>
<doc>Removes all ``removables`` from the given ``string``.</doc>
<status status="PASS" start="2026-08-23T02:13:36.814751" elapsed="0.000241"/>
</kw>
<kw name="Remove String" owner="String">
<msg time="2026-08-23T02:13:36.815352" level="INFO">${packed_notification} = </msg>
<var>${packed_notification}</var>
<arg>${packed_notification}</arg>
<arg>\\n</arg>
<doc>Removes all ``removables`` from the given ``string``.</doc>
<status status="PASS" start="2026-08-23T02:13:36.815147" elapsed="0.000230"/>
</kw>
<kw name="Remove String" owner="String">
<msg time="2026-08-23T02:13:36.815746" level="INFO">${packed_notification} = </msg>
<var>${packed_notification}</var>
<arg>${packed_notification}</arg>
<arg>${SPACE}</arg>
<doc>Removes all ``removables`` from the given ``string``.</doc>
<status status="PASS" start="2026-08-23T02:13:36.815530" elapsed="0.000241"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.816370" level="FAIL">'' does not contain '&lt;network-topologyxmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;netconf-notif&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;'</msg>
<arg>${packed_notification}</arg>
<arg>${packed_data}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="FAIL" start="2026-08-23T02:13:36.815940" elapsed="0.000513">'' does not contain '&lt;network-topologyxmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;netconf-notif&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;'</status>
</kw>
<kw name="Report Failure Due To Bug" owner="Utils" type="TEARDOWN">
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.817682" 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-08-23T02:13:36.817253" elapsed="0.000456"/>
</kw>
<if>
<branch type="IF" condition="('${TEST_STATUS}' != 'FAIL') or ${test_skipped}">
<return>
<status status="NOT RUN" start="2026-08-23T02:13:36.817952" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:36.817782" elapsed="0.000213"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.817764" elapsed="0.000252"/>
</if>
<kw name="Comment" owner="BuiltIn">
<arg>Jira tickets are {PROJECT}-{NUMBER} while Bugzilla tickets are {NUMBER}</arg>
<doc>Displays the given messages in the log file as keyword arguments.</doc>
<status status="PASS" start="2026-08-23T02:13:36.818183" elapsed="0.000210"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="Should Contain" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.819458" level="FAIL">'3934' does not contain '-'</msg>
<arg>${number}</arg>
<arg>-</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="FAIL" start="2026-08-23T02:13:36.818923" elapsed="0.000596">'3934' does not contain '-'</status>
</kw>
<msg time="2026-08-23T02:13:36.819615" level="INFO">${match} = False</msg>
<var>${match}</var>
<arg>Should Contain</arg>
<arg>${number}</arg>
<arg>-</arg>
<doc>Runs the specified keyword and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-08-23T02:13:36.818555" elapsed="0.001083"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.820160" level="INFO">${bug_url} = https://bugs.opendaylight.org/show_bug.cgi?id=3934</msg>
<var>${bug_url}</var>
<arg>${match}</arg>
<arg>https://jira.opendaylight.org/browse/${number}</arg>
<arg>https://bugs.opendaylight.org/show_bug.cgi?id=${number}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T02:13:36.819809" elapsed="0.000377"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.820637" level="INFO">${msg} = This test fails due to https://bugs.opendaylight.org/show_bug.cgi?id=3934</msg>
<var>${msg}</var>
<arg>This test fails due to ${bug_url}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:36.820350" elapsed="0.000313"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.821125" level="INFO">${newline} = 
</msg>
<var>${newline}</var>
<arg>chr(10)</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-08-23T02:13:36.820817" elapsed="0.000334"/>
</kw>
<kw name="Set Test Message" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.821683" level="INFO">Set test message to:
This test fails due to https://bugs.opendaylight.org/show_bug.cgi?id=3934

'' does not contain '&lt;network-topologyxmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;netconf-notif&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;'</msg>
<arg>${msg}${newline}${newline}${TEST_MESSAGE}</arg>
<doc>Sets message for the current test case.</doc>
<status status="PASS" start="2026-08-23T02:13:36.821306" elapsed="0.000426"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.822166" level="INFO">This test fails due to https://bugs.opendaylight.org/show_bug.cgi?id=3934</msg>
<arg>${msg}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:36.821909" elapsed="0.000311"/>
</kw>
<if>
<branch type="IF" condition="&quot;${include_bug_in_tags}&quot;==&quot;True&quot;">
<kw name="Set Tags" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.822901" level="INFO">Set tag 'https://bugs.opendaylight.org/show_bug.cgi?id=3934'.</msg>
<arg>${bug_url}</arg>
<doc>Adds given ``tags`` for the current test or all tests in a suite.</doc>
<status status="PASS" start="2026-08-23T02:13:36.822541" elapsed="0.000408"/>
</kw>
<status status="PASS" start="2026-08-23T02:13:36.822298" elapsed="0.000684"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.822279" elapsed="0.000729"/>
</if>
<arg>3934</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="PASS" start="2026-08-23T02:13:36.816892" elapsed="0.006162"/>
</kw>
<doc>Check the WSS/SSE listener log for the bug correction.</doc>
<tag>critical</tag>
<tag>https://bugs.opendaylight.org/show_bug.cgi?id=3934</tag>
<status status="FAIL" start="2026-08-23T02:13:36.719885" elapsed="0.103216">This test fails due to https://bugs.opendaylight.org/show_bug.cgi?id=3934

'' does not contain '&lt;network-topologyxmlns="urn:TBD:params:xml:ns:yang:network-topology"&gt;&lt;topology&gt;&lt;topology-id&gt;netconf-notif&lt;/topology-id&gt;&lt;/topology&gt;&lt;/network-topology&gt;'</status>
</test>
<kw name="Teardown_Everything" type="TEARDOWN">
<kw name="Delete All Sessions" owner="RequestsLibrary">
<msg time="2026-08-23T02:13:36.823992" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects</doc>
<status status="PASS" start="2026-08-23T02:13:36.823913" elapsed="0.000181"/>
</kw>
<kw name="Close All Connections" owner="SSHLibrary">
<doc>Closes all open connections.</doc>
<status status="PASS" start="2026-08-23T02:13:36.824240" elapsed="0.001074"/>
</kw>
<doc>Close connections.
Tear down imported Resources.</doc>
<status status="PASS" start="2026-08-23T02:13:36.823679" elapsed="0.001694"/>
</kw>
<doc>Basic tests for BGP application peer.

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

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

Test suite performs basic subscribtion case for data store notifications.
For procedure description see the
https://wiki.opendaylight.org/view/OpenDaylight_Controller:MD-SAL:Restconf:Change_event_notification_subscription


This suite uses inventory (config part) as an area to make dummy writes into,
just to trigger data change listener to produce a notification.
Openflowplugin may have some data there, and before Boron, netconf-connector
was also exposing some data in inventory.

To avoid unexpected responses, this suite depetes all data from config inventory,
so this suite should not be followed by any suite expecting default data there.

Covered bugs:
Bug 3934 - Websockets: Scope ONE doesn't work correctly

TODO: Use cars/people model for data</doc>
<status status="FAIL" start="2026-08-23T02:13:22.514093" elapsed="14.311310"/>
</suite>
<status status="FAIL" start="2026-08-23T02:13:22.512365" elapsed="14.314065"/>
</suite>
<suite id="s1-s7" name="KeyAuth" source="/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/KeyAuth">
<suite id="s1-s7-s1" name="Keyauth" source="/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/KeyAuth/keyauth.robot">
<kw name="Suite Setup" type="SETUP">
<kw name="Setup_Utils_For_Setup_And_Teardown" owner="SetupUtils">
<kw name="Do_Not_Fail_Fast_From_Now_On" owner="FailFast">
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.924366" 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-08-23T02:13:36.919747" elapsed="0.004685"/>
</kw>
<doc>Set suite to not fail fast.</doc>
<status status="PASS" start="2026-08-23T02:13:36.919498" elapsed="0.005015"/>
</kw>
<kw name="Setup_Karaf_Keywords" owner="KarafKeywords">
<kw name="ClusterManagement_Setup" owner="ClusterManagement">
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.929494" 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-08-23T02:13:36.925678" elapsed="0.003843"/>
</kw>
<if>
<branch type="IF" condition="${already_done}">
<return>
<status status="NOT RUN" start="2026-08-23T02:13:36.929756" elapsed="0.000021"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:36.929618" elapsed="0.000193"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.929588" elapsed="0.000262"/>
</if>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.930365" 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-08-23T02:13:36.930009" elapsed="0.000398"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.930890" 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-08-23T02:13:36.930563" elapsed="0.000353"/>
</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-08-23T02:13:36.931431" elapsed="0.000302"/>
</kw>
<msg time="2026-08-23T02:13:36.931867" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:13:36.931916" 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-08-23T02:13:36.931078" elapsed="0.000861"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.932498" 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-08-23T02:13:36.932116" elapsed="0.000408"/>
</kw>
<kw name="ClusterManagement__Compute_Derived_Variables" owner="ClusterManagement">
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.933542" level="INFO">@{member_index_list} = [ ]</msg>
<var>@{member_index_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-08-23T02:13:36.933276" elapsed="0.000292"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.933991" level="INFO">@{session_list} = [ ]</msg>
<var>@{session_list}</var>
<doc>Returns a list containing given items.</doc>
<status status="PASS" start="2026-08-23T02:13:36.933712" elapsed="0.000305"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.934463" 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-08-23T02:13:36.934172" elapsed="0.000317"/>
</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-08-23T02:13:36.937872" elapsed="0.000229"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.938585" level="INFO">${member_ip} = 10.30.170.114</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-08-23T02:13:36.938263" elapsed="0.000348"/>
</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-08-23T02:13:36.938762" elapsed="0.000249"/>
</kw>
<kw name="Resolve_Http_Session_For_Member" owner="ClusterManagement">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.939925" 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-08-23T02:13:36.939495" elapsed="0.000457"/>
</kw>
<return>
<value>${session}</value>
<status status="PASS" start="2026-08-23T02:13:36.939998" elapsed="0.000044"/>
</return>
<msg time="2026-08-23T02:13:36.940167" 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-08-23T02:13:36.939204" elapsed="0.000988"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:13:36.940855" level="INFO">Creating Session using : alias=ClusterManagement__session_1, url=http://10.30.170.114:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x72b0ece5ebd0&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-08-23T02:13:36.940349" elapsed="0.000665"/>
</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-08-23T02:13:36.941173" elapsed="0.000192"/>
</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-08-23T02:13:36.937296" elapsed="0.004127"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:13:36.937101" elapsed="0.004366"/>
</iter>
<var>${index}</var>
<value>1</value>
<value>${int_of_members+1}</value>
<status status="PASS" start="2026-08-23T02:13:36.934566" elapsed="0.006937"/>
</for>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.942086" 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-08-23T02:13:36.941671" elapsed="0.000458"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.942750" level="INFO">${ClusterManagement__index_to_ip_mapping} = {1: '10.30.170.114'}</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-08-23T02:13:36.942350" elapsed="0.000443"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.943350" 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-08-23T02:13:36.942967" elapsed="0.000425"/>
</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-08-23T02:13:36.932798" elapsed="0.010651"/>
</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-08-23T02:13:36.925337" elapsed="0.018167"/>
</kw>
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:13:36.943681" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:36.943569" elapsed="0.000157"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.943550" elapsed="0.000198"/>
</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-08-23T02:13:36.946887" 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-08-23T02:13:36.946491" elapsed="0.000423"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.947371" 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-08-23T02:13:36.947072" elapsed="0.000324"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:13:36.947441" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:13:36.947593" 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-08-23T02:13:36.946166" elapsed="0.001452"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Run_Bash_Command_On_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:13:36.948650" level="INFO">${member_ip} = 10.30.170.114</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-08-23T02:13:36.948347" elapsed="0.000329"/>
</kw>
<kw name="Run_Keyword_Preserve_Connection" owner="SSHKeywords">
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:13:36.949422" level="INFO">index=23
host=10.30.170.114
alias=None
port=22
timeout=1 minute
newline=

prompt=&gt;
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-08-23T02:13:36.949524" level="INFO">${current_connection} = index=23
host=10.30.170.114
alias=None
port=22
timeout=1 minute
newline=

prompt=&gt;
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-08-23T02:13:36.949273" elapsed="0.000278"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Controller" owner="Utils">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Run Command On Remote System" owner="Utils">
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot; and &quot;${return_stderr}&quot;!=&quot;True&quot;">
<kw name="Fail" owner="BuiltIn">
<arg>At least one of {return_stdout} or {return_stderr} args should be set to True</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:36.953330" elapsed="0.000049"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:36.952630" elapsed="0.000810"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:36.952585" elapsed="0.000926"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:13:36.954151" level="INFO">index=23
host=10.30.170.114
alias=None
port=22
timeout=1 minute
newline=

prompt=&gt;
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-08-23T02:13:36.954427" level="INFO">${current_ssh_connection} = index=23
host=10.30.170.114
alias=None
port=22
timeout=1 minute
newline=

prompt=&gt;
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-08-23T02:13:36.953787" elapsed="0.000745"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.955459" level="INFO">Attempting to execute command "iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save" on remote system "10.30.170.114" 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-08-23T02:13:36.954806" elapsed="0.000818"/>
</kw>
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:13:36.956716" level="INFO">${conn_id} = 24</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-08-23T02:13:36.955924" elapsed="0.000898"/>
</kw>
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-08-23T02:13:36.958418" level="INFO">Length is 0.</msg>
<msg time="2026-08-23T02:13:36.958495" 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-08-23T02:13:36.958140" elapsed="0.000379"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:13:36.958722" elapsed="0.000374"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-08-23T02:13:36.960074" level="INFO">Logging into '10.30.170.114:22' as 'jenkins'.</msg>
<msg time="2026-08-23T02:13:37.292947" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-186-generic x86_64)

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

 System information as of Sun Aug 23 02:12:41 UTC 2026

  System load:  0.02               Processes:             130
  Usage of /:   13.8% of 77.35GB   Users logged in:       1
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.114
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

41 updates can be applied immediately.
35 of these updates are standard security updates.
To see these additional updates run: apt list --upgradable

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

New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sun Aug 23 02:13:22 2026 from 10.30.171.240
[?2004h[jenkins@releng-19126-54-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-08-23T02:13:36.959711" elapsed="0.333338"/>
</kw>
<msg time="2026-08-23T02:13:37.293119" 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-08-23T02:13:36.959349" elapsed="0.333847"/>
</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-08-23T02:13:36.957349" elapsed="0.336080"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-23T02:13:37.294262" level="INFO">Executing command 'iptables -I INPUT -p tcp --dport 8101 -j ACCEPT; iptables-save'.</msg>
<msg time="2026-08-23T02:13:37.307083" level="INFO">Command exited with return code 4.</msg>
<msg time="2026-08-23T02:13:37.307980" level="INFO">${stdout} = </msg>
<msg time="2026-08-23T02:13:37.308434" 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-08-23T02:13:37.293770" elapsed="0.014939"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-08-23T02:13:37.309608" elapsed="0.001651"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:37.313240" 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-08-23T02:13:37.312333" elapsed="0.001166"/>
</kw>
<if>
<branch type="IF" condition="&quot;${return_stdout}&quot;!=&quot;True&quot;">
<return>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-08-23T02:13:37.314315" elapsed="0.000052"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:37.313742" elapsed="0.000701"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:37.313663" elapsed="0.000893"/>
</if>
<if>
<branch type="IF" condition="&quot;${return_stderr}&quot;!=&quot;True&quot;">
<return>
<value>${stdout}</value>
<status status="PASS" start="2026-08-23T02:13:37.315221" elapsed="0.000115"/>
</return>
<status status="PASS" start="2026-08-23T02:13:37.314775" elapsed="0.000639"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:37.314709" elapsed="0.000814"/>
</if>
<return>
<value>${stdout}</value>
<value>${stderr}</value>
<status status="NOT RUN" start="2026-08-23T02:13:37.315682" elapsed="0.000025"/>
</return>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-23T02:13:37.322343" elapsed="0.000156"/>
</kw>
<msg time="2026-08-23T02:13:37.322544" 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-08-23T02:13:37.321402" elapsed="0.001253"/>
</kw>
<kw name="Open 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-08-23T02:13:37.323025" elapsed="0.000042"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:37.323319" elapsed="0.000038"/>
</kw>
<arg>${current_ssh_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:13:37.316717" elapsed="0.006768"/>
</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-08-23T02:13:36.951542" elapsed="0.372264"/>
</kw>
<msg time="2026-08-23T02:13:37.323960" 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-08-23T02:13:36.950702" elapsed="0.373312"/>
</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-08-23T02:13:36.950227" elapsed="0.374097"/>
</kw>
<msg time="2026-08-23T02:13:37.324368" 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-08-23T02:13:36.949706" elapsed="0.374711"/>
</kw>
<kw name="Restore_Current_Ssh_Connection_From_Index" owner="SSHKeywords" type="TEARDOWN">
<kw name="Run Keyword And Return If" owner="BuiltIn">
<kw name="Switch Connection" owner="SSHLibrary">
<arg>${connection_index}</arg>
<doc>Switches the active connection by index or alias.</doc>
<status status="PASS" start="2026-08-23T02:13:37.327800" elapsed="0.000252"/>
</kw>
<msg time="2026-08-23T02:13:37.328096" 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-08-23T02:13:37.327200" elapsed="0.001041"/>
</kw>
<kw name="Open 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-08-23T02:13:37.328399" elapsed="0.000021"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:37.328557" elapsed="0.000020"/>
</kw>
<arg>${current_connection.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:13:37.324712" elapsed="0.004073"/>
</kw>
<msg time="2026-08-23T02:13:37.328922" 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-08-23T02:13:36.948911" elapsed="0.380036"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:37.329422" level="INFO"/>
<arg>${output}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:37.329150" elapsed="0.000315"/>
</kw>
<return>
<value>${output}</value>
<status status="PASS" start="2026-08-23T02:13:37.329509" 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-08-23T02:13:36.947989" elapsed="0.381651"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:13:36.947795" elapsed="0.381884"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:13:36.947670" elapsed="0.382053"/>
</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-08-23T02:13:36.943980" elapsed="0.385804"/>
</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-08-23T02:13:37.329960" 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-08-23T02:13:37.344105" elapsed="0.000016"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:37.343978" elapsed="0.000176"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:37.343956" elapsed="0.000223"/>
</if>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:13:37.344471" level="INFO">index=23
host=10.30.170.114
alias=None
port=22
timeout=1 minute
newline=

prompt=&gt;
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<msg time="2026-08-23T02:13:37.344579" level="INFO">${current_ssh_connection_object} = index=23
host=10.30.170.114
alias=None
port=22
timeout=1 minute
newline=

prompt=&gt;
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_errors=strict</msg>
<var>${current_ssh_connection_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-08-23T02:13:37.344341" elapsed="0.000264"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:37.345073" level="INFO">{}</msg>
<arg>${connection_index_dict}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:37.344757" elapsed="0.000361"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:37.345517" level="INFO">1</msg>
<arg>${member_index}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:37.345274" elapsed="0.000286"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:13:37.346333" 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-08-23T02:13:37.346095" elapsed="0.000365">Dictionary does not contain key '1'.</status>
</kw>
<msg time="2026-08-23T02:13:37.346571" level="INFO">${status} = FAIL</msg>
<msg time="2026-08-23T02:13:37.346617" 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-08-23T02:13:37.345714" elapsed="0.000926"/>
</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-08-23T02:13:37.346973" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:37.346723" elapsed="0.000328"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:37.346703" elapsed="0.000373"/>
</if>
<kw name="Resolve_IP_Address_For_Member" owner="ClusterManagement">
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:13:37.347822" level="INFO">${ip_address} = 10.30.170.114</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-08-23T02:13:37.347555" elapsed="0.000310"/>
</kw>
<return>
<value>${ip_address}</value>
<status status="PASS" start="2026-08-23T02:13:37.347914" elapsed="0.000030"/>
</return>
<msg time="2026-08-23T02:13:37.348065" level="INFO">${odl_ip} = 10.30.170.114</msg>
<var>${odl_ip}</var>
<arg>${member_index}</arg>
<doc>Return node IP address of given index.</doc>
<status status="PASS" start="2026-08-23T02:13:37.347284" elapsed="0.000805"/>
</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-08-23T02:13:37.348244" elapsed="0.000442"/>
</kw>
<kw name="Get Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:13:37.349228" level="INFO">index=25
host=10.30.170.114
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-08-23T02:13:37.349335" level="INFO">${karaf_connection_object} = index=25
host=10.30.170.114
alias=None
port=8101
timeout=10 seconds
newline=

prompt=opendaylight-user
term_type=vt100
width=80
height=24
path_separator=/
encoding=UTF-8
escape_ansi=False
encoding_err...</msg>
<var>${karaf_connection_object}</var>
<doc>Returns information about the connection.</doc>
<status status="PASS" start="2026-08-23T02:13:37.348885" elapsed="0.000731"/>
</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-08-23T02:13:37.349786" elapsed="0.002287"/>
</kw>
<kw name="Login" owner="SSHLibrary">
<msg time="2026-08-23T02:13:37.352507" level="INFO">Logging into '10.30.170.114:8101' as 'karaf'.</msg>
<msg time="2026-08-23T02:13:37.493195" 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-08-23T02:13:37.352240" elapsed="0.141070"/>
</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">
<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-08-23T02:13:37.497477" elapsed="0.000228"/>
</kw>
<msg time="2026-08-23T02:13:37.497956" 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-08-23T02:13:37.496743" elapsed="0.001297"/>
</kw>
<kw name="Open 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-08-23T02:13:37.498207" elapsed="0.000022"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:37.498367" elapsed="0.000020"/>
</kw>
<arg>${current_ssh_connection_object.index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:13:37.494340" elapsed="0.004110"/>
</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-08-23T02:13:37.493654" elapsed="0.004860"/>
</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-08-23T02:13:37.343659" elapsed="0.154909"/>
</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-08-23T02:13:37.330936" elapsed="0.167680"/>
</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-08-23T02:13:37.330539" elapsed="0.168130"/>
</kw>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:13:37.330399" elapsed="0.168312"/>
</iter>
<var>${index}</var>
<value>@{ClusterManagement__member_index_list}</value>
<status status="PASS" start="2026-08-23T02:13:37.330238" elapsed="0.168514"/>
</for>
<arg>http_timeout=${http_timeout}</arg>
<doc>Initialize ClusterManagement. Open ssh karaf connections to each ODL.</doc>
<status status="PASS" start="2026-08-23T02:13:36.924865" elapsed="0.573953"/>
</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-08-23T02:13:37.501729" elapsed="0.000019"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:37.501607" elapsed="0.000173"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:37.501583" elapsed="0.000221"/>
</if>
<kw name="Log_Message_To_Controller_Karaf" owner="KarafKeywords">
<if>
<branch type="IF" condition="'${IS_KARAF_APPL}' == 'False'">
<return>
<value>Not A Karaf App</value>
<status status="NOT RUN" start="2026-08-23T02:13:37.506896" elapsed="0.000014"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:37.506774" elapsed="0.000167"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:37.506756" elapsed="0.000207"/>
</if>
<kw name="List_Indices_Or_All" owner="ClusterManagement">
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:13:37.507960" 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-08-23T02:13:37.507520" elapsed="0.000467"/>
</kw>
<kw name="Create List" owner="BuiltIn">
<msg time="2026-08-23T02:13:37.508439" 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-08-23T02:13:37.508145" elapsed="0.000319"/>
</kw>
<return>
<value>${return_list_copy}</value>
<status status="PASS" start="2026-08-23T02:13:37.508509" elapsed="0.000029"/>
</return>
<msg time="2026-08-23T02:13:37.508663" 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-08-23T02:13:37.507189" elapsed="0.001498"/>
</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-08-23T02:13:37.514154" elapsed="0.000015"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:37.514045" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:37.514026" elapsed="0.000311"/>
</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-08-23T02:13:37.515717" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:37.515523" elapsed="0.000363"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:37.515503" elapsed="0.000413"/>
</if>
<kw name="Get From Dictionary" owner="Collections">
<msg time="2026-08-23T02:13:37.516574" level="INFO">${karaf_connection_index} = 25</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-08-23T02:13:37.516067" elapsed="0.000554"/>
</kw>
<kw name="Switch Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:13:37.517237" level="INFO">${current_connection_index} = 23</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-08-23T02:13:37.516923" elapsed="0.000367"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Write" owner="SSHLibrary">
<msg time="2026-08-23T02:13:37.553690" 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 "/ "n "e "t "[78Cc "[A[78Co</msg>
<arg>${command}</arg>
<doc>Writes the given ``text`` on the remote machine and appends a newline.</doc>
<status status="PASS" start="2026-08-23T02:13:37.519180" elapsed="0.034650"/>
</kw>
<msg time="2026-08-23T02:13:37.554010" level="INFO">${status_write} = PASS</msg>
<msg time="2026-08-23T02:13:37.554084" 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-08-23T02:13:37.517593" elapsed="0.036543"/>
</kw>
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<kw name="Read Until Regexp" owner="SSHLibrary">
<msg time="2026-08-23T02:13:37.583344" level="INFO">"n "f "- "c "s "i "t "- "1 "n "o "d "e "- "g "a "t "e "- "u "s "e "r "f "e "a "t "u "r "e "s "- "a "l "l "- "v "a "n "a "d "i "u "m "/ "t "e "s "t "/ "c "s "i "t "/ "s "u "i "t "e "s "/ "n "e "t "c "o "n "f "/ "K "e "y "A "u "t "h "/ "[78Ck "[A[78Ce
 "y "a "u "t "h ". "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-08-23T02:13:37.555766" elapsed="0.027733"/>
</kw>
<msg time="2026-08-23T02:13:37.583651" level="INFO">${status_wait} = PASS</msg>
<msg time="2026-08-23T02:13:37.583723" level="INFO">${message_wait} =  "n "f "- "c "s "i "t "- "1 "n "o "d "e "- "g "a "t "e "- "u "s "e "r "f "e "a "t "u "r "e "s "- "a "l "l "- "v "a "n "a ...</msg>
<var>${status_wait}</var>
<var>${message_wait}</var>
<arg>SSHLibrary.Read_Until_Regexp</arg>
<arg>${KARAF_PROMPT}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:13:37.554391" elapsed="0.029381"/>
</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-08-23T02:13:37.584296" elapsed="0.000047"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:37.583966" elapsed="0.000475"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:37.583945" elapsed="0.000523"/>
</if>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:37.585181" level="INFO"> "n "f "- "c "s "i "t "- "1 "n "o "d "e "- "g "a "t "e "- "u "s "e "r "f "e "a "t "u "r "e "s "- "a "l "l "- "v "a "n "a "d "i "u "m "/ "t "e "s "t "/ "c "s "i "t "/ "s "u "i "t "e "s "/ "n "e "t "c "o "n "f "/ "K "e "y "A "u "t "h "/ "[78Ck "[A[78Ce
 "y "a "u "t "h ". "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-08-23T02:13:37.584614" elapsed="0.000684"/>
</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-08-23T02:13:37.585739" elapsed="0.000045"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:37.585425" elapsed="0.000486"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:37.585406" elapsed="0.000532"/>
</if>
<return>
<value>${message_wait}</value>
<status status="PASS" start="2026-08-23T02:13:37.585973" 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-08-23T02:13:37.588433" elapsed="0.000152"/>
</kw>
<msg time="2026-08-23T02:13:37.588627" 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-08-23T02:13:37.587873" elapsed="0.000816"/>
</kw>
<kw name="Open 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-08-23T02:13:37.588975" elapsed="0.000025"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:37.589178" elapsed="0.000021"/>
</kw>
<arg>${current_connection_index}</arg>
<doc>Restore active SSH connection in SSHLibrary to given index.</doc>
<status status="PASS" start="2026-08-23T02:13:37.587181" elapsed="0.002162"/>
</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-08-23T02:13:37.586241" elapsed="0.003195"/>
</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-08-23T02:13:37.515159" elapsed="0.074375"/>
</kw>
<msg time="2026-08-23T02:13:37.589626" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:13:37.589671" level="INFO">${message} =  "n "f "- "c "s "i "t "- "1 "n "o "d "e "- "g "a "t "e "- "u "s "e "r "f "e "a "t "u "r "e "s "- "a "l "l "- "v "a "n "a ...</msg>
<var>${status}</var>
<var>${message}</var>
<arg>Execute_Controller_Karaf_Command_On_Background</arg>
<arg>${command}</arg>
<arg>${member_index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:13:37.514519" elapsed="0.075402"/>
</kw>
<if>
<branch type="IF" condition="'${status}' == 'PASS'">
<return>
<value>${message}</value>
<status status="PASS" start="2026-08-23T02:13:37.590327" elapsed="0.000028"/>
</return>
<status status="PASS" start="2026-08-23T02:13:37.590045" elapsed="0.000344"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:37.590025" elapsed="0.000388"/>
</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-08-23T02:13:37.590867" elapsed="0.000048"/>
</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-08-23T02:13:37.591274" elapsed="0.000026"/>
</kw>
<return>
<value>${message}</value>
<status status="NOT RUN" start="2026-08-23T02:13:37.591347" 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-08-23T02:13:37.513739" elapsed="0.077716"/>
</kw>
<msg time="2026-08-23T02:13:37.591547" level="INFO">${status} = PASS</msg>
<msg time="2026-08-23T02:13:37.591590" level="INFO">${output} =  "n "f "- "c "s "i "t "- "1 "n "o "d "e "- "g "a "t "e "- "u "s "e "r "f "e "a "t "u "r "e "s "- "a "l "l "- "v "a "n "a ...</msg>
<var>${status}</var>
<var>${output}</var>
<arg>Execute_Controller_Karaf_Command_With_Retry_On_Background</arg>
<arg>log:log "ROBOT MESSAGE: ${message}"</arg>
<arg>member_index=${index}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="PASS" start="2026-08-23T02:13:37.509083" elapsed="0.082542"/>
</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-08-23T02:13:37.591977" elapsed="0.000023"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:37.591699" elapsed="0.000333"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:37.591682" elapsed="0.000374"/>
</if>
<var name="${index}">1</var>
<status status="PASS" start="2026-08-23T02:13:37.508941" elapsed="0.083139"/>
</iter>
<var>${index}</var>
<value>@{index_list}</value>
<status status="PASS" start="2026-08-23T02:13:37.508746" elapsed="0.083363"/>
</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-08-23T02:13:37.506482" elapsed="0.085679"/>
</kw>
<doc>Log suite name to karaf log, useful in suite setup.</doc>
<status status="PASS" start="2026-08-23T02:13:37.499635" elapsed="0.092581"/>
</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-08-23T02:13:37.498994" elapsed="0.093262"/>
</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-08-23T02:13:36.919173" elapsed="0.673135"/>
</kw>
<kw name="Setup_NetconfKeywords" owner="NetconfKeywords">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:13:37.593120" level="INFO">${tmp} = {}</msg>
<var>${tmp}</var>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-23T02:13:37.592805" elapsed="0.000344"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:37.597181" level="INFO">${NetconfKeywords__mounted_device_types} = {}</msg>
<arg>${NetconfKeywords__mounted_device_types}</arg>
<arg>${tmp}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-23T02:13:37.593310" elapsed="0.003918"/>
</kw>
<if>
<branch type="IF" condition="${create_session_for_templated_requests}">
<kw name="Create_Default_Session" owner="TemplatedRequests">
<kw name="Create Session" owner="RequestsLibrary">
<msg time="2026-08-23T02:13:37.601552" level="INFO">Creating Session using : alias=default, url=http://10.30.170.114:8181, headers={},                     cookies={}, auth=&lt;requests.auth.HTTPBasicAuth object at 0x72b0ed14ab50&gt;, timeout=2, proxies=None, verify=False,                     debug=0 </msg>
<arg>default</arg>
<arg>url=${url}</arg>
<arg>auth=${auth}</arg>
<arg>timeout=${timeout}</arg>
<arg>max_retries=${max_retries}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="PASS" start="2026-08-23T02:13:37.601148" elapsed="0.000556"/>
</kw>
<arg>timeout=2</arg>
<doc>Create "default" session to ${url} with authentication and connection parameters.
This Keyword is in this Resource only so that user do not need to call RequestsLibrary directly.</doc>
<status status="PASS" start="2026-08-23T02:13:37.600722" elapsed="0.001048"/>
</kw>
<status status="PASS" start="2026-08-23T02:13:37.597297" elapsed="0.004504"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:37.597279" elapsed="0.004547"/>
</if>
<kw name="Initialize_Artifact_Deployment_And_Usage" owner="NexusKeywords">
<kw name="Open_Connection_To_ODL_System" owner="SSHKeywords">
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:13:37.607068" level="INFO">${odl_connection} = 26</msg>
<var>${odl_connection}</var>
<arg>${ip_address}</arg>
<arg>prompt=${ODL_SYSTEM_PROMPT}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-08-23T02:13:37.606641" elapsed="0.000453"/>
</kw>
<kw name="Flexible_Controller_Login" owner="SSHKeywords">
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Flexible_SSH_Login" owner="SSHKeywords">
<kw name="Get Length" owner="BuiltIn">
<msg time="2026-08-23T02:13:37.608720" level="INFO">Length is 0.</msg>
<msg time="2026-08-23T02:13:37.608797" 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-08-23T02:13:37.608434" elapsed="0.000387"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:13:37.608992" elapsed="0.000314"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-08-23T02:13:37.610237" level="INFO">Logging into '10.30.170.114:22' as 'jenkins'.</msg>
<msg time="2026-08-23T02:13:37.943299" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-186-generic x86_64)

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

 System information as of Sun Aug 23 02:12:41 UTC 2026

  System load:  0.02               Processes:             130
  Usage of /:   13.8% of 77.35GB   Users logged in:       1
  Memory usage: 7%                 IPv4 address for ens3: 10.30.170.114
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

41 updates can be applied immediately.
35 of these updates are standard security updates.
To see these additional updates run: apt list --upgradable

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

New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sun Aug 23 02:13:37 2026 from 10.30.171.240
[?2004h[jenkins@releng-19126-54-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-08-23T02:13:37.609882" elapsed="0.333717"/>
</kw>
<msg time="2026-08-23T02:13:37.943694" 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-08-23T02:13:37.609500" elapsed="0.334296"/>
</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-08-23T02:13:37.608001" elapsed="0.335950"/>
</kw>
<msg time="2026-08-23T02:13:37.944008" 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-08-23T02:13:37.607599" elapsed="0.336461"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Controller machine.</doc>
<status status="PASS" start="2026-08-23T02:13:37.607272" elapsed="0.336888"/>
</kw>
<return>
<value>${odl_connection}</value>
<status status="PASS" start="2026-08-23T02:13:37.944225" elapsed="0.000054"/>
</return>
<msg time="2026-08-23T02:13:37.944468" level="INFO">${odl} = 26</msg>
<var>${odl}</var>
<doc>Open a connection to the ODL system at ${ip_address} and return its identifier.</doc>
<status status="PASS" start="2026-08-23T02:13:37.606349" elapsed="0.338146"/>
</kw>
<kw name="Put File" owner="SSHLibrary">
<msg time="2026-08-23T02:13:37.953162" level="INFO">[chan 1] Opened sftp connection (server version 3)</msg>
<msg time="2026-08-23T02:13:37.960631" level="INFO">'/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../../tools/deployment/search.sh' -&gt; '/home/jenkins//search.sh'</msg>
<arg>/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/../../tools/deployment/search.sh</arg>
<doc>Uploads file(s) from the local machine to the remote machine.</doc>
<status status="PASS" start="2026-08-23T02:13:37.944745" elapsed="0.015977"/>
</kw>
<kw name="Close Connection" owner="SSHLibrary">
<doc>Closes the current connection.</doc>
<status status="PASS" start="2026-08-23T02:13:37.960972" elapsed="0.000388"/>
</kw>
<if>
<branch type="IF" condition="not (${tools_system_connect})">
<return>
<status status="NOT RUN" start="2026-08-23T02:13:37.961702" elapsed="0.000020"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:37.961485" elapsed="0.000274"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:37.961444" elapsed="0.000348"/>
</if>
<kw name="Open_Connection_To_Tools_System" owner="SSHKeywords">
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:13:37.969175" level="INFO">${tools_connection} = 27</msg>
<var>${tools_connection}</var>
<arg>${ip_address}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-08-23T02:13:37.968570" elapsed="0.000642"/>
</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-08-23T02:13:37.971712" level="INFO">Length is 0.</msg>
<msg time="2026-08-23T02:13:37.971820" 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-08-23T02:13:37.971317" elapsed="0.000592"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:13:37.972133" elapsed="0.000334"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-08-23T02:13:37.973322" level="INFO">Logging into '10.30.170.120:22' as 'jenkins'.</msg>
<msg time="2026-08-23T02:13:38.277195" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-186-generic x86_64)

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

 System information as of Sun Aug 23 02:12:42 UTC 2026

  System load:  0.0                Processes:             116
  Usage of /:   21.4% of 38.58GB   Users logged in:       1
  Memory usage: 5%                 IPv4 address for ens3: 10.30.170.120
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

42 updates can be applied immediately.
35 of these updates are standard security updates.
To see these additional updates run: apt list --upgradable

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

New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sun Aug 23 02:13:23 2026 from 10.30.171.240
[?2004h[jenkins@releng-19126-54-1-docker-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-08-23T02:13:37.973004" elapsed="0.304335"/>
</kw>
<msg time="2026-08-23T02:13:38.277448" 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-08-23T02:13:37.972633" elapsed="0.304909"/>
</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-08-23T02:13:37.970667" elapsed="0.306997"/>
</kw>
<msg time="2026-08-23T02:13:38.277719" 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-08-23T02:13:37.969995" elapsed="0.307772"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-08-23T02:13:37.969485" elapsed="0.308389"/>
</kw>
<return>
<value>${tools_connection}</value>
<status status="PASS" start="2026-08-23T02:13:38.277932" elapsed="0.000054"/>
</return>
<doc>Open a connection to the tools system at ${ip_address} and return its identifier.</doc>
<status status="PASS" start="2026-08-23T02:13:37.968053" elapsed="0.310075"/>
</kw>
<doc>Places search utility to ODL system, which will be needed for version detection.
By default also initialize a SSH connection to Tools system,
as following Keywords assume a working connection towards target system.</doc>
<status status="PASS" start="2026-08-23T02:13:37.602092" elapsed="0.676101"/>
</kw>
<doc>Setup the environment for the other keywords of this Resource to work properly.</doc>
<status status="PASS" start="2026-08-23T02:13:37.592551" elapsed="0.685700"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:13:38.279040" level="INFO">${device_type_passw} = full-uri-device</msg>
<var>${device_type_passw}</var>
<arg>"""${USE_NETCONF_CONNECTOR}""" == """True"""</arg>
<arg>default</arg>
<arg>${device_type_passw}</arg>
<doc>Sets variable based on the given condition.</doc>
<status status="PASS" start="2026-08-23T02:13:38.278488" elapsed="0.000579"/>
</kw>
<kw name="Run Netopeer Docker Container">
<kw name="Open_Connection_To_Tools_System" owner="SSHKeywords">
<kw name="Open Connection" owner="SSHLibrary">
<msg time="2026-08-23T02:13:38.284984" level="INFO">${tools_connection} = 28</msg>
<var>${tools_connection}</var>
<arg>${ip_address}</arg>
<arg>prompt=${prompt}</arg>
<arg>timeout=${timeout}</arg>
<doc>Opens a new SSH connection to the given ``host`` and ``port``.</doc>
<status status="PASS" start="2026-08-23T02:13:38.284554" elapsed="0.000456"/>
</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-08-23T02:13:38.286682" level="INFO">Length is 0.</msg>
<msg time="2026-08-23T02:13:38.286759" 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-08-23T02:13:38.286395" elapsed="0.000388"/>
</kw>
<kw name="Run Keyword And Return If" owner="BuiltIn">
<arg>${pwd_length} &gt; 0</arg>
<arg>SSHLibrary.Login</arg>
<arg>${user}</arg>
<arg>${password}</arg>
<arg>delay=${delay}</arg>
<doc>Runs the specified keyword and returns from the enclosing user keyword.</doc>
<status status="PASS" start="2026-08-23T02:13:38.286974" elapsed="0.000326"/>
</kw>
<kw name="Run Keyword And Return" owner="BuiltIn">
<kw name="Login With Public Key" owner="SSHLibrary">
<msg time="2026-08-23T02:13:38.288158" level="INFO">Logging into '10.30.170.120:22' as 'jenkins'.</msg>
<msg time="2026-08-23T02:13:38.583766" level="INFO">Read output: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-186-generic x86_64)

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

 System information as of Sun Aug 23 02:12:42 UTC 2026

  System load:  0.0                Processes:             116
  Usage of /:   21.4% of 38.58GB   Users logged in:       1
  Memory usage: 5%                 IPv4 address for ens3: 10.30.170.120
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

42 updates can be applied immediately.
35 of these updates are standard security updates.
To see these additional updates run: apt list --upgradable

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

New release '24.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Sun Aug 23 02:13:38 2026 from 10.30.171.240
[?2004h[jenkins@releng-19126-54-1-docker-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-08-23T02:13:38.287821" elapsed="0.296100"/>
</kw>
<msg time="2026-08-23T02:13:38.584002" 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-08-23T02:13:38.287468" elapsed="0.296611"/>
</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-08-23T02:13:38.285960" elapsed="0.298231"/>
</kw>
<msg time="2026-08-23T02:13:38.584244" 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-08-23T02:13:38.285549" elapsed="0.298742"/>
</kw>
<doc>Call Flexible SSH Login, but with default values suitable for Mininet machine.</doc>
<status status="PASS" start="2026-08-23T02:13:38.285205" elapsed="0.299168"/>
</kw>
<return>
<value>${tools_connection}</value>
<status status="PASS" start="2026-08-23T02:13:38.584425" elapsed="0.000043"/>
</return>
<msg time="2026-08-23T02:13:38.584639" level="INFO">${netopeer_conn_id} = 28</msg>
<var>${netopeer_conn_id}</var>
<doc>Open a connection to the tools system at ${ip_address} and return its identifier.</doc>
<status status="PASS" start="2026-08-23T02:13:38.284213" elapsed="0.300453"/>
</kw>
<kw name="Put File" owner="SSHLibrary">
<msg time="2026-08-23T02:13:38.592290" level="INFO">[chan 1] Opened sftp connection (server version 3)</msg>
<msg time="2026-08-23T02:13:38.600679" level="INFO">'/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/KeyAuth/../../../variables/netconf/KeyAuth/sb-rsa-key.pub' -&gt; '/home/jenkins//sb-rsa-key.pub'</msg>
<arg>/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/KeyAuth/../../../variables/netconf/KeyAuth/sb-rsa-key.pub</arg>
<arg>.</arg>
<doc>Uploads file(s) from the local machine to the remote machine.</doc>
<status status="PASS" start="2026-08-23T02:13:38.584892" elapsed="0.015851"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:38.601358" level="INFO">${netopeer_conn_id} = 28</msg>
<arg>${netopeer_conn_id}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="PASS" start="2026-08-23T02:13:38.600949" elapsed="0.000453"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-23T02:13:38.601935" level="INFO">Executing command 'docker run -dt -p 830:830 -v /home/jenkins/sb-rsa-key.pub:/home/netconf/.ssh/authorized_keys sysrepo/sysrepo-netopeer2:latest netopeer2-server -d -v 2'.</msg>
<msg time="2026-08-23T02:13:53.170568" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-23T02:13:53.171025" level="INFO">${stdout} = 7db93829d1b7f0fe3f7fbb8ba7e7be73e2b405fa14f72c9d546f306c29555d7e</msg>
<msg time="2026-08-23T02:13:53.171134" level="INFO">${stderr} = Unable to find image 'sysrepo/sysrepo-netopeer2:latest' locally
latest: Pulling from sysrepo/sysrepo-netopeer2
8eba48fcdc7f: Pulling fs layer
95d253b40401: Pulling fs layer
9be2789ffa20: Pulling fs la...</msg>
<msg time="2026-08-23T02:13:53.171228" level="INFO">${rc} = 0</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>docker run -dt -p ${netopeer_port}:830 -v /home/${TOOLS_SYSTEM_USER}/sb-rsa-key.pub:/home/${netopeer_username}/.ssh/authorized_keys ${netopeer_image} netopeer2-server -d -v 2</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-08-23T02:13:38.601583" elapsed="14.569696"/>
</kw>
<kw name="Execute Command" owner="SSHLibrary">
<msg time="2026-08-23T02:13:53.172292" level="INFO">Executing command 'docker ps -a'.</msg>
<msg time="2026-08-23T02:13:53.250335" level="INFO">Command exited with return code 0.</msg>
<msg time="2026-08-23T02:13:53.250617" level="INFO">${stdout} = CONTAINER ID   IMAGE                              COMMAND                  CREATED         STATUS                  PORTS                                     NAMES
7db93829d1b7   sysrepo/sysrepo-netope...</msg>
<msg time="2026-08-23T02:13:53.250721" level="INFO">${stderr} = </msg>
<msg time="2026-08-23T02:13:53.250810" level="INFO">${rc} = 0</msg>
<var>${stdout}</var>
<var>${stderr}</var>
<var>${rc}</var>
<arg>docker ps -a</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-08-23T02:13:53.171793" elapsed="0.079109"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:53.252206" level="INFO">CONTAINER ID   IMAGE                              COMMAND                  CREATED         STATUS                  PORTS                                     NAMES
7db93829d1b7   sysrepo/sysrepo-netopeer2:latest   "netopeer2-server -d…"   6 seconds ago   Up Less than a second   0.0.0.0:830-&gt;830/tcp, [::]:830-&gt;830/tcp   epic_dhawan</msg>
<arg>${stdout}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:53.251501" elapsed="0.000822"/>
</kw>
<doc>Start a new docker container for netopeer server.</doc>
<status status="PASS" start="2026-08-23T02:13:38.279356" elapsed="14.973102"/>
</kw>
<kw name="Add Netconf Key">
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:13:53.254351" level="INFO">${mapping} = {'DEVICE_KEY': 'device-key', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping}</var>
<arg>DEVICE_KEY=${netopeer_key}</arg>
<arg>RESTCONF_ROOT=${RESTCONF_ROOT}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="PASS" start="2026-08-23T02:13:53.253363" elapsed="0.001048"/>
</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-08-23T02:13:53.292669" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/KeyAuth/../../../variables/netconf/KeyAuth.vanadium/location.uri</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:53.292262" elapsed="0.000440"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T02:13:53.293552" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/KeyAuth.vanadium/location.uri' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-23T02:13:53.293264" elapsed="0.000376">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/KeyAuth.vanadium/location.uri' does not exist.</status>
</kw>
<msg time="2026-08-23T02:13:53.293735" 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-08-23T02:13:53.292918" elapsed="0.000842"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:13:53.294333" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/KeyAuth/../../../variables/netconf/KeyAuth/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-08-23T02:13:53.293944" elapsed="0.000416"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:13:53.294672" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/KeyAuth/location.uri"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/KeyAuth/location.uri&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:13:53.294856" level="INFO">${template} = $RESTCONF_ROOT/operations/netconf-keystore:add-keystore-entry
</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:13:53.294521" elapsed="0.000362"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:53.295298" level="INFO">$RESTCONF_ROOT/operations/netconf-keystore:add-keystore-entry
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:53.295053" 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-08-23T02:13:53.296411" level="INFO">mapping: {'DEVICE_KEY': 'device-key', 'RESTCONF_ROOT': '/rests'}</msg>
<arg>mapping: ${mapping}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:53.296096" elapsed="0.000361"/>
</kw>
<kw name="Create Dictionary" owner="BuiltIn">
<msg time="2026-08-23T02:13:53.296981" 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-08-23T02:13:53.296659" elapsed="0.000348"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:13:53.297928" level="INFO">${value} = device-key</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:13:53.297386" elapsed="0.000568"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:13:53.299158" level="INFO">${encoded} = device-key</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-08-23T02:13:53.298503" elapsed="0.000697"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:13:53.299371" elapsed="0.000039"/>
</return>
<msg time="2026-08-23T02:13:53.299643" level="INFO">${encoded_value} = device-key</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-08-23T02:13:53.298140" elapsed="0.001529"/>
</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-08-23T02:13:53.299819" elapsed="0.000437"/>
</kw>
<var name="${key}">DEVICE_KEY</var>
<var name="${value}">device-key</var>
<status status="PASS" start="2026-08-23T02:13:53.297248" elapsed="0.003051"/>
</iter>
<iter>
<kw name="Convert To String" owner="BuiltIn">
<msg time="2026-08-23T02:13:53.301095" level="INFO">${value} = /rests</msg>
<var>${value}</var>
<arg>${value}</arg>
<doc>Converts the given item to a Unicode string.</doc>
<status status="PASS" start="2026-08-23T02:13:53.300558" elapsed="0.000563"/>
</kw>
<kw name="Percent_Encode_String" owner="TemplatedRequests">
<kw name="Replace String Using Regexp" owner="String">
<msg time="2026-08-23T02:13:53.302188" level="INFO">${encoded} = /rests</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-08-23T02:13:53.301659" elapsed="0.000570"/>
</kw>
<return>
<value>${encoded}</value>
<status status="PASS" start="2026-08-23T02:13:53.302391" elapsed="0.000031"/>
</return>
<msg time="2026-08-23T02:13:53.302647" level="INFO">${encoded_value} = /rests</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-08-23T02:13:53.301301" elapsed="0.001371"/>
</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-08-23T02:13:53.302820" elapsed="0.000496"/>
</kw>
<var name="${key}">RESTCONF_ROOT</var>
<var name="${value}">/rests</var>
<status status="PASS" start="2026-08-23T02:13:53.300415" elapsed="0.002943"/>
</iter>
<var>${key}</var>
<var>${value}</var>
<value>&amp;{mapping}</value>
<status status="PASS" start="2026-08-23T02:13:53.297064" elapsed="0.006330"/>
</for>
<return>
<value>${encoded_mapping}</value>
<status status="PASS" start="2026-08-23T02:13:53.303438" elapsed="0.000027"/>
</return>
<msg time="2026-08-23T02:13:53.303595" level="INFO">${mapping_to_use} = {'DEVICE_KEY': 'device-key', 'RESTCONF_ROOT': '/rests'}</msg>
<var>${mapping_to_use}</var>
<arg>${mapping}</arg>
<status status="PASS" start="2026-08-23T02:13:53.295723" elapsed="0.007897"/>
</kw>
<status status="PASS" start="2026-08-23T02:13:53.295421" elapsed="0.008231"/>
</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-08-23T02:13:53.303822" elapsed="0.000057"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:53.303679" elapsed="0.000236"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:53.295395" elapsed="0.008540"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:13:53.304719" level="INFO">${final_text} = /rests/operations/netconf-keystore:add-keystore-entry</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-08-23T02:13:53.304077" elapsed="0.000674"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T02:13:53.304808" elapsed="0.000058"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/KeyAuth/../../../variables/netconf/KeyAuth.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/KeyAuth/../../../variables/netconf/KeyAuth.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/KeyAuth/../../../variables/netconf/KeyAuth/${file_name}.</doc>
<status status="PASS" start="2026-08-23T02:13:53.291679" elapsed="0.013292"/>
</kw>
<msg time="2026-08-23T02:13:53.305025" 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-08-23T02:13:53.278825" elapsed="0.026248"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/KeyAuth/../../../variables/netconf/KeyAuth.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/KeyAuth/../../../variables/netconf/KeyAuth.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/KeyAuth/../../../variables/netconf/KeyAuth/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:53.317574" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/KeyAuth/../../../variables/netconf/KeyAuth.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/KeyAuth/../../../variables/netconf/KeyAuth.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/KeyAuth/../../../variables/netconf/KeyAuth/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:53.329991" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/KeyAuth/../../../variables/netconf/KeyAuth.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/KeyAuth/../../../variables/netconf/KeyAuth.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/KeyAuth/../../../variables/netconf/KeyAuth/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:53.342420" 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-08-23T02:13:53.342614" 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-08-23T02:13:53.342784" 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-08-23T02:13:53.343166" elapsed="0.000020"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:53.343023" elapsed="0.000200"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:13:53.343008" 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-08-23T02:13:53.343383" 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-08-23T02:13:53.343544" 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-08-23T02:13:53.343703" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T02:13:53.342979" elapsed="0.000776"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T02:13:53.342876" 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-08-23T02:13:53.343976" elapsed="0.000021"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:53.344054" elapsed="0.000016"/>
</return>
<msg time="2026-08-23T02:13:53.344165" level="INFO">${uri} = /rests/operations/netconf-keystore:add-keystore-entry</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-08-23T02:13:53.274577" elapsed="0.069614"/>
</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-08-23T02:13:53.370365" level="INFO">${file_path_stream} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/KeyAuth/../../../variables/netconf/KeyAuth.vanadium/post_data.xml</msg>
<var>${file_path_stream}</var>
<arg>${folder}.${ODL_STREAM}${/}${file_name}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-08-23T02:13:53.369989" elapsed="0.000404"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<msg time="2026-08-23T02:13:53.371106" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/KeyAuth.vanadium/post_data.xml' does not exist.</msg>
<arg>${file_path_stream}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="FAIL" start="2026-08-23T02:13:53.370895" elapsed="0.000276">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/KeyAuth.vanadium/post_data.xml' does not exist.</status>
</kw>
<msg time="2026-08-23T02:13:53.371263" 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-08-23T02:13:53.370551" elapsed="0.000737"/>
</kw>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:13:53.371828" level="INFO">${file_path} = /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/KeyAuth/../../../variables/netconf/KeyAuth/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-08-23T02:13:53.371446" elapsed="0.000424"/>
</kw>
<kw name="Get File" owner="OperatingSystem">
<msg time="2026-08-23T02:13:53.372161" level="INFO" html="true">Getting file '&lt;a href="file:///w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/KeyAuth/post_data.xml"&gt;/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/KeyAuth/post_data.xml&lt;/a&gt;'.</msg>
<msg time="2026-08-23T02:13:53.372315" level="INFO">${template} = &lt;input xmlns="urn:opendaylight:netconf:keystore"&gt;
    &lt;key-credential&gt;
        &lt;key-id&gt;$DEVICE_KEY&lt;/key-id&gt;
        &lt;private-key&gt;-----BEGIN RSA PRIVATE KEY-----\nProc-Type: 4,ENCRYPTED\nDEK-Info: AES-...</msg>
<var>${template}</var>
<arg>${file_path}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-08-23T02:13:53.372027" elapsed="0.000316"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:53.372773" level="INFO">&lt;input xmlns="urn:opendaylight:netconf:keystore"&gt;
    &lt;key-credential&gt;
        &lt;key-id&gt;$DEVICE_KEY&lt;/key-id&gt;
        &lt;private-key&gt;-----BEGIN RSA PRIVATE KEY-----\nProc-Type: 4,ENCRYPTED\nDEK-Info: AES-128-CBC,EA61FA90F5252AA4DB801B1A95907E08\n\ntKdknMpuxmKIwoD6KOlsChbRszafdHN7+Vzzn3gErAMnktW9NSeCTpWeHbgdIYsK8Wh2FH978JxdS9hCqzrLQ0e73zr1pMRYPLaVg4zJRLJhemk9LXLQ2xFgtE86kvnlSADbu9JooDyDTYRdRC3+ekU2t1J6mUord7FM8T3fFpQ9XBxL2DPrctqlQgLtxZ9e6JPN5H7ftxo4x8RxLtXLyvTiO1inKPkuqok+Q5QhKedEQZIUqmeCjhnbfgRP/cxFzP97luGP4qSsbieQVt4g0DjNteLu128a0VYHK1wX/UUvLkpWNaX2XZMSZzCiY5bWFFMIaq0nOdQvn4UImYMcK/hxlj2Qk0LR5GrY4fjuhsFHNnICx14FNY1GSoAuYS16/P9wNbcT7DG/10JxjjQz25RIjhLkqoFPenj6/HPPVih7Brm5Sfjhg+mSGF2lq+ccTKsq/XlaZ0MwtuqpuhQzvwNDjINBXQlnjLQVtYDImmz8qPOwRFvvuap6oAhErTeTdLNHUIO1eMFgRCUObN/B0VhgAWKqLCAj4fsbKQNQI55qD++YGhH0h+JmIsA8QbTapq+2108amdt7Cy9EtFJCXDka6VzgPEIZgoEnUkiYu9LXp2twPbZ+B4+Ls6ukbemSEgOMcWmFLCXs7dY5nVWiie8x7xHPiExKNqAK/HoY7K5WQaaANaA8XYq8xcg2zOljpXV3n0/Y5J0svLnf4nmdSEwso1UnanzV0fagMaGLxYz8jGt2Xpbzv7uUw7w2qL/DFNvVSUXj3yu/FulU/TuFM3KnNDHgHAidA/SFzvltvX+2rs+ZUYKbpsooR3vlWPDMXPnQm9mZ5MKei4KRom4DbEFEyVALua7QktRTkK2/TpD0euX6zV7PwAOHEAiJbCcr5EWkaAsZGAns9mh0iNEwz6tTuZeaM6ipEAUlZdAbtx/Cd3k+Il6SuehDWjyGHIguVCGfW6VrwCUepna/cNpt8PHLXTC0TQgonyyBi29N0Ha/ReC1MPOe0Xq/G62gojbU3IUh1NkzkAMw6ShDuIUdm0fjes8Lok7FnLBIhNHHCPHnr9cKDyKdSolgnxdDuEUdLJyeq9TQLPSCZAZKAuihHDLKyHPBh/8N/nAOLnEJvdKA1ledQt378GRg/GTALWwg7LTAuz4iwwbEWnfwZv+s/R2RQHsR38wzknMzsfBHBxiwe0Hg2a9wgBJKhQyXJYBIHJVqElrMEHWyg1Wwfvf34EYwMkDLg6Os54h2zj7bPKg+c5AUrir0ptuhPFPpqY9yvTBYrOPHH9/Y7kc4NRVfcWGeiThrHcAEpNFStWzvDY4c4GtIIdj5l2mQKG10r+pOoiCSzGlP1WPrqHA4jDhpOPkrqTsXwhQQH3k1hpRoiFoKMXw2bR3WU+0SC2SvZXlNNozdxjzvIDAsMHXqiPdq94XXgZWROulm1XI7dLE3oecBRorvs1M1EOQMLrNCCcckpzx6KP+P5tNjwCfj5CP+vLo+PcBPd8plbLv9MPtRtOYysR5g1L8DRFpkykV8DfQdl1xPWE37KRMCj66/OYQCU+WhlDqp1YZHrZ5FahmIm+dX9p7npvyDDd//9L+EfA7S\n-----END RSA PRIVATE KEY-----&lt;/private-key&gt;
        &lt;passphrase&gt;topsecret&lt;/passphrase&gt;
    &lt;/key-credential&gt;
&lt;/input&gt;
</msg>
<arg>${template}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:53.372521" elapsed="0.000332"/>
</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-08-23T02:13:53.373211" elapsed="0.000025"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:53.372922" elapsed="0.000348"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:53.373779" level="INFO">${mapping_to_use} = {'DEVICE_KEY': 'device-key', 'RESTCONF_ROOT': '/rests'}</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-08-23T02:13:53.373437" elapsed="0.000369"/>
</kw>
<status status="PASS" start="2026-08-23T02:13:53.373294" elapsed="0.000561"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:53.372903" elapsed="0.000975"/>
</if>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-08-23T02:13:53.374664" level="INFO">${final_text} = &lt;input xmlns="urn:opendaylight:netconf:keystore"&gt;
    &lt;key-credential&gt;
        &lt;key-id&gt;device-key&lt;/key-id&gt;
        &lt;private-key&gt;-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128...</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-08-23T02:13:53.374021" elapsed="0.000710"/>
</kw>
<return>
<value>${final_text}</value>
<status status="PASS" start="2026-08-23T02:13:53.374783" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/KeyAuth/../../../variables/netconf/KeyAuth.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/KeyAuth/../../../variables/netconf/KeyAuth.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/KeyAuth/../../../variables/netconf/KeyAuth/${file_name}.</doc>
<status status="PASS" start="2026-08-23T02:13:53.369410" elapsed="0.005518"/>
</kw>
<msg time="2026-08-23T02:13:53.374990" 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-08-23T02:13:53.355082" elapsed="0.019956"/>
</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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/KeyAuth/../../../variables/netconf/KeyAuth.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/KeyAuth/../../../variables/netconf/KeyAuth.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/KeyAuth/../../../variables/netconf/KeyAuth/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:53.387645" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/KeyAuth/../../../variables/netconf/KeyAuth.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/KeyAuth/../../../variables/netconf/KeyAuth.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/KeyAuth/../../../variables/netconf/KeyAuth/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:53.400240" 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/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/KeyAuth/../../../variables/netconf/KeyAuth.vanadium/${file_name} exists. If yes read and Log contents of file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/KeyAuth/../../../variables/netconf/KeyAuth.vanadium/${file_name},
remove endline, perform safe substitution, return result.
If no do it with the default /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/KeyAuth/../../../variables/netconf/KeyAuth/${file_name}.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:53.412889" 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-08-23T02:13:53.413085" 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-08-23T02:13:53.413254" 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-08-23T02:13:53.413610" elapsed="0.000021"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:53.413472" elapsed="0.000199"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:13:53.413457" 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-08-23T02:13:53.413831" elapsed="0.000041"/>
</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-08-23T02:13:53.414019" 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-08-23T02:13:53.414178" elapsed="0.000020"/>
</kw>
<var name="${iteration}"/>
<status status="NOT RUN" start="2026-08-23T02:13:53.413429" elapsed="0.000802"/>
</iter>
<var>${iteration}</var>
<value>${iter_start}</value>
<value>${iterations}+${iter_start}</value>
<status status="NOT RUN" start="2026-08-23T02:13:53.413330" 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-08-23T02:13:53.414394" elapsed="0.000020"/>
</kw>
<return>
<value>${final_text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:53.414468" elapsed="0.000015"/>
</return>
<msg time="2026-08-23T02:13:53.414610" level="INFO">${data} = &lt;input xmlns="urn:opendaylight:netconf:keystore"&gt;
    &lt;key-credential&gt;
        &lt;key-id&gt;device-key&lt;/key-id&gt;
        &lt;private-key&gt;-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128...</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-08-23T02:13:53.354265" elapsed="0.060374"/>
</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-08-23T02:13:53.415890" level="FAIL">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/KeyAuth/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-08-23T02:13:53.415631" elapsed="0.000324">File '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/variables/netconf/KeyAuth/jmespath.expr' does not exist.</status>
</kw>
<msg time="2026-08-23T02:13:53.416049" 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-08-23T02:13:53.415294" elapsed="0.000779"/>
</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-08-23T02:13:53.416396" elapsed="0.000022"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:53.416144" elapsed="0.000312"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<msg time="2026-08-23T02:13:53.416955" 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-08-23T02:13:53.416645" elapsed="0.000336"/>
</kw>
<status status="PASS" start="2026-08-23T02:13:53.416480" elapsed="0.000537"/>
</branch>
<status status="PASS" start="2026-08-23T02:13:53.416126" elapsed="0.000913"/>
</if>
<kw name="Set Variable If" owner="BuiltIn">
<msg time="2026-08-23T02:13:53.419558" 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-08-23T02:13:53.417186" elapsed="0.002399"/>
</kw>
<return>
<value>${expression}</value>
<status status="PASS" start="2026-08-23T02:13:53.419637" elapsed="0.000028"/>
</return>
<msg time="2026-08-23T02:13:53.419791" level="INFO">${jmes_expression} = </msg>
<var>${jmes_expression}</var>
<arg>${folder}</arg>
<doc>Reads JMES path from file /w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/suites/netconf/KeyAuth/../../../variables/netconf/KeyAuth/jmespath.expr if the file exists and
returns the JMES path. Empty string is returned otherwise.</doc>
<status status="PASS" start="2026-08-23T02:13:53.415020" elapsed="0.004796"/>
</kw>
<kw name="Post_To_Uri" owner="TemplatedRequests">
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:53.421393" level="INFO">/rests/operations/netconf-keystore:add-keystore-entry</msg>
<arg>${uri}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:53.421144" elapsed="0.000294"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:53.421826" level="INFO">&lt;input xmlns="urn:opendaylight:netconf:keystore"&gt;
    &lt;key-credential&gt;
        &lt;key-id&gt;device-key&lt;/key-id&gt;
        &lt;private-key&gt;-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,EA61FA90F5252AA4DB801B1A95907E08

tKdknMpuxmKIwoD6KOlsChbRszafdHN7+Vzzn3gErAMnktW9NSeCTpWeHbgdIYsK8Wh2FH978JxdS9hCqzrLQ0e73zr1pMRYPLaVg4zJRLJhemk9LXLQ2xFgtE86kvnlSADbu9JooDyDTYRdRC3+ekU2t1J6mUord7FM8T3fFpQ9XBxL2DPrctqlQgLtxZ9e6JPN5H7ftxo4x8RxLtXLyvTiO1inKPkuqok+Q5QhKedEQZIUqmeCjhnbfgRP/cxFzP97luGP4qSsbieQVt4g0DjNteLu128a0VYHK1wX/UUvLkpWNaX2XZMSZzCiY5bWFFMIaq0nOdQvn4UImYMcK/hxlj2Qk0LR5GrY4fjuhsFHNnICx14FNY1GSoAuYS16/P9wNbcT7DG/10JxjjQz25RIjhLkqoFPenj6/HPPVih7Brm5Sfjhg+mSGF2lq+ccTKsq/XlaZ0MwtuqpuhQzvwNDjINBXQlnjLQVtYDImmz8qPOwRFvvuap6oAhErTeTdLNHUIO1eMFgRCUObN/B0VhgAWKqLCAj4fsbKQNQI55qD++YGhH0h+JmIsA8QbTapq+2108amdt7Cy9EtFJCXDka6VzgPEIZgoEnUkiYu9LXp2twPbZ+B4+Ls6ukbemSEgOMcWmFLCXs7dY5nVWiie8x7xHPiExKNqAK/HoY7K5WQaaANaA8XYq8xcg2zOljpXV3n0/Y5J0svLnf4nmdSEwso1UnanzV0fagMaGLxYz8jGt2Xpbzv7uUw7w2qL/DFNvVSUXj3yu/FulU/TuFM3KnNDHgHAidA/SFzvltvX+2rs+ZUYKbpsooR3vlWPDMXPnQm9mZ5MKei4KRom4DbEFEyVALua7QktRTkK2/TpD0euX6zV7PwAOHEAiJbCcr5EWkaAsZGAns9mh0iNEwz6tTuZeaM6ipEAUlZdAbtx/Cd3k+Il6SuehDWjyGHIguVCGfW6VrwCUepna/cNpt8PHLXTC0TQgonyyBi29N0Ha/ReC1MPOe0Xq/G62gojbU3IUh1NkzkAMw6ShDuIUdm0fjes8Lok7FnLBIhNHHCPHnr9cKDyKdSolgnxdDuEUdLJyeq9TQLPSCZAZKAuihHDLKyHPBh/8N/nAOLnEJvdKA1ledQt378GRg/GTALWwg7LTAuz4iwwbEWnfwZv+s/R2RQHsR38wzknMzsfBHBxiwe0Hg2a9wgBJKhQyXJYBIHJVqElrMEHWyg1Wwfvf34EYwMkDLg6Os54h2zj7bPKg+c5AUrir0ptuhPFPpqY9yvTBYrOPHH9/Y7kc4NRVfcWGeiThrHcAEpNFStWzvDY4c4GtIIdj5l2mQKG10r+pOoiCSzGlP1WPrqHA4jDhpOPkrqTsXwhQQH3k1hpRoiFoKMXw2bR3WU+0SC2SvZXlNNozdxjzvIDAsMHXqiPdq94XXgZWROulm1XI7dLE3oecBRorvs1M1EOQMLrNCCcckpzx6KP+P5tNjwCfj5CP+vLo+PcBPd8plbLv9MPtRtOYysR5g1L8DRFpkykV8DfQdl1xPWE37KRMCj66/OYQCU+WhlDqp1YZHrZ5FahmIm+dX9p7npvyDDd//9L+EfA7S
-----END RSA PRIVATE KEY-----&lt;/private-key&gt;
        &lt;passphrase&gt;topsecret&lt;/passphrase&gt;
    &lt;/key-credential&gt;
&lt;/input&gt;</msg>
<arg>${data}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:53.421588" elapsed="0.000316"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:53.422295" 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-08-23T02:13:53.422053" elapsed="0.000285"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:53.422721" level="INFO">{'Accept': 'application/xml'}</msg>
<arg>${accept}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-08-23T02:13:53.422484" elapsed="0.000281"/>
</kw>
<kw name="Join_Two_Headers" owner="TemplatedRequests">
<kw name="Copy Dictionary" owner="Collections">
<msg time="2026-08-23T02:13:53.423526" 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-08-23T02:13:53.423334" elapsed="0.000218"/>
</kw>
<kw name="Get Dictionary Items" owner="Collections">
<msg time="2026-08-23T02:13:53.423890" 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-08-23T02:13:53.423700" 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-08-23T02:13:53.424060" elapsed="0.000197"/>
</kw>
<kw name="Log" owner="BuiltIn">
<msg time="2026-08-23T02:13:53.424735" 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-08-23T02:13:53.424449" elapsed="0.000330"/>
</kw>
<return>
<value>${accumulator}</value>
<status status="PASS" start="2026-08-23T02:13:53.424822" elapsed="0.000045"/>
</return>
<msg time="2026-08-23T02:13:53.424998" 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-08-23T02:13:53.422980" 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-08-23T02:13:53.434194" level="INFO">POST Request : url=http://10.30.170.114:8181/rests/operations/netconf-keystore:add-keystore-entry 
 path_url=/rests/operations/netconf-keystore:add-keystore-entry 
 headers={'User-Agent': 'python-requests/2.34.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/xml', 'Connection': 'keep-alive', 'Content-Type': 'application/xml', 'Content-Length': '1957', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 
 body=&lt;input xmlns="urn:opendaylight:netconf:keystore"&gt;
    &lt;key-credential&gt;
        &lt;key-id&gt;device-key&lt;/key-id&gt;
        &lt;private-key&gt;-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,EA61FA90F5252AA4DB801B1A95907E08

tKdknMpuxmKIwoD6KOlsChbRszafdHN7+Vzzn3gErAMnktW9NSeCTpWeHbgdIYsK8Wh2FH978JxdS9hCqzrLQ0e73zr1pMRYPLaVg4zJRLJhemk9LXLQ2xFgtE86kvnlSADbu9JooDyDTYRdRC3+ekU2t1J6mUord7FM8T3fFpQ9XBxL2DPrctqlQgLtxZ9e6JPN5H7ftxo4x8RxLtXLyvTiO1inKPkuqok+Q5QhKedEQZIUqmeCjhnbfgRP/cxFzP97luGP4qSsbieQVt4g0DjNteLu128a0VYHK1wX/UUvLkpWNaX2XZMSZzCiY5bWFFMIaq0nOdQvn4UImYMcK/hxlj2Qk0LR5GrY4fjuhsFHNnICx14FNY1GSoAuYS16/P9wNbcT7DG/10JxjjQz25RIjhLkqoFPenj6/HPPVih7Brm5Sfjhg+mSGF2lq+ccTKsq/XlaZ0MwtuqpuhQzvwNDjINBXQlnjLQVtYDImmz8qPOwRFvvuap6oAhErTeTdLNHUIO1eMFgRCUObN/B0VhgAWKqLCAj4fsbKQNQI55qD++YGhH0h+JmIsA8QbTapq+2108amdt7Cy9EtFJCXDka6VzgPEIZgoEnUkiYu9LXp2twPbZ+B4+Ls6ukbemSEgOMcWmFLCXs7dY5nVWiie8x7xHPiExKNqAK/HoY7K5WQaaANaA8XYq8xcg2zOljpXV3n0/Y5J0svLnf4nmdSEwso1UnanzV0fagMaGLxYz8jGt2Xpbzv7uUw7w2qL/DFNvVSUXj3yu/FulU/TuFM3KnNDHgHAidA/SFzvltvX+2rs+ZUYKbpsooR3vlWPDMXPnQm9mZ5MKei4KRom4DbEFEyVALua7QktRTkK2/TpD0euX6zV7PwAOHEAiJbCcr5EWkaAsZGAns9mh0iNEwz6tTuZeaM6ipEAUlZdAbtx/Cd3k+Il6SuehDWjyGHIguVCGfW6VrwCUepna/cNpt8PHLXTC0TQgonyyBi29N0Ha/ReC1MPOe0Xq/G62gojbU3IUh1NkzkAMw6ShDuIUdm0fjes8Lok7FnLBIhNHHCPHnr9cKDyKdSolgnxdDuEUdLJyeq9TQLPSCZAZKAuihHDLKyHPBh/8N/nAOLnEJvdKA1ledQt378GRg/GTALWwg7LTAuz4iwwbEWnfwZv+s/R2RQHsR38wzknMzsfBHBxiwe0Hg2a9wgBJKhQyXJYBIHJVqElrMEHWyg1Wwfvf34EYwMkDLg6Os54h2zj7bPKg+c5AUrir0ptuhPFPpqY9yvTBYrOPHH9/Y7kc4NRVfcWGeiThrHcAEpNFStWzvDY4c4GtIIdj5l2mQKG10r+pOoiCSzGlP1WPrqHA4jDhpOPkrqTsXwhQQH3k1hpRoiFoKMXw2bR3WU+0SC2SvZXlNNozdxjzvIDAsMHXqiPdq94XXgZWROulm1XI7dLE3oecBRorvs1M1EOQMLrNCCcckpzx6KP+P5tNjwCfj5CP+vLo+PcBPd8plbLv9MPtRtOYysR5g1L8DRFpkykV8DfQdl1xPWE37KRMCj66/OYQCU+WhlDqp1YZHrZ5FahmIm+dX9p7npvyDDd//9L+EfA7S
-----END RSA PRIVATE KEY-----&lt;/private-key&gt;
        &lt;passphrase&gt;topsecret&lt;/passphrase&gt;
    &lt;/key-credential&gt;
&lt;/input&gt; 
 </msg>
<msg time="2026-08-23T02:13:53.434262" level="INFO">POST Response : url=http://10.30.170.114:8181/rests/operations/netconf-keystore:add-keystore-entry 
 status=404, reason=Not Found 
 headers={'Cache-Control': 'must-revalidate,no-cache,no-store', 'Content-Length': '0'} 
 body=None 
 </msg>
<msg time="2026-08-23T02:13:53.434458" level="FAIL">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-keystore:add-keystore-entry</msg>
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="FAIL" start="2026-08-23T02:13:53.427187" elapsed="0.007801">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-keystore:add-keystore-entry</status>
</kw>
<status status="FAIL" start="2026-08-23T02:13:53.425093" elapsed="0.010014">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-keystore:add-keystore-entry</status>
</branch>
<branch type="ELSE">
<kw name="POST On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>${session}</arg>
<arg>${uri}</arg>
<arg>data=${data}</arg>
<arg>headers=${headers}</arg>
<arg>timeout=${http_timeout}</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:53.435426" elapsed="0.000031"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:53.435153" elapsed="0.000370"/>
</branch>
<status status="FAIL" start="2026-08-23T02:13:53.425075" elapsed="0.010480">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-keystore:add-keystore-entry</status>
</if>
<kw name="Check_Status_Code" owner="TemplatedRequests">
<arg>${response}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<doc>Log response text, check status_code is one of allowed ones. In cases where this keyword is
called in a WUKS it could end up logging tons of data and it may be desired to skip the logging by passing
log_response=False, but by default it remains True.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:53.436090" elapsed="0.000035"/>
</kw>
<if>
<branch type="IF" condition="not ${normalize_json}">
<return>
<value>${response.text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:53.436277" elapsed="0.000018"/>
</return>
<status status="NOT RUN" start="2026-08-23T02:13:53.436226" elapsed="0.000129"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:13:53.436202" elapsed="0.000193"/>
</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-08-23T02:13:53.436602" elapsed="0.000037"/>
</kw>
<return>
<value>${text_normalized}</value>
<status status="NOT RUN" start="2026-08-23T02:13:53.436718" elapsed="0.000025"/>
</return>
<var>${response_text}</var>
<arg>uri=${uri}</arg>
<arg>data=${data}</arg>
<arg>content_type=${content_type}</arg>
<arg>accept=${accept}</arg>
<arg>session=${session}</arg>
<arg>jmes_path=${jmes_expression}</arg>
<arg>normalize_json=${normalize_json}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<doc>POST data to given URI, check status code and return response text.
${content_type} and ${accept} are mandatory Python objects with headers to use.
If ${normalize_json}, normalize text before returning.</doc>
<status status="FAIL" start="2026-08-23T02:13:53.420152" elapsed="0.016768">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-keystore:add-keystore-entry</status>
</kw>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:53.437032" elapsed="0.000022"/>
</return>
<var>${response_text}</var>
<arg>folder=${folder}</arg>
<arg>base_name=data</arg>
<arg>extension=xml</arg>
<arg>accept=${ACCEPT_XML}</arg>
<arg>content_type=${HEADERS_XML}</arg>
<arg>mapping=${mapping}</arg>
<arg>session=${session}</arg>
<arg>normalize_json=False</arg>
<arg>endline=${\n}</arg>
<arg>iterations=${iterations}</arg>
<arg>iter_start=${iter_start}</arg>
<arg>additional_allowed_status_codes=${additional_allowed_status_codes}</arg>
<arg>explicit_status_codes=${explicit_status_codes}</arg>
<arg>http_timeout=${http_timeout}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve URI and data from folder, call Post_To_Uri, return response text.</doc>
<status status="FAIL" start="2026-08-23T02:13:53.263069" elapsed="0.174095">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-keystore:add-keystore-entry</status>
</kw>
<if>
<branch type="IF" condition="${verify}">
<kw name="Verify_Response_As_Xml_Templated" owner="TemplatedRequests">
<arg>response=${response_text}</arg>
<arg>folder=${folder}</arg>
<arg>base_name=response</arg>
<arg>mapping=${mapping}</arg>
<arg>iter_j_offset=${iter_j_offset}</arg>
<doc>Resolve expected XML data, should be equal to provided ${response}.
Endline set to empty, as this Resource does not support indented XML comparison.</doc>
<status status="NOT RUN" start="2026-08-23T02:13:53.437559" elapsed="0.000033"/>
</kw>
<status status="NOT RUN" start="2026-08-23T02:13:53.437317" elapsed="0.000335"/>
</branch>
<status status="NOT RUN" start="2026-08-23T02:13:53.437294" elapsed="0.000431"/>
</if>
<return>
<value>${response_text}</value>
<status status="NOT RUN" start="2026-08-23T02:13:53.437775" elapsed="0.000020"/>
</return>
<arg>folder=${directory_with_keyauth_template}</arg>
<arg>mapping=${mapping}</arg>
<doc>Add arguments sensible for XML data, return Post_Templated response text.
Optionally, verification against response.xml (no iteration) is called.</doc>
<status status="FAIL" start="2026-08-23T02:13:53.255022" elapsed="0.182910">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-keystore:add-keystore-entry</status>
</kw>
<doc>Add Netconf Southbound key containing details about device private key and passphrase</doc>
<status status="FAIL" start="2026-08-23T02:13:53.252806" elapsed="0.185253">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-keystore:add-keystore-entry</status>
</kw>
<doc>Get the suite ready for callhome test cases.</doc>
<status status="FAIL" start="2026-08-23T02:13:36.918720" elapsed="16.519452">HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-keystore:add-keystore-entry</status>
</kw>
<test id="s1-s7-s1-t1" name="Check_Device_Is_Not_Configured_At_Beginning" line="33">
<doc>Sanity check making sure our device is not there. Fail if found.</doc>
<status status="FAIL" start="2026-08-23T02:13:53.438268" elapsed="0.000795">Parent suite setup failed:
HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-keystore:add-keystore-entry</status>
</test>
<test id="s1-s7-s1-t2" name="Configure_Device_On_Netconf" line="37">
<doc>Make request to configure netconf netopeer with wrong password. Correct auth is netconf/netconf
ODL should connect to device using public key auth as password auth will fail.</doc>
<status status="FAIL" start="2026-08-23T02:13:53.439322" elapsed="0.000875">Parent suite setup failed:
HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-keystore:add-keystore-entry</status>
</test>
<test id="s1-s7-s1-t3" name="Wait_For_Device_To_Become_Connected" line="44">
<doc>Wait until the device becomes available through Netconf.</doc>
<status status="FAIL" start="2026-08-23T02:13:53.440609" elapsed="0.000620">Parent suite setup failed:
HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-keystore:add-keystore-entry</status>
</test>
<test id="s1-s7-s1-t4" name="Deconfigure_Device_From_Netconf" line="48">
<doc>Make request to deconfigure the testtool device on Netconf connector.</doc>
<status status="FAIL" start="2026-08-23T02:13:53.441575" elapsed="0.000613">Parent suite setup failed:
HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-keystore:add-keystore-entry</status>
</test>
<test id="s1-s7-s1-t5" name="Check_Device_Going_To_Be_Gone_After_Deconfiguring" line="53">
<doc>Check that the device is really going to be gone. Fail
if found after one minute. This is an expected behavior as the
delete request is sent to the config subsystem which then triggers
asynchronous destruction of the netconf connector referring to the
device and the device's data. This test makes sure this
asynchronous operation does not take unreasonable amount of time
by making sure that both the netconf connector and the device's
data is gone before reporting success.</doc>
<tag>critical</tag>
<status status="FAIL" start="2026-08-23T02:13:53.442539" elapsed="0.001593">Parent suite setup failed:
HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-keystore:add-keystore-entry</status>
</test>
<kw name="Suite Teardown" type="TEARDOWN">
<kw name="Delete All Sessions" owner="RequestsLibrary">
<msg time="2026-08-23T02:13:53.445099" level="INFO">Deleting All Sessions</msg>
<doc>Removes all the session objects</doc>
<status status="PASS" start="2026-08-23T02:13:53.445025" elapsed="0.000144"/>
</kw>
<kw name="Close All Connections" owner="SSHLibrary">
<doc>Closes all open connections.</doc>
<status status="PASS" start="2026-08-23T02:13:53.445313" elapsed="0.000599"/>
</kw>
<doc>Tearing down the setup.</doc>
<status status="PASS" start="2026-08-23T02:13:53.444793" elapsed="0.001178"/>
</kw>
<doc>Test suite to verify the device mount using public key based auth.</doc>
<status status="FAIL" start="2026-08-23T02:13:36.828542" elapsed="16.617463">Suite setup failed:
HTTPError: 404 Client Error: Not Found for url: http://10.30.170.114:8181/rests/operations/netconf-keystore:add-keystore-entry</status>
</suite>
<status status="FAIL" start="2026-08-23T02:13:36.826975" elapsed="16.619994"/>
</suite>
<status status="FAIL" start="2026-08-23T01:46:01.553065" elapsed="1671.895198"/>
</suite>
<statistics>
<total>
<stat pass="53" fail="85" skip="0">All Tests</stat>
</total>
<tag>
<stat pass="1" fail="30" skip="0">critical</stat>
<stat pass="0" fail="1" skip="0">https://bugs.opendaylight.org/show_bug.cgi?id=3934</stat>
</tag>
<suite>
<stat name="netconf-gate-userfeatures.txt" id="s1" pass="53" fail="85" skip="0">netconf-gate-userfeatures.txt</stat>
<stat name="Ready" id="s1-s1" pass="2" fail="4" skip="0">netconf-gate-userfeatures.txt.Ready</stat>
<stat name="Netconfready" id="s1-s1-s1" pass="2" fail="4" skip="0">netconf-gate-userfeatures.txt.Ready.Netconfready</stat>
<stat name="Apidocs" id="s1-s2" pass="0" fail="1" skip="0">netconf-gate-userfeatures.txt.Apidocs</stat>
<stat name="Apidocs" id="s1-s2-s1" pass="0" fail="1" skip="0">netconf-gate-userfeatures.txt.Apidocs.Apidocs</stat>
<stat name="MDSAL" id="s1-s3" pass="49" fail="0" skip="0">netconf-gate-userfeatures.txt.MDSAL</stat>
<stat name="Northbound" id="s1-s3-s1" pass="49" fail="0" skip="0">netconf-gate-userfeatures.txt.MDSAL.Northbound</stat>
<stat name="CRUD" id="s1-s4" pass="2" fail="56" skip="0">netconf-gate-userfeatures.txt.CRUD</stat>
<stat name="CRUD-RPC" id="s1-s4-s1" pass="1" fail="28" skip="0">netconf-gate-userfeatures.txt.CRUD.CRUD-RPC</stat>
<stat name="CRUD" id="s1-s4-s2" pass="1" fail="28" skip="0">netconf-gate-userfeatures.txt.CRUD.CRUD</stat>
<stat name="CRUD-ACTION" id="s1-s5" pass="0" fail="11" skip="0">netconf-gate-userfeatures.txt.CRUD-ACTION</stat>
<stat name="CRUD-ACTION" id="s1-s5-s1" pass="0" fail="11" skip="0">netconf-gate-userfeatures.txt.CRUD-ACTION.CRUD-ACTION</stat>
<stat name="Notifications" id="s1-s6" pass="0" fail="8" skip="0">netconf-gate-userfeatures.txt.Notifications</stat>
<stat name="Notifications Basic" id="s1-s6-s1" pass="0" fail="8" skip="0">netconf-gate-userfeatures.txt.Notifications.Notifications Basic</stat>
<stat name="KeyAuth" id="s1-s7" pass="0" fail="5" skip="0">netconf-gate-userfeatures.txt.KeyAuth</stat>
<stat name="Keyauth" id="s1-s7-s1" pass="0" fail="5" skip="0">netconf-gate-userfeatures.txt.KeyAuth.Keyauth</stat>
</suite>
</statistics>
<errors>
<msg time="2026-08-23T02:07:49.169761" level="WARN">Error in file '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/NetconfKeywords.robot' on line 20: Suite 'netconf-gate-userfeatures.txt.CRUD.CRUD-RPC' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-08-23T02:07:49.171321" level="WARN">Error in file '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/NexusKeywords.robot' on line 20: Suite 'netconf-gate-userfeatures.txt.CRUD.CRUD-RPC' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-08-23T02:07:49.173935" level="WARN">Error in file '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/SSHKeywords.robot' on line 16: Suite 'netconf-gate-userfeatures.txt.CRUD.CRUD-RPC' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-08-23T02:07:49.174442" level="WARN">Error in file '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/Utils.robot' on line 4: Suite 'netconf-gate-userfeatures.txt.CRUD.CRUD-RPC' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-08-23T02:07:49.182480" level="WARN">Error in file '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/RemoteBash.robot' on line 25: Suite 'netconf-gate-userfeatures.txt.CRUD.CRUD-RPC' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-08-23T02:07:49.183278" level="WARN">Error in file '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/KarafKeywords.robot' on line 9: Suite 'netconf-gate-userfeatures.txt.CRUD.CRUD-RPC' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-08-23T02:10:20.506657" level="WARN">Error in file '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/NetconfKeywords.robot' on line 20: Suite 'netconf-gate-userfeatures.txt.CRUD.CRUD' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-08-23T02:10:20.508778" level="WARN">Error in file '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/NexusKeywords.robot' on line 20: Suite 'netconf-gate-userfeatures.txt.CRUD.CRUD' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-08-23T02:10:20.510521" level="WARN">Error in file '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/SSHKeywords.robot' on line 16: Suite 'netconf-gate-userfeatures.txt.CRUD.CRUD' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-08-23T02:10:20.511063" level="WARN">Error in file '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/Utils.robot' on line 4: Suite 'netconf-gate-userfeatures.txt.CRUD.CRUD' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-08-23T02:10:20.519244" level="WARN">Error in file '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/RemoteBash.robot' on line 25: Suite 'netconf-gate-userfeatures.txt.CRUD.CRUD' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-08-23T02:10:20.520038" level="WARN">Error in file '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/KarafKeywords.robot' on line 9: Suite 'netconf-gate-userfeatures.txt.CRUD.CRUD' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-08-23T02:12:41.207745" level="WARN">Error in file '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/NetconfKeywords.robot' on line 20: Suite 'netconf-gate-userfeatures.txt.CRUD-ACTION.CRUD-ACTION' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-08-23T02:12:41.209526" level="WARN">Error in file '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/NexusKeywords.robot' on line 20: Suite 'netconf-gate-userfeatures.txt.CRUD-ACTION.CRUD-ACTION' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-08-23T02:12:41.211270" level="WARN">Error in file '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/SSHKeywords.robot' on line 16: Suite 'netconf-gate-userfeatures.txt.CRUD-ACTION.CRUD-ACTION' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-08-23T02:12:41.211777" level="WARN">Error in file '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/Utils.robot' on line 4: Suite 'netconf-gate-userfeatures.txt.CRUD-ACTION.CRUD-ACTION' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-08-23T02:12:41.219862" level="WARN">Error in file '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/RemoteBash.robot' on line 25: Suite 'netconf-gate-userfeatures.txt.CRUD-ACTION.CRUD-ACTION' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-08-23T02:12:41.220626" level="WARN">Error in file '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/KarafKeywords.robot' on line 9: Suite 'netconf-gate-userfeatures.txt.CRUD-ACTION.CRUD-ACTION' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-08-23T02:13:22.522207" level="WARN">Error in file '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/KarafKeywords.robot' on line 9: Suite 'netconf-gate-userfeatures.txt.Notifications.Notifications Basic' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-08-23T02:13:22.523891" level="WARN">Error in file '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/SSHKeywords.robot' on line 16: Suite 'netconf-gate-userfeatures.txt.Notifications.Notifications Basic' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-08-23T02:13:22.524641" level="WARN">Error in file '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/Utils.robot' on line 4: Suite 'netconf-gate-userfeatures.txt.Notifications.Notifications Basic' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-08-23T02:13:22.534314" level="WARN">Error in file '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/NetconfKeywords.robot' on line 20: Suite 'netconf-gate-userfeatures.txt.Notifications.Notifications Basic' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-08-23T02:13:22.535946" level="WARN">Error in file '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/NexusKeywords.robot' on line 20: Suite 'netconf-gate-userfeatures.txt.Notifications.Notifications Basic' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
<msg time="2026-08-23T02:13:22.537964" level="WARN">Error in file '/w/workspace/netconf-csit-1node-gate-userfeatures-all-vanadium/test/csit/libraries/RemoteBash.robot' on line 25: Suite 'netconf-gate-userfeatures.txt.Notifications.Notifications Basic' has already imported library 'SSHLibrary' with different arguments. This import is ignored.</msg>
</errors>
</robot>
